咱们在做菜单程序或经过函数指针调用函数时,假如被调用的函数中有包含了常量字符串,那么常常会呈现这样的的过错提示:”RECURSIVE
#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文件,便利办理又能够防止这种过错提示.