Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

Ответ
Опции темы

Мост USB-USART проблемы с ноутбуком

Непрочитано 05.06.2015, 21:35   #71
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию 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.
Yurkin2014 вне форума   Ответить с цитированием
Непрочитано 06.06.2015, 08:43   #72
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Мост USB-USART проблемы с ноутбуком

Сообщение от Yurkin2014 Посмотреть сообщение
Если принято меньше 32 байтов, то serialPortMCU.Read() будет до упора ждать, а потом вылетит в catch{} по таймауту.
Да что Вы говорите !!! По умолчанию ReadTimeout установлено в InfiniteTimeout. Я вроде не советовал что-то с ним делать
Boba_spb вне форума   Ответить с цитированием
Непрочитано 06.06.2015, 09:26   #73
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию 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, то он дублируется.

А всякие там контрольные суммы и т.п. - то уже отдельный разговор
При разрыве передачи, следующий пакет всегда обрабатывается.
Boba_spb вне форума   Ответить с цитированием
Непрочитано 06.06.2015, 13:01   #74
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: Мост USB-USART проблемы с ноутбуком

Сообщение от Boba_spb Посмотреть сообщение
По умолчанию ReadTimeout установлено в InfiniteTimeout.
Я считаю, что InfiniteTimeout не есть хорошо.
Сообщение от Boba_spb Посмотреть сообщение
При разрыве передачи
вот-вот, при прекращении передачи по какой-либо причине программа с InfiniteTimeout просто тупо зависнет, и поможет только комбинация из трёх пальцев. На заказчика такие зависания производят плохое впечатление.
Сообщение от Boba_spb Посмотреть сообщение
Я лет 30 пользуюсь протоколами передачи ...
Для бинанарных сообщений чуть сложнее:
‹DLE›‹STX›‹ бинарные данные› ‹DLE›‹ETX›
Не, ну, Вы - просто молодец, никто ж не спорит!
Yurkin2014 вне форума   Ответить с цитированием
Непрочитано 06.06.2015, 13:36   #75
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Мост USB-USART проблемы с ноутбуком

Сообщение от Yurkin2014 Посмотреть сообщение
программа с InfiniteTimeout просто тупо зависнет
Ребят, я, возможно, туплю, но не для предотвращения ли вечных ожиданий таймауты придуманы?
omercury вне форума   Ответить с цитированием
Непрочитано 06.06.2015, 20:35   #76
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Мост USB-USART проблемы с ноутбуком

Если тупо писать, то можно и комп подвесить.
Делали системку - круглосуточный мониторинг. Два устройства на двух USB-COM. Замена устройств "налету" - какие зависания, о чем речь? Прогу писал на С#;

Последний раз редактировалось Boba_spb; 06.06.2015 в 21:06.
Boba_spb вне форума   Ответить с цитированием
Непрочитано 06.06.2015, 21:03   #77
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Мост USB-USART проблемы с ноутбуком

Цитата:
Не, ну, Вы - просто молодец, никто ж не спорит!
Гляньте на досуге http://opds.sut.ru/old/electronic_manuals/sde/sde5.htm
Может сарказма поуменьшится.

Если заинтересует, то можете исчо про БЧХ почитать - если вдруг помехи появятся на линии, то можно будет ошибочки и поправлять .

Мы не так долго живем что б все придумывать самому!

Последний раз редактировалось Boba_spb; 06.06.2015 в 21:50.
Boba_spb вне форума   Ответить с цитированием
Непрочитано 06.06.2015, 21:48   #78
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Мост USB-USART проблемы с ноутбуком

Сообщение от omercury Посмотреть сообщение
Ребят, я, возможно, туплю, но не для предотвращения ли вечных ожиданий таймауты придуманы?
Да не виснет она - в данном случае она вызывается в дополнительном потоке, который организуется при непустом буфере СОМ.

Но пионеры вызывают ее из основного потока , например из тика Form.Timer, и при отсутствии байт в буфере блокируют свой основной поток, потому что Form.Timer работает на основном потоке. А что б его разблокировать надо чуток еще постараться.

Организовать обмен на System.Timer - надо ж догадаться, да и работает он по - взрослому.

Ну так это руки кривые, а не
Boba_spb вне форума   Ответить с цитированием
Непрочитано 07.06.2015, 01:09   #79
Yurkin2014
Заблокирован
 
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
Yurkin2014 на пути к лучшему
По умолчанию Re: Мост USB-USART проблемы с ноутбуком

Сообщение от Boba_spb Посмотреть сообщение
вызывают ее из основного потока , например из тика Form.Timer
Причём тут таймер?!? Процедура serialPortMCU_DataReceived() вызывается драйвером компорта в тот момент, когда пришёл байт в приёмный буфер.

Боба, друг, ну, что за манера вести дискуссию! Я просто обратил внимание, что при бесконечном таймауте и недостаточном количестве байтов в буфере функция чтения порта зависнет навсегда. Вот и всё. В качестве контраргументов Вы почему-то приводите пример использования байт-стаффинга и описание какого-то "костыля с четыремя сетками". Всё это как-то неубедительно.
Ваши послания, ведь, читают тысячи начинающих программистов, и многие будут повторять, вон, мол, дядя Боба из Питера всегда ставит InfiniteTimeout и у него никогда ничего не виснет!
Yurkin2014 вне форума   Ответить с цитированием
Непрочитано 07.06.2015, 10:05   #80
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Мост USB-USART проблемы с ноутбуком

Мы плавно переходим с зависания в SerialPort.Read() , в зависание процедуры serialPortMCU_DataReceived()

Сделайте процедуру serialPortMCU_DataReceived() такой:

private void serialPortMCU_DataReceived()
{
// Чему тут висеть ??
}
Boba_spb вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
STM32F205RB Проблемы с USART IvanAlyaev ARM 2 04.05.2014 12:46
На ноутбуке Sony проблемы с USB sandist Ремонт оргтехники 6 23.05.2009 19:41
Помогите разобраться с USART в CodeVisionAVR vendim Микроконтроллеры, АЦП, память и т.д 20 26.07.2007 16:42


Часовой пояс GMT +4, время: 14:18.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.