Примерно так:
// Структура таблицы ключевых слов
struct token
{
const char __flash *str;
void (*fun)(void);
};
// Таблица ключевых слов и их обработчиков
__root __flash const struct token token_table[] =
{CR_LF,fun_VOID,
OK, fun_OK,
..............................................................
}
void fun_VOID(void)
{
asm("nop"); // Лекарство от зависания

!!!
return;
}
/* Обработчик "OK" */
void fun_OK(void)
{
if(error_cnt)
error_cnt --;
(*fun_OK_addr)(); // Запуск обработчика по указателю
asm("nop"); // Лекарство от зависания

!!!
return;
}
..........................................
// а вот так вызывается в коде из таблицы....
void (*p)(void);
Response--;
p = token_table[Response].fun;
(*p)();
// token_table[Response].fun(); - тоже самое, но так вроде стабильнее ;(
.............................................
К сожалению с кодом проблемы - надо перекомпилировать и много кода сюда писать....