реклама на сайте
подробности

 
 
> Принцип построения консоли управления устройством, Поделитесь опытом кто как делает :)
mempfis_
сообщение Aug 12 2009, 08:43
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Стоит задача разаработать устройство которое должно иметь возможность управляться через UART.
Думаю встроить отладочную консоль чтобы можно было посылать в устройство комманды и получать ответы.
Комманды в виде одиночных символов реализовал. Теперь хочу расширить функциональность консоли и реализовать длинные команды
(наподобие АТ-комманд). Причём хочется сделать аппаратно-независимую консоль чтобы можно было переносить из проекта в проект меняя только низкоуровневые функции приёма/отправки символовов через UART.

Подскажите кто как делает подобные консоли. Интересует прежде всего как осуществляется поиск комманд в потоке принимаемых символов (выделение слов длиной 2 и более символа)? Какие стандартные библиотеки можно использовать?

Сейчас реализована входная FIFO-UART которая заполняется в прерываниях и функция считывания символа из FIFO которая возвращает -1 если нет данных или принятый символ. Одиночные символы отлавливать легко (считал - обработал), два - уже сложнее но пока реализую устанавливая флаги.
Как отловить три и более символа - вот тут нужны идеи smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
C.S.
сообщение Aug 25 2009, 12:25
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733



2_Pasha Кхм, я путаюсь уровнем ниже. Как принимаемое пихать в буфер и что делать, если будут слать следующую команду,пока обрабатывается текущая. Думаю отключать UART на приём(?).
То-есть есть отдельно принималка строки и есть отдельно парсер. Вот с принималкой строки затыки следующие:
0. Есть область памяти и счётчик адреса = буфер. Так?
1.1. По прерыванию пихаем байт, инкрементируем счётчик, проверяем переполнение счётчика, выдаём ошибки, если надо (переполнен буфер).
1.2. После принятия очередного байта проверяем два последних на CRLF. Если равны = отключаем приём, передаём буфер парсеру.
2. Парсер уже сам разбирается - команда/ошибка, выдаёт ответ или выполняет её, в конце разрешая приём.

Есть ли тут какие-то подводные камни? Первый вижу сам - пока обрабатываем что-то, теряем посылаемое в этот момент. Это я закладываю в протокол: если не пришёл ответ от команды, повторить посылку.

И ещё непонятно с таймаутом - как его посчитать? Выходит что-то типа ватчдога? Или вообще не делать, а просто ждать CRLF?

Видел модуль, там типа терминала через RS-232 написано, так, вроде там таймаута нет никакого. Просто строка кончается CRLF.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 25 2009, 12:58
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(C.S. @ Aug 25 2009, 15:25) *
Первый вижу сам - пока обрабатываем что-то, теряем посылаемое в этот момент. Это я закладываю в протокол: если не пришёл ответ от команды, повторить посылку.

Тогда FIFO (пардон за Си):
Код
volatile char buffer[BUFSIZE];
volatile unsigned char pos_rd, pos_wr;

// прерывание UART
{
char tmp=UDR;
buffer[pos_wr++] = tmp;
if(pos_wr >= BUFSIZE ) pos_wr = 0;
}

// опр числа принятых символов
// условие кгда нет символов одно  - это pos_wr == pos_rd
unsigned char sym_pending(void)
{
return (pos_wr >= pos_rd) ? (pos_wr - pos_rd) : ( pos_wr + BUFSIZE - pos_rd);
}
// чтение из буфера
char sym_read(void)
{
char tmp = buffer[pos_rd++];
if(pos_rd >= BUFSIZE) pos_rd = 0;
return tmp;
}


Цитата
И ещё непонятно с таймаутом - как его посчитать? Выходит что-то типа ватчдога?

