请教多级菜单中的函数指针问题

2020-02-01 16:33发布

#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),就溢出了,这种现象是什么原因呢?麻烦各位指教,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。