#define u8 unsigned char
void (*KeyFuncPtr)(); //按键功能指针
typedef struct{
u8 KeyStateIndex; //当前状态索引号
u8 KeyEnterState; //按下"确认"键时转向的状态索引号
u8 KeyExitState; //按下"返回"键时转向的状态索引号
u8 KeyUpState; //按下"向上"键时转向的状态索引号
u8 KeyDownState; //按下"向下"键时转向的状态索引号
void (*CurrentOperate)(); //当前状态应该执行的功能操作
}KbdTabStruct;
KbdTabStruct volatile const code KeyTab[]={
// |-----------> Index
// | Enter
// | | Exit
// | | | Up
// | | | | Down --->功能函数
// | | | | | |
{ 0, 1, 2, 3, 4,(*DispMenuInit)}, // 图标层菜单:第一级菜单
{ 1, 0, 0, 0, 0,(*DispMenuEnter)},
{ 2, 0, 0, 0, 0,(*DispMenuExit)},
{ 3, 0, 0, 0, 0,(*DispMenuUp)},
{ 4, 0, 0, 0, 0,(*DispMenuDown)},
.......
........
{ 200, 201, 202, 203, 204,(*DispMenuInit)}, // :第四级菜单
{ 201, 0, 0, 0, 0, (*DispMenuEnter)},
{ 202, 0, 0, 0, 0,(*DispMenuExit)},
{ 203, 0, 0, 0, 0,(*DispMenuUp)},
{ 204, 0, 0, 0, 0,(*DispMenuDown)},
};
请问当 KeyStateIndex >= 100后编译后程序就跑飞了,好像堆栈溢出了,是不是当索引号大时,函数指针到不了指定的函数了,比如当 KeyStateIndex =200时,要执行对应的函数:void DispMenuInit(void),就溢出了,这种现象是什么原因呢?麻烦各位指教,谢谢!
-----------------------------------------------------------------------
其实这个应该就算是比较简单的了,KbdTabStruct volatile const code KeyTab …… 就是已经初始化了菜单关系及函数指针。
一周热门 更多>