В некоторых случаях количество команд, принимаемых микроконтроллером, начинает просто зашкаливать! И тут рождается уродство вроде этого:
— огромная цепочка самопальных strcmp, которая даже при сотне команд уже прилично тормозит!
Понятно, что не существует универсальной функции, которая позволила бы из любого набора строковых команд получить однозначный хэш в uint32_t, чтобы свести это к красивому switch().
Следовательно, в кодогенераторе необходимо предусмотреть какой-то параметр, который будет перебираться до тех пор, пока данному набору строк не найдется однозначно соответствующего набора хэшей!
Вопрос: какую несложную хэш-функцию в данном случае можно использовать?
Ну и второй вопрос: а нет ли в природе эдакого "упрощенного bash" для микроконтроллеров? Чтобы имел память на ~128 команд длиной до ~64 байта, навигацию по истории стрелочками управления курсором, поиск стандартным ctrl+r, автодополнение по TAB?
else if(CMP(cmd, CMD_PRINTTIME) == 0) ... else if(CMP(cmd, CMD_DISTMIN) == 0) ...
— огромная цепочка самопальных strcmp, которая даже при сотне команд уже прилично тормозит!
Понятно, что не существует универсальной функции, которая позволила бы из любого набора строковых команд получить однозначный хэш в uint32_t, чтобы свести это к красивому switch().
Следовательно, в кодогенераторе необходимо предусмотреть какой-то параметр, который будет перебираться до тех пор, пока данному набору строк не найдется однозначно соответствующего набора хэшей!
Вопрос: какую несложную хэш-функцию в данном случае можно использовать?
Ну и второй вопрос: а нет ли в природе эдакого "упрощенного bash" для микроконтроллеров? Чтобы имел память на ~128 команд длиной до ~64 байта, навигацию по истории стрелочками управления курсором, поиск стандартным ctrl+r, автодополнение по TAB?