Для начала определитесь, для чего именно Вам таймаут. Он может быть как на время между принятыми командами, так и на время между символами.
ЗЫ для определения переполнения буфера можно параллельно ввести счетчик принятых байт. При чтении - декрементировать его.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mempfis_   Принцип построения консоли управления устройством   Aug 12 2009, 08:43
- - ukpyr   нужен приемный буфер на макс.количество символов в...   Aug 12 2009, 10:17
- - _Pasha   Собираете словарь команд (ASCIIZ), например Кодcon...   Aug 12 2009, 10:26
|- - zltigo   Цитата(_Pasha @ Aug 12 2009, 13:26) Собир...   Aug 12 2009, 11:24
|- - _Pasha   Цитата(zltigo @ Aug 12 2009, 14:24) Станд...   Aug 12 2009, 11:40
|- - AlexMad   Цитата(zltigo @ Aug 12 2009, 15:24) С раз...   Aug 20 2009, 18:52
|- - zltigo   Цитата(AlexMad @ Aug 20 2009, 20:52) А не...   Aug 20 2009, 19:23
- - DpInRock   Длинные команды - бессмысленное пижонство.   Aug 12 2009, 12:06
- - Goodefine   Зато обеспечивают детерминированное поведение сист...   Aug 12 2009, 14:31
|- - Dog Pawlowa   Цитата(Goodefine @ Aug 12 2009, 17:31) За...   Aug 12 2009, 15:44
- - Goodefine   Цитата(Dog Pawlowa @ Aug 12 2009, 18:44) ...   Aug 12 2009, 15:50
|- - Dog Pawlowa   Цитата(Goodefine @ Aug 12 2009, 18:50) В ...   Aug 12 2009, 17:21
|- - AHTOXA   Цитата(Dog Pawlowa @ Aug 12 2009, 23:21) ...   Aug 12 2009, 17:49
|- - Dog Pawlowa   Цитата(AHTOXA @ Aug 12 2009, 20:49) Гораз...   Aug 12 2009, 18:27
|- - AHTOXA   Цитата(Dog Pawlowa @ Aug 13 2009, 00:27) ...   Aug 12 2009, 19:06
|- - _Pasha   Цитата(Dog Pawlowa @ Aug 12 2009, 21:27) ...   Aug 12 2009, 19:10
- - SasaVitebsk   Читал протокол Пирамида. Правда это надпротокольны...   Aug 12 2009, 19:08
- - Goodefine   Цитата(Dog Pawlowa @ Aug 12 2009, 20:21) ...   Aug 12 2009, 19:32
|- - Dog Pawlowa   Цитата(Goodefine @ Aug 12 2009, 22:32) В ...   Aug 13 2009, 02:18
- - _Pasha   Цитата(zltigo @ Aug 12 2009, 14:24) Код.....   Aug 13 2009, 05:02
|- - AHTOXA   Цитата(_Pasha @ Aug 13 2009, 11:02) Ничег...   Aug 13 2009, 05:45
|- - _Pasha   Цитата(AHTOXA @ Aug 13 2009, 08:45) Как р...   Aug 13 2009, 05:52
|- - AHTOXA   Что-то не могу себе представить... Расскажите чуть...   Aug 13 2009, 06:00
|- - _Pasha   Цитата(AHTOXA @ Aug 13 2009, 09:00) как, ...   Aug 13 2009, 06:09
|- - AHTOXA   Насколько я понял, автор темы хочет консоль управл...   Aug 13 2009, 06:17
|- - mempfis_   Цитата(AHTOXA @ Aug 13 2009, 09:17) Наско...   Aug 13 2009, 06:41
|- - SasaVitebsk   Цитата(mempfis_ @ Aug 13 2009, 09:41) ...   Aug 13 2009, 16:01
- - _Pasha   Цитата(AHTOXA @ Aug 13 2009, 09:17) Наско...   Aug 13 2009, 07:02
|- - AHTOXA   Цитата(_Pasha @ Aug 13 2009, 13:02) Но, в...   Aug 13 2009, 07:23
|- - _Pasha   Цитата(AHTOXA @ Aug 13 2009, 10:23) проще...   Aug 13 2009, 07:33
|- - AHTOXA   Цитата(_Pasha @ Aug 13 2009, 13:33) Ага. ...   Aug 13 2009, 09:30
- - rezident   В дополнение ко всему хотел бы заметить, что конфи...   Aug 13 2009, 19:03
|- - SasaVitebsk   Цитата(rezident @ Aug 13 2009, 22:03) В д...   Aug 14 2009, 06:54
|- - MrYuran   Цитата(SasaVitebsk @ Aug 14 2009, 10:54) ...   Aug 14 2009, 07:13
- - amaora   Обычно использую бинарный протокол для отладки, но...   Aug 14 2009, 17:02
|- - defunct   ЦитатаПринцип построения консоли управления устрой...   Aug 15 2009, 15:52
- - C.S.   Цитата(mempfis_ @ Aug 12 2009, 12:43) Сей...   Aug 25 2009, 11:56
|- - _Pasha   Цитата(C.S. @ Aug 25 2009, 14:56) Смущает...   Aug 25 2009, 12:08
|- - AHTOXA   Цитата(C.S. @ Aug 25 2009, 18:25) Как при...   Aug 25 2009, 13:03
- - C.S.   На время между символами. Наверное, может и не нуж...   Aug 25 2009, 13:02
|- - _Pasha   Цитата(C.S. @ Aug 25 2009, 16:02) А sym_p...   Aug 25 2009, 13:17
- - C.S.   ЦитатаРазворачиваем это все в другой буфер (к сожа...   Aug 25 2009, 13:26
|- - _Pasha   Цитата(C.S. @ Aug 25 2009, 16:26) Аааа...   Aug 25 2009, 13:36
- - C.S.   Цитатаэто ж ответ от девайса пойдет только после п...   Aug 25 2009, 13:54
|- - _Pasha   Цитата(C.S. @ Aug 25 2009, 16:54) Так вед...   Aug 25 2009, 14:03
- - C.S.   Так а если надо будет вернуть чего-то более разумн...   Aug 25 2009, 14:17
|- - _Pasha   Цитата(C.S. @ Aug 25 2009, 17:17) Так а е...   Aug 25 2009, 14:36
- - C.S.   Понял. Идиот. Спасибо большое!   Aug 25 2009, 15:18
- - C.S.   Парсинг команд сделал. Использовал побайтовое срав...   Aug 27 2009, 09:33
|- - _Pasha   Цитата(C.S. @ Aug 27 2009, 12:33) Команды...   Aug 27 2009, 14:19
- - C.S.   Хм, попробую и так. Просто делить их по запятой. А...   Aug 27 2009, 14:45


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 23:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.0143 секунд с 7
ELECTRONIX ©2004-2016