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

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),就溢出了,这种现象是什么原因呢?麻烦各位指教,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
mynameis
1楼-- · 2020-02-02 15:47
感觉楼主搞得有点复杂了,可以考虑用函数指针数组来简化模型。
hpdell
2楼-- · 2020-02-02 20:18
太复杂,看不懂!!!!!我也在找菜单函数,但是有很多都看不懂,特别是里面的那些数值,不知道是根据什么来计算的,要是有个比较详细的例程就好了!!!!!!!!!!!!!
xsky
3楼-- · 2020-02-03 00:32
 精彩回答 2  元偷偷看……
xsky
4楼-- · 2020-02-03 02:49
回复【7楼】mynameis
-----------------------------------------------------------------------

其实这个应该就算是比较简单的了,KbdTabStruct volatile const code KeyTab …… 就是已经初始化了菜单关系及函数指针。
C.Ronaldo
5楼-- · 2020-02-03 03:39
静下心看1 2天就不觉得难了!
haydon123
6楼-- · 2020-02-03 04:51
m

一周热门 更多>