|
Протокол внутрь драйвера или поверх драйвера? |
|
|
|
Dec 29 2011, 17:26
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Сейчас разрабатываем устройтство на AVR32-я пишу внутреннюю прогу для него, вот такой вопрос, даже не знаю, в какой раздел мне его писать. Устройство опрашивает 4 АЦП и кроме того должно писать данные на SD карту и делать еще кое-какие расчеты и обмениваться по UART и Ethernet. В других устройствах мы использовали вот примерно такой протокол обмена RS485 -он очень хорошо работал-
запрос: -первый байт адрес устроства -второй команда и число след. байт в посылке -посылка -контрольная сумма CRC16
ответ- -число байт -посылка -контрольная сумма CRC16
так как сейчас я решил это устройство делать с помошью этой небольшой оськи и у меня вот такой вопрос возник-все примеры этой оси предлагают уже написанный драйвер UART в котором все общение может вестись на уровне write / read. Но мне это как бы совсем не нужно, все другие камни , которые я программировал, что там весь обмен идет на прерываниях по чтения и по записи, и, соответственно ошибочные пакеты, неправильная контрольная сумма, не мой адрес и пр. -я просто отбрасываю и не вожусь с ними. так как длина посылок разная-сначала идет прием IRQ UART , а после получения длинны посылки включаю ДМА чтобы принять все остальное. Вобщем эта ось мне нужна, чтобы распределить обмен между запущенными процессами (ака задачи)-например та же запись на карту. и мне вот интересно спросить у знатоков, если писать обмен для этой OS так как делаю я-это правильно с точки зрения этой оси, или все таки нужно писать драйвер, а потом в верхнем уровне протокола делать разбор всей этой байды-типа парсинга того что я принял. И еще, мне это интересно, так как и для обработки прерываний от АЦП нужно будет то же решить, как все это по-правильному сделать.
|
|
|
|
|
 |
Ответов
|
Dec 29 2011, 18:24
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Цитата(aaarrr @ Dec 29 2011, 20:44)  Драйвер из примеров - он пример и есть, использовать его никто не заставляет.
Только вот это -
просто ужас как плохо, ибо требует низкой латентности прерываний UART. почему плохо? ДМА можно напрямую использовать если наперед знаешь сколько придет. как по вашему сделать лучше?
|
|
|
|
|
Dec 29 2011, 18:37
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(inventor @ Dec 29 2011, 22:24)  почему плохо? Потому что у атмеловских UART'ов нет FIFO. Если, например, битовая скорость интерфейса равна 115200, то в системе нельзя блокировать прерывание UART дольше чем на 87мкс. А подобные ограничения удобства работы не добавляют. Цитата(inventor @ Dec 29 2011, 22:24)  ДМА можно напрямую использовать если наперед знаешь сколько придет. как по вашему сделать лучше? DMA можно использовать всегда, просто нужно использовать его совместно с прерыванием по тайм-ауту приемника UART.
|
|
|
|
Сообщений в этой теме
inventor Протокол внутрь драйвера или поверх драйвера? Dec 29 2011, 17:26    aaarrr Цитата(inventor @ Dec 29 2011, 23:42) не ... Dec 29 2011, 19:56     inventor Цитата(aaarrr @ Dec 29 2011, 22:56) Я так... Dec 29 2011, 20:28      aaarrr Цитата(inventor @ Dec 30 2011, 00:28) нап... Dec 29 2011, 20:39       inventor Цитата(aaarrr @ Dec 29 2011, 23:39) А есл... Dec 30 2011, 18:27 Tiro Цитата(inventor @ Dec 29 2011, 20:26) зап... Dec 29 2011, 18:05
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|