FreeBasic
Главная
Вход
Регистрация
Суббота, 20.04.2024, 18:52Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Как вывести программу из "ступора"? (Нужна помощь)
Как вывести программу из "ступора"?
Nicolas_zolДата: Четверг, 06.12.2012, 16:18 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
Всем доброго времени суток!
Помогите пожалуйста чем сможете!
Вот кусок кода из программы:
Code
Dim Shared As Integer w,h
Screeninfo w,h
ScreenRes w,h,8,,1
Dim As Double t1,t
Dim As UShort COM_In(15)
Dim As UShort COM_Out(15)
Open Com "COM10:57600,n,8,1,ds0,cs0" As #1
Put #1,,COM_Out(0),16
Do Until InKey="q"
  If Eof(1)<>-1 Then
   Get #1,,COM_In(0),16
   Put #1,,COM_Out(0),16
  EndIf
Loop
close#1
End

Программа шлет данные в Com-порт и получает их, всё работает отлично.
Но есть одна проблема, данные шлются через RF-модули Xbee (XBP24) и при потери сигнала программа зависает. Почему зависает, я примерно представляю. Вопрос в другом, как избежать зависание программы, чтобы она продолжила своё выполнение, не смотря то, что порт завис?
 
haavДата: Четверг, 06.12.2012, 18:10 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Наверно есть смысл работать в отдельном потоке с передачами данных. Сам не пробовал работать с COM портами. Функции для создания дополнительного(ых) потока(ов):

ThreadCreate или ThreadCall

На русском про работу с первой функцией написано ЗДЕСЬ


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Nicolas_zolДата: Четверг, 06.12.2012, 18:15 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
Спасибо! Почитаю.
 
CoBa31RusДата: Вторник, 10.02.2015, 20:56 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 7
Репутация: 0
Статус: Offline
Доброго времени суток. Дабы не плодить темы спрошу по COM порту здесь.
Открываю COM порт с параметрами "COM1:10400,N,8,1,CS0,DS0"
Кладу байт допустим &hFF, сплю 100мс, читаю по байтам что пришло в COM порт, получаю байты которые отправил вместе с теми которые пришли.
Вопрос как отделить отправленные от принятых, можно конечно парсингом или по ключевым битам, но ведь должно быть более изящьное решение:)

Добавлено (10.02.2015, 20:56)
---------------------------------------------
Немного разобрался решение не оч. изящьное но все таки:


Код
Dim As UByte com_out(1) = {&hFF,&hAA}
Dim com_in() As UByte
Dim FPort As Integer = FreeFile
Dim portString As String

Open com "COM8:10400,N,8,1,CD0,CS0,DS0" As #fport
Do
      Put #fport,,com_out()
     Sleep(100)
     ReDim com_in(LOC(fport)-1)
         Get #fport,0,com_in()
     For i As UShort = UBound(com_out) + 1 To UBound(com_in)
         ? Hex(com_in(i));
         portstring += Hex(com_in(i))
     Next
     ?
Loop Until InKey = "q"
Close #fport
Sleep
Решение в том чтобы считывать полученный буфер байта, с индекса равного длинне отправленного smile
 
Форум » Freebasic » Вопросы по языку FreeBasic » Как вывести программу из "ступора"? (Нужна помощь)
  • Страница 1 из 1
  • 1
Поиск: