QP实现之函数指针数组无法获取正确地址的问题

来源:互联网 发布:mac介质推出键 编辑:程序博客网 时间:2024/06/06 06:46

在QHsm_init()函数中有一个函数指针数组,用于保存从顶层QHsm_top进入目标状态的路径。声明如下:

QStateHandler path[QEP_MAX_NEST_DEPTH_];

 

在遍历完之后,需要从第一层开始依次执行ENTRY动作:

        Q_SIG(me) = (QSignal)Q_ENTRY_SIG;
        do {        /* retrace the entry path in reverse (correct) order... */       
            (void)(*path[ip])(me);                        /* enter path[ip] */       
        } while ((--ip) >= (int8_t)0);

 

但是在执行到(void)(*path[ip])(me);的时候,每次都跳到0x0f之内的空间执行,导致程序出错,有时获得的地址甚至是0xFFFF,到了地址空间的最底部,PC加一后变为0x0,执行出现了问题。但是查看path数组内的数据也是正确的,除了没有赋值的成员为0xFFFF外,ip也是对的,分析了很多次都没有结果。

    后来怀疑是没有初始化的问题,将path数组声明为static后,执行正常,此时数组成员都被初始化为0,能正确获取函数指针。

原创粉丝点击