|
Принцип построения консоли управления устройством, Поделитесь опытом кто как делает :) |
|
|
|
Aug 12 2009, 08:43
|

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

|
Стоит задача разаработать устройство которое должно иметь возможность управляться через UART. Думаю встроить отладочную консоль чтобы можно было посылать в устройство комманды и получать ответы. Комманды в виде одиночных символов реализовал. Теперь хочу расширить функциональность консоли и реализовать длинные команды (наподобие АТ-комманд). Причём хочется сделать аппаратно-независимую консоль чтобы можно было переносить из проекта в проект меняя только низкоуровневые функции приёма/отправки символовов через UART. Подскажите кто как делает подобные консоли. Интересует прежде всего как осуществляется поиск комманд в потоке принимаемых символов (выделение слов длиной 2 и более символа)? Какие стандартные библиотеки можно использовать? Сейчас реализована входная FIFO-UART которая заполняется в прерываниях и функция считывания символа из FIFO которая возвращает -1 если нет данных или принятый символ. Одиночные символы отлавливать легко (считал - обработал), два - уже сложнее но пока реализую устанавливая флаги. Как отловить три и более символа - вот тут нужны идеи
|
|
|
|
|
 |
Ответов
|
Aug 12 2009, 17:21
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Goodefine @ Aug 12 2009, 18:50)  В качестве контрпримера можно рассмотреть поведение управляемого объекта, с односимвольным набором команд, на вход которого постоянно что-то приходит. Без ошибок. При прочих равных, разумеется... И что, как контрпример себя ведет? Использую односимвольные наборы команд в обе стороны. Никаких проблем. Очень удобно - в одну сторону идут коды нажатых клавиш, а в другую - коды символов, подлежащих отображению. Полный дуплекс, физический и логический. Если русский язык не нужен, коды управления дисплеем помещаются в правую сторону ASCII без проблем. Тут главное - не пытаться придумывать что-то посредине между "простым" протоколом и "нормальным" протоколом, в результате получится зависающая хрень.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Aug 12 2009, 17:49
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Dog Pawlowa @ Aug 12 2009, 23:21)  Очень удобно - в одну сторону идут коды нажатых клавиш, а в другую - коды символов, подлежащих отображению. Полный дуплекс, физический и логический. Но это вроде немного не то, что хотел топикстартер? Я лично применяю более-менее полноценную консоль, типа такого: CODE // обработчик команды. typedef int (* CmdHandler)(char * args);
// структура с информацией о команде typedef struct { char * command_name; // имя CmdHandler handler; // обработчик } Command;
const Command CommandTable[] = { {"GET", GetCommandHandler}, {"SET", SetCommandHandler}, {"TERM", TermHandler}, ... };
int parse_command_line(char * buf) { char *lt; char *token; int i;
token = GetToken(buf, <); if (!token) return FALSE;
for (i=0; i<sizeof(CommandTable) / sizeof(CommandTable[0]); i++) if (!strcmp(CommandTable[i].command_name, token)) { if (!CommandTable[i].handler) return FALSE; return CommandTable[i].handler(lt); }
return FALSE; }
void interpreter(void) { char buf[81]; for (;;) { rs_puts("\r\n=>"); rs_gets(buf, 80); if (!parse_command_line(buf)) rs_puts("ERR"); } } Гораздо приятнее писать "SET PARAM1=23.4", чем "sA34", имея заодно возможность отредактировать строку при неверном вводе. Да и не накладно это особо.
Причина редактирования: Уменьшение видимого размера цитаты исходника.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 12 2009, 19:06
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Dog Pawlowa @ Aug 13 2009, 00:27)  Если уж пошла речь о том, что приятнее, то я пришел к выводу, что лучше ПиСишное приложение, одно на все устройства, а из устройства может быть прочитано, какой физический смысл имеет PARAM1. Типа SNMP. Согласен, так тоже неплохо. Но есть, как мне кажется, пара аргументов против. Первый - универсальность. Линукс/виндовз/что-то там ещё, разные версии... Ну и можно банально забыть писишную программу  Терминалка же есть везде. И второй аргумент - в терминале можно не только конфигурировать устройство (SET/GET), но и выполнять что-то специфическое. Например, непрерывный вывод значения АЦП до нажатия любой кнопки, дрыгание заданной ножкой с заданной частотой. Интерактив, короче. Для таких применений сложно придумать универсальную программу для ПиСи, имхо.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
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    _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 C.S. 2_Pasha Кхм, я путаюсь уровнем ниже. Как принимаем... Aug 25 2009, 12:25 _Pasha Цитата(C.S. @ Aug 25 2009, 15:25) Первый ... Aug 25 2009, 12:58 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|