У меня есть цикл foor в конечном автомате:
if (nextstate != state)
{
state = nextstate;
for (i=0; menu_state[i].state; i++)
{
if (menu_state[i].state == state)
{
statetext = menu_state[i].pText;
pStateFunc = menu_state[i].pFunc;
break;
}
}
}
Конечный автомат используется для отображения меню на ЖК-дисплее. (Я использовал пример, который я нашел в Интернете для конечного автомата, и адаптировал его для своей системы микроконтроллера).
Все работает нормально, система меню работает, но теперь я хотел бы добавить смежные текстовые строки в меню (чтобы было легче видеть, где вы находитесь в меню).
(исходное меню было для отображения 1 строки, а у меня отображение 5 строк).
Итак, мой вывод: мне нужно адаптировать это для цикла.
Вот что я придумал:
if (nextstate != state)
{
state = nextstate;
for (i=0,a=1,b=2,c=3,d=4; menu_statetop[i].state; i++,a++,b++,c++,d++)
{
if (menu_statetop[i].state == state)
{
statetext= menu_statetop[i].pText;
statetext2= menu_statetop[a].pText;
statetext3= menu_statetop[b].pText;
statetext4= menu_statetop[c].pText;
statetext5= menu_statetop[d].pText;
pStateFunc = menu_statetop[i].pFunc;
break;
}
}
}
Кажется, это работает более или менее ... но проблема в границе. Потому что в справочной таблице 5 строк.
и когда переменные становятся больше, чем это значение MAX (4), они выходят за пределы допустимого значения MAX для поиска и показывают мусор.
Я пытаюсь найти элегантное решение для этого. Есть идеи?
Я рассмотрел использование операторов if, но все выглядит так ... грязно ...
большой и комковатый код ...
Так что я пытаюсь достичь, например, когда «а» становится 4, оно должно стать 0. и в следующий раз при выполнении цикла for оно должно стать 1.
то же самое для b, c и d. и они должны поддерживать одинаковое «расстояние» друг от друга (когда b равно 2, c должно быть 3, d должно быть 4 и т. д.)
Та же идея, но противоположная для значения MIN (0).
У кого-нибудь есть идеи, как сделать что-то подобное хорошим способом?