您的位置:首页 > 其它

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

2010-03-11 13:48 429 查看
在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,能正确获取函数指针。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  path
相关文章推荐