Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Хорошо, спасибо, я с этим поразбираюсь. Только до сих пор не могу понять, как комп опознает начало...ну хотя бы пакета, образующего байт?
Отправлено
mayn
17 июня 2007 г. 14:43
В ответ на:
Цитата из описания работы с COM-портом через API: "Основные параметры последовательного порта описываются структурой DCB. Временные параметры структурой COMMTIMEOUTS. Существует еще несколько информационных и управляющих структур, но они используются реже. Настройка порта заключается в заполнении управляющих структур и последующем вызове функций настройки."
отправлено <font color=gray>Mk - 51</font> 17 июня 2007 г. 14:34
Составить ответ
|
Вернуться на конференцию
Ответы
Не "пакета образующего байт", а начало посылки. Это очень просто - после интервала времени соответствующего стоп биту (или 1.5, 2-м) порт приходит в ожидание старт бита. Вот этот-то старт бит и определяет начало посылки. Это аппаратная часть, а все остальное - часть программная, в том числе и таймауты.
—
Mk - 51
(17.06.2007 14:55:56
89.178.61.209
,
пустое
)
Правильно я понимаю, что пакет, посылка - это несколько бит между старт- и стоп-битами? А какие задавать значения параметров ReadIntervalTimeout, ReadTotalTimeoutMultiplier и ReadTotalTimeoutConstant структуры COMMTIMEOUTS? Не очень понятно и самому не получилось сделать.
—
mayn
(17.06.2007 19:53:33
87.245.133.19
,
пустое
)
Пакет - это N - ное число посылок из 6-9 бит, а посылка - это то, что между старт и стоп битами. Обычно посылка состоит из 8 бит (байт) с битом четности (9-тым) или без оного, поэтому будем называть посылку байтом. А значения параметров ReadIntervalTimeout, ReadTotalTimeoutMultiplier и ReadTotalTimeoutConstant структуры COMMTIMEOUTS относятся к пакету.
—
Mk - 51
(17.06.2007 20:27:42
89.178.61.209
,
пустое
)
А в MSDN написано, что ReadIntervalTimeout - Maximum time allowed to elapse BETWEEN the arrival of TWO BYTES on the communications line, in milliseconds.
—
mayn
(17.06.2007 21:35:45
87.245.133.19
,
пустое
)
А чему равно N - это что, 16 для 16-байтного стека FIFO в UART? Или это величина переменная, условная - какую зададим, такое число байт и считаем (в ReadFile)?
—
mayn
(17.06.2007 21:30:55
87.245.133.19
,
пустое
)
Я не знаю как объяснить элементарные вещи. Все что могу - N - это то, что сам определяешь, а стек FIFO в UART - это аппаратная часть, для предотвращения потерь при задержках выборки. Читайте литературу, а я иссяк.
—
Mk - 51
(17.06.2007 21:56:49
89.178.61.209
,
пустое
)
Спасибо за помощь!
—
mayn
(17.06.2007 22:03:18
87.245.133.19
,
пустое
)
Херня это все, вон болгарский коллега дело подсказывает -->
—
=AVR=
(17.06.2007 21:49:39
80.92.96.19
,
пустое
,
ссылка
)
Если честно (хотя вроде из вышесказанного ясно), я просто не до конца врубаюсь в работу UART. Мне бы какой-нибудь рабочий, надежный пример посмотреть. Я, например, не пойму, чему равно N у меня в программе для мк, притом, что он передает данные непрерывно. Или это число байт в буфере чтения для ReadFile?
—
mayn
(17.06.2007 22:10:32
87.245.133.19
,
пустое
)
Это не помогает, все равно далеко не всегда передается то, что надо
—
mayn
(17.06.2007 22:04:16
87.245.133.19
,
пустое
)
Задав правильно таймауты, я смогу надежно получать все посылки. А как лучше отмечать начало "сообщений" компу - только программно какими-то специальными символами? А если я хочу передавать бинарные данные?
—
mayn
(17.06.2007 15:24:45
87.245.133.19
,
пустое
)
Ну, есть куча всевозможных приемов! Например - конец пакета отмечать каким либо байтом с инверсным битом четности, тогда как данные с прямым битом четности и т.д. и т.п.
—
Mk - 51
(17.06.2007 15:40:51
89.178.61.209
,
пустое
)
и как тогда предлагаете на стороне PC это разгребать?
—
nestandart
(17.06.2007 15:46:5
87.180.1.237
,
пустое
)
Проще простого - будет выработана ошибка паритета и проверен байт (например 0xaa). Если да - конец обмена. Ну, а как быть, если ошибка будет в пакете, я думаю и без меня разберетесь! И чего здесь сложного-то! У меня на Delphi это занимает 15 строк в процедуре!
—
Mk - 51
(17.06.2007 17:24:53
89.178.61.209
,
пустое
)
Посомотрите, может, пригодится.
—
Леонид Иванович
(17.06.2007 16:19:9
87.252.227.57
,
пустое
,
ссылка
)
а как то можно это прикрутить к любимой терминалке ?
—
nestandart
(17.06.2007 16:39:39
87.180.1.237
,
пустое
)
Никак. В качестве терминалки там свой софт - WakeUp!
—
Леонид Иванович
(18.06.2007 12:16:48
87.252.227.57
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 387:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru