晕。。。我哪里有递归。。。

2020-01-19 19:37发布

最近在改一些以前的代码,为了提高可读性和易用性,加了点东西,KEIL的linker就告状说我递归了,我愣是没看明白,大伙儿帮我瞧瞧
warning是:
linking...
*** WARNING L13: RECURSIVE CALL TO FUNCTION
    CALLED:  ?CO?MMC_SD
    CALLER:  _GETRESPONSEERR/MMC_SD

下面是新加的内容,只是个结构,还没写完呢

code u8 response_type_list[] =
{
0       
};

typedef u8 R1;

typedef union
{
        R1        r1;
}response;

typedef  void (*PTRGetResponse)(response* );

void GetResponseErr(response* p_res);
void GetResponseR1(response* p_res);
void GetResponseR2(response* p_res);
void GetResponseR3(response* p_res);
void GetResponseR4(response* p_res);
void GetResponseR5(response* p_res);
void GetResponseR6(response* p_res);
void GetResponseR7(response* p_res);

code const PTRGetResponse PTRGetResponseList[] =
{
        &GetResponseErr,
        &GetResponseR1,
        &GetResponseR2,
        &GetResponseR3,
        &GetResponseR4,
        &GetResponseR5,
        &GetResponseR6,
        &GetResponseR7
};

//说明:
//        对于没有的命令和 reserved 的命令的响应
void GetResponseErr(response* p_res)
{
        p_res = NULL;
        DB_SendString(" Error! Undefined CMD! ");
}

void GetResponseR1(response* p_res)
{
}

void GetResponseR2(response* p_res)
{
}

void GetResponseR3(response* p_res)
{
}

void GetResponseR4(response* p_res)
{
       
}

void GetResponseR5(response* p_res)
{
       
}

void GetResponseR6(response* p_res)
{
}

void GetResponseR7(response* p_res)
{
       
}

这些代码是新添加的内容,删掉后正常
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
27条回答
Pony279
1楼-- · 2020-01-21 10:41
回复【11楼】usingavr
-----------------------------------------------------------------------

命令行我也不会

玩这个耗时间啊。。。
aureole
2楼-- · 2020-01-21 11:05
 精彩回答 2  元偷偷看……
downtoearth
3楼-- · 2020-01-21 15:18
楼上说得很对,就是这样!
Pony279
4楼-- · 2020-01-21 20:56
回复【14楼】aureole XiaomaGee
好像是 keil 51 要用函数指针就会这样;解决办法是人工删除、添加 overlay
-----------------------------------------------------------------------

我的在8楼发的代码里有一个简单的协同式多任务内核模块,
也用到了函数指针,
不过以前测试的时候没有出现这样的警告。。。
hitler
5楼-- · 2020-01-21 22:29
C51是静态分配局部变量的,与标准C语言不一样。
中断函数和非中断函数不能同时调用同一个函数,否则编译器会告诉你这个是递归。
Pony279
6楼-- · 2020-01-22 03:01
回复【17楼】hitler
c51是静态分配局部变量的,与标准c语言不一样。
中断函数和非中断函数不能同时调用同一个函数,否则编译器会告诉你这个是递归。
-----------------------------------------------------------------------

谢谢你的回复
首先,我现在的代码没有使用中断
第二,就算我是“中断函数和非中断函数同时调用同一个函数”,那么warning应该是munti call to ... 而不是 RECURSIVE CALL TO FUNCTION

一周热门 更多>