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

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

|
Стоит задача разаработать устройство которое должно иметь возможность управляться через UART. Думаю встроить отладочную консоль чтобы можно было посылать в устройство комманды и получать ответы. Комманды в виде одиночных символов реализовал. Теперь хочу расширить функциональность консоли и реализовать длинные команды (наподобие АТ-комманд). Причём хочется сделать аппаратно-независимую консоль чтобы можно было переносить из проекта в проект меняя только низкоуровневые функции приёма/отправки символовов через UART. Подскажите кто как делает подобные консоли. Интересует прежде всего как осуществляется поиск комманд в потоке принимаемых символов (выделение слов длиной 2 и более символа)? Какие стандартные библиотеки можно использовать? Сейчас реализована входная FIFO-UART которая заполняется в прерываниях и функция считывания символа из FIFO которая возвращает -1 если нет данных или принятый символ. Одиночные символы отлавливать легко (считал - обработал), два - уже сложнее но пока реализую устанавливая флаги. Как отловить три и более символа - вот тут нужны идеи
|
|
|
|
|
 |
Ответов
|
Aug 13 2009, 05:02
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(zltigo @ Aug 12 2009, 14:24)  Код .... case 'sst ': ... case 'psst': .... case 'aa ': .... Команды - по первым четырем (для 32битника) символам. А все-таки, если у человека тупо буфер, нету манагера кучи для построения деревьев в ОЗУ - АВР средненький, короче, - так построить интерпретатор команд не получится! Цитата(AHTOXA @ Aug 12 2009, 22:06)  Ну и можно банально забыть писишную программу Интерактив, короче. Для таких применений сложно придумать универсальную программу для ПиСи, имхо. Ага, ОРС-серверы всякие не забывают, а тут-досада  Ничего сложного в универсальной программе - все действия реализуются через регистровую модель. В одном регистре - временной интервал выборки, в другом - адрес источника, в третьем - размер данных. К терминалке это уже не будет иметь отношение - это личное дело девайса - поддержит он данную функцию или нет. Цитата(Goodefine @ Aug 12 2009, 22:32)  Как тогда контроллер отреагирует на на сообщение "hello world" Это все бессмысленно без а) строгого разделения команд без аргументов, хотя бы пробелами. б) минимального синтаксического разбора команд с аргументами.
|
|
|
|
|
Aug 13 2009, 05:45
|

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

|
Цитата(_Pasha @ Aug 13 2009, 11:02)  Ничего сложного в универсальной программе - все действия реализуются через регистровую модель. В одном регистре - временной интервал выборки, в другом - адрес источника, в третьем - размер данных. К терминалке это уже не будет иметь отношение - это личное дело девайса - поддержит он данную функцию или нет. ОРС-серверы - это для устройств, постоянно находящихся на связи. Тут действительно, забыть проблематично  Если же терминал применяется изредка, то шансы возрастают. Цитата(_Pasha @ Aug 13 2009, 11:02)  Ничего сложного в универсальной программе - все действия реализуются через регистровую модель. В одном регистре - временной интервал выборки, в другом - адрес источника, в третьем - размер данных. К терминалке это уже не будет иметь отношение - это личное дело девайса - поддержит он данную функцию или нет. Как реализовать через регистровую модель мини-DOS для флеш-карточки, например?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 13 2009, 06:41
|

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

|
Цитата(AHTOXA @ Aug 13 2009, 09:17)  Насколько я понял, автор темы хочет консоль управления/отладки... Именно. Мне нужна консоль в устройстве чтобы посылая определённые команды из терминала можно было изменить настройки, перепрошить устройство, считать текущие параметры и т.д. Ничего сверхумного и сверхсложного не нужно. Может быть я даже неправильно назвал тему - скорее нужно было назвать "как отловить из потока симмволов команды длиной более 2х символов". Но пару идей в дискуссии по тому как это сделать (ну и как собственно организовать консоль и систему команд) я уже приметел  Все спасибо за дисскуссию. Надеюсь она не остановится и ещё прозвучит ещё много идей  По поводу длинных команд - буквы F, E, L не так информативны как WFLASH, EFLASH, WLOCK и т.п. Сразу видно что я хочу записать флэш, стереть её, записать лок-биты. Вобщем небольшое увеличение длины команды позволяет сразу переходить на необходимую подпрограмму обработки. Будет и самому интуитивно понятнее и система команд значительно расширяется.
Сообщение отредактировал mempfis_ - Aug 13 2009, 06:46
|
|
|
|
|
Aug 13 2009, 16:01
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(mempfis_ @ Aug 13 2009, 09:41)  "как отловить из потока симмволов команды длиной более 2х символов". Так в принципе, ничего нового не выдумано, насколько я понимаю. Всё тоже как и 30 лет назад. 1) если идёт сплошной поток, то префикс команды (Байтстафинг). Как вы уже отметили в модемах используется. Префикс AT (за малым исключением). То есть "hgjghjhati3" будет квалифицировано как команда "i3" - идентификация устройства. Префикс может быть любым, в том числе и односимвольным. Я обычно использую "Ъ".  Естественно префикс из простого потока данных изымается (заменяется на комбинацию), либо удваивается. Один из вариантов WAKE. 2) Применяется пауза (в том числе определённой длительности) перед началом команды. 3) Применяется комбинация 1 и 2. Есть ещё битстафинг (я применял), но он неподходит для UARTа.
|
|
|
|
Сообщений в этой теме
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 Цитата(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
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|