最近使用的单片机硬件资源及其匮乏,RAM只有512B,按键只有2个(其中一个还是将reset按键复用为NMI中断得到的)。在这种情况下,若是因为菜单而浪费大量RAM是非常心痛的。
设计了一个非常简易的通用链表菜单,用于在OLED屏上显示,具体示例如下。
typedef struct Menu
{
uint8_t Name[15];
void (*Function)();
const struct Menu* next;
const struct Menu* parent;
const struct Menu* child;
}MENU;
const MENU* nowP = &Menu[0];//指针nowP用于遍历菜单
const MENU Menu[8] =
{
{"Set location", *Menu_Enter, &Menu[5], NULL, &Menu[1]}, //0
{"Setx" , *Set_location, &Menu[2], &Menu[0], NULL}, //1
{"Sety" , *Set_location, &Menu[3], &Menu[0], NULL}, //2
{"Run" , *Run, &Menu[4], &Menu[0], NULL}, //3
{"<<<" , *Menu_Return, &Menu[1], &Menu[0], NULL}, //4
{"Circular", *CircularMotion, &Menu[6], NU