您的位置 首页 测评

Keil “RECURSIVE CALL TO SEGMENT“彻底解决

我们在做菜单程序或通过函数指针调用函数时,如果被调用的函数中有包含了常量字符串,那么经常会出现这样的的错误提示:RECURSIVECALLTOSEGME

咱们在做菜单程序或经过函数指针调用函数时,假如被调用的函数中有包含了常量字符串,那么常常会呈现这样的的过错提示:”RECURSIVECALLTOSEGMENT“意思是”递归调用段”,怎么处理呢,之前我没有找到很好的办法,这段时刻我回过头来看keil的datasheet,找到了处理办法,当然keil手册供给的处理办法是编写一个.lin文件,我觉得费事,现供给我的处理办法,实例仍是用keil供给的那个实例:

#pragma code symbols debug oe void func1(unsigned char *msg ) { ; } void func2( void ) { unsigned char uc; func1("xxxxxxxxxxxxxxx"); } code void (*func_array[])() = { func2 }; void main( void ) { (*func_array[0])(); } 这样会提示:
*** WARNING 13: RECURSIVE CALL TO SEGMENT SEGMENT: ?CO?EXAMPLE1 CALLER: ?PR?FUNC2?EXAMPLE1 我的处理办法是:
把code void (*func_array[])() = { func2 };放在别的一个段,
即别的一个.c文件中也就不存在同一个段递归调用状况,如下:
keilrecur.c文件
#i nclude 
void func2( void );
extern code void (*func_array[])();
void func1(unsigned char *msg ) { msg=msg; }
void func2( void ) { unsigned char uc; uc=uc; func1("xxxxxxxxxxxxxxx");}
 
void main( void ) { (*func_array[0])();}
 
funcptr.c文件
#i nclude 
void func2( void );code void (*func_array[])() = { func2 };
这样就能够处理段递归问题.
咱们在做LCD菜单时,喜爱做一个KeyTab,这样也会呈现"递归调用段"状况,
那么咱们能够把KeyTab独自作为.c文件,便利办理又能够防止这种过错提示.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/260018.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部