bash-подобная оболочка на МК

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

bash-подобная оболочка на МК

Сообщение Eddy_Em »

В очередной раз велосипедя командный интерфейс для МК задумался: ну ведь жутко неудобно, когда команды приходится 100500 раз подряд одни и те же вводить, лишь немного параметрами отличающиеся! А иногда тупо нужно N раз команду одну и ту же повторить.
Я и так уже в одной штуке (есть и более приличная версия, но пока она закрыта, открою летом), замучавшись с "очепятками", добавил обработку backspace в интерфейсе USB.
Сильно сомневаюсь, что подобных вещей никто не делал.

Вот и возник вопрос: а вдруг где-то у кого-то на просторах гитхаба уже есть простая реализация башеподобной оболочки? Нужно совсем немного: небольшая история (команд эдак на 64) с возможностью перемещаться по ней стрелками курсора и ctrl+r, автодополнение команд по TAB и обработка прочих спецсимволов (в т.ч. ESC-символов).
Самому подобное писать крайне лень. Ведь у меня, как выразилась жена, "золотые руки из жопы". И оптимизировать эту штуку, чтобы она в килобайт-другой RAM влезла, я точно не смогу...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: bash-подобная оболочка на МК

Сообщение NStorm »

Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: bash-подобная оболочка на МК

Сообщение Eddy_Em »

Не совсем то.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: bash-подобная оболочка на МК

Сообщение NStorm »

Ну это "перебирание харчами". Взять и адаптировать для себя тогда. Альтернатив особо не вижу, кроме упомянутого там здоровенного finsh.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: bash-подобная оболочка на МК

Сообщение Eddy_Em »

Адаптировать там нечего особо. Такая "адаптация" превратится по сути в написание своего с нуля.
А хочется готовое.

Кстати, еще одна штука меня интересует: уж очень долго использовать самопальную strcmp для того, чтобы пробегаться по списку строковых команд. Если их под сотню, это приличных тормозов добавляет! Хотелось бы обычный case для этого случая использовать. Понятно, что для этого ничего невозможно сделать, кроме кодогенерации, когда из шаблона будет воспроизводиться case-дерево + туда же будет генерироваться функция вычисления хэша.
Но тут возникает проблема: как придумать надежную хэширующую функцию, чтобы из списка N команд длиной до 10-15 символов получать однозначный хэш?
Единственное, что приходит в голову: придумать несколько разных хэширующих функций, и при кодогенерации выбирать подходящую. Или, скажем, добавлять в хэш-функцию параметр-константу, которая выбирается на стадии кодогенерации...

Нет ли на примете таких "подстраиваемых" под ситуацию хэш-функций?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
AndyGU70
Прорезались зубы
Сообщения: 231
Зарегистрирован: Ср апр 17, 2019 01:53:29

Re: bash-подобная оболочка на МК

Сообщение AndyGU70 »

Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: bash-подобная оболочка на МК

Сообщение Eddy_Em »

AndyGU70, а это-то говнище зачем? Фу...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: bash-подобная оболочка на МК

Сообщение dosikus »

Эдя, ищи Microrl - micro readline...

На, лови https://habr.com/ru/post/127890/
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: bash-подобная оболочка на МК

Сообщение Eddy_Em »

dosikus, интересно. Почитаю, спасибо.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: bash-подобная оболочка на МК

Сообщение pokk »

Наверное не совсем по теме, но разве с CASE удобнее ? Я вот это запускал на stm а строка прилетела по ethernet udp
плюс добавил туда x макрос для совмещение команды и функции которую надо запускать и все обработчики вынес в отдельный файл.

Код: Выделить всё

//            ID         Имя команды      Функция обработчик
#define ItemDebugCmd\
      ENTRY(Function1,   "\n",          Null_handler            )\
      ENTRY(Function2,   "help",         print_help               )\
      ENTRY(Function3,   "GetSoftWare",   GetSoftWare_handler       )\
      ENTRY(Function4,   "GetTest",      GetTest_handler            )\
      ENTRY(Function5,   "dampsocket",   DampSocket_handler        )\
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: bash-подобная оболочка на МК

Сообщение Eddy_Em »

pokk, можно подумать, там "под капотом" не switch или нагромождение if/else if…
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: bash-подобная оболочка на МК

Сообщение pokk »

Нашел такое, возможно сап дописал. sys_func_names и sys_func это массив функции, 2 и 3 столбик в приведенный ранее примере.

Код: Выделить всё

//==========================
/*
    * @Описание:    Описание функции.
    * @Параметр:   
    * @Возврат:     Нету
*/
uint16_t cmd_exec_tread(uint8_t *cmdline,uint8_t *out,uint8_t s){
uint8_t i;
uint16_t len=0;
    //----------
    split_args(cmdline);
    i=0;
    //----------
    while(strcmp((char*)cmdline,(char*)sys_func_names[i]) != 0){
        i++;
        if (i>=FUNC_NUM){
            strcpy((char*)out,(char*)msg_cmd_err);
            strcat((char*)out,(char*)"\nStm32Root@:");
            return strlen((char*)msg_cmd_err);
        }
    }
    //----------
    len=(sys_func[i])(s,arg_ptr,args_num,out);
    strcat((char*)out,(char*)"Stm32Root@:");
    len++;
    return len;
}
Ответить

Вернуться в «Разные вопросы по МК»