Keil “RECURSIVE CALL TO SEGMENT“彻底解决
我们在做菜单程序或通过函数指针调用函数时,如果被调用的函数中有包含
了常量字符串,那么经常会出现这样的的错误提示:”
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])();}