| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Мост USB-USART проблемы с ноутбуком
05.06.2015, 21:35
|
#71
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Мост USB-USART проблемы с ноутбуком
Раз уж ждёте пакеты с синхробайтами, то читайте по одному байту из приёмного буфера и тут же проверяйте на == USART_SYN_OUT.
Типа так
|
Код:
|
void serialPortMCU_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int temp, tempold;
tempold = 0;
while (serialPortMCU.BytesToRead › 0)
{
temp = serialPortMCU.ReadByte();
if((temp ==USART_SYN_OUT) && (tempold ==USART_SYN_OUT))
{
serialInByte[countByteInBuff] = USART_SYN_OUT;
serialInByte[countByteInBuff+1] = USART_SYN_OUT;
for (int i = countByteInBuff+2; i ‹ countByteInBuff + 6; i++)
{
serialInByte[i] = serialPortMCU.ReadByte();
}
break;
}
tempold=temp;
}
} |
Последний раз редактировалось Yurkin2014; 05.06.2015 в 21:39.
|
|
|
|
06.06.2015, 08:43
|
#72
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Мост USB-USART проблемы с ноутбуком
Сообщение от Yurkin2014
|
|
Если принято меньше 32 байтов, то serialPortMCU.Read() будет до упора ждать, а потом вылетит в catch{} по таймауту.
|
Да что Вы говорите !!! По умолчанию ReadTimeout установлено в InfiniteTimeout. Я вроде не советовал что-то с ним делать
|
|
|
|
06.06.2015, 09:26
|
#73
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Мост USB-USART проблемы с ноутбуком
Сообщение от Yurkin2014
|
|
Раз уж ждёте пакеты с синхробайтами, то читайте по одному байту из приёмного буфера и тут же проверяйте на == USART_SYN_OUT.
|
Я лет 30 пользуюсь протоколами передачи, которые придуманы Бог знает сколько лет назад.
Если передается символьная информация то протокол простой:
‹STX› ‹передаваемые символы›‹ETX›.
Ах, да что такое ‹STX› и ‹ETX› ? Посмотрим в ASCII ( разработана в 1963 году)
STX - 0x02 - START OF TEXT
ETX - 0x03 - END OF TEXT
Далее все просто как мычание.
Для бинанарных сообщений чуть сложнее:
‹DLE›‹STX›‹ бинарные данные› ‹DLE›‹ETX›
DLE - 0x10 - "SYNCHRONOUS IDLE"
Естественно ‹DLE› будет байт-стаффингом в этом протоколе, т.е.,
если среди бинарных данных встречается код 0x10, то он дублируется.
А всякие там контрольные суммы и т.п. - то уже отдельный разговор
При разрыве передачи, следующий пакет всегда обрабатывается.
|
|
|
|
06.06.2015, 13:01
|
#74
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Мост USB-USART проблемы с ноутбуком
Сообщение от Boba_spb
|
|
По умолчанию ReadTimeout установлено в InfiniteTimeout.
|
Я считаю, что InfiniteTimeout не есть хорошо.
Сообщение от Boba_spb
|
|
При разрыве передачи
|
вот-вот, при прекращении передачи по какой-либо причине программа с InfiniteTimeout просто тупо зависнет, и поможет только комбинация из трёх пальцев. На заказчика такие зависания производят плохое впечатление.
Сообщение от Boba_spb
|
Я лет 30 пользуюсь протоколами передачи ...
Для бинанарных сообщений чуть сложнее:
‹DLE›‹STX›‹ бинарные данные› ‹DLE›‹ETX›
|
Не, ну, Вы - просто молодец, никто ж не спорит!
|
|
|
|
06.06.2015, 13:36
|
#75
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Мост USB-USART проблемы с ноутбуком
Сообщение от Yurkin2014
|
|
программа с InfiniteTimeout просто тупо зависнет
|
Ребят, я, возможно, туплю, но не для предотвращения ли вечных ожиданий таймауты придуманы?
|
|
|
|
06.06.2015, 20:35
|
#76
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Мост USB-USART проблемы с ноутбуком
Если тупо писать, то можно и комп подвесить.
Делали системку - круглосуточный мониторинг. Два устройства на двух USB-COM. Замена устройств "налету" - какие зависания, о чем речь? Прогу писал на С#;
Последний раз редактировалось Boba_spb; 06.06.2015 в 21:06.
|
|
|
|
06.06.2015, 21:03
|
#77
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Мост USB-USART проблемы с ноутбуком
|
Цитата:
|
|
Не, ну, Вы - просто молодец, никто ж не спорит!
|
Гляньте на досуге http://opds.sut.ru/old/electronic_manuals/sde/sde5.htm
Может сарказма поуменьшится.
Если заинтересует, то можете исчо про БЧХ почитать - если вдруг помехи появятся на линии, то можно будет ошибочки и поправлять .
Мы не так долго живем что б все придумывать самому!
Последний раз редактировалось Boba_spb; 06.06.2015 в 21:50.
|
|
|
|
06.06.2015, 21:48
|
#78
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Мост USB-USART проблемы с ноутбуком
Сообщение от omercury
|
|
Ребят, я, возможно, туплю, но не для предотвращения ли вечных ожиданий таймауты придуманы?
|
Да не виснет она - в данном случае она вызывается в дополнительном потоке, который организуется при непустом буфере СОМ.
Но пионеры вызывают ее из основного потока , например из тика Form.Timer, и при отсутствии байт в буфере блокируют свой основной поток, потому что Form.Timer работает на основном потоке. А что б его разблокировать надо чуток еще постараться.
Организовать обмен на System.Timer - надо ж догадаться, да и работает он по - взрослому.
Ну так это руки кривые, а не
|
|
|
|
07.06.2015, 01:09
|
#79
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Мост USB-USART проблемы с ноутбуком
Сообщение от Boba_spb
|
|
вызывают ее из основного потока , например из тика Form.Timer
|
Причём тут таймер?!? Процедура serialPortMCU_DataReceived() вызывается драйвером компорта в тот момент, когда пришёл байт в приёмный буфер.
Боба, друг, ну, что за манера вести дискуссию! Я просто обратил внимание, что при бесконечном таймауте и недостаточном количестве байтов в буфере функция чтения порта зависнет навсегда. Вот и всё. В качестве контраргументов Вы почему-то приводите пример использования байт-стаффинга и описание какого-то "костыля с четыремя сетками". Всё это как-то неубедительно.
Ваши послания, ведь, читают тысячи начинающих программистов, и многие будут повторять, вон, мол, дядя Боба из Питера всегда ставит InfiniteTimeout и у него никогда ничего не виснет!
|
|
|
|
07.06.2015, 10:05
|
#80
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Мост USB-USART проблемы с ноутбуком
Мы плавно переходим с зависания в SerialPort.Read() , в зависание процедуры serialPortMCU_DataReceived()
Сделайте процедуру serialPortMCU_DataReceived() такой:
private void serialPortMCU_DataReceived()
{
// Чему тут висеть ??
}
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:18.
|
|