Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Обмен организован так:
Отправлено
Ivax 30 января 2008 г. 20:24
В ответ на:
Ответ: отправлено
koyodza 30 января 2008 г. 11:35
Логика простая:
В управляющей программе очередь. Посылка для мк пакуется во фрейм, обрамленный флагами с использованием байт стаффинга по типу SLIP протокола. Добавляется служебная информация, номер посылки, КС. И фрейм передается. До получения ответа или таймаута ничего больше не передается. В случае неполучения ответа или прихода битого фрейма производится повторная отправка.
Для работы с СОМ портом в программе используется компонент TMS Async32. Он работает в отдельном потоке и события от него происходят по получению флага конца фрейма или по ошибке порта. Программа забирает данные из буфера компонента и обрабатывает полученный фрейм. Пробовал использовать и другие компоненты и работать с API - результат одинаковый.
В МК по прерыванию принимаются данные, готовится ответ и так-же по прерыванию передается. Для проверки использую эхо, мк просто отправляя назад полученный фрейм. Ошибка происходит независимо от длины фрейма, данных в нем или числа переданных фреймов. Просто в любой момент при приеме получаю overrun.
Непонятно почему это же происходит и на софтовом порту преобразователя. Что там может переполниться?
Составить ответ | Вернуться на конференцию
Ответы
- Ответ: — koyodza (30.01.2008 23:35:52 77.123.62.213, 739 байт)