#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文件,方便管理又可以避免这种错误提示.
上一篇:关于keil中data,idata,xdata,pdata,code的问题
下一篇:msp430F149单片机的flash读写程序
推荐阅读最新更新时间:2024-03-16 14:41
- 热门资源推荐
- 热门放大器推荐