找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2832|回复: 10
打印 上一主题 下一主题
收起左侧

keil提示 ** FATAL ERROR L232: APPLICATION CONTAINS TOO MANY RECURSIONS

[复制链接]
跳转到指定楼层
楼主

keil提示这个错误,是我函数递归调用太多了吗,还是警告过多,要怎么解决?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:743654 发表于 2020-12-10 15:58 | 只看该作者
刚去掉一个函数调用,编译通过。那是我调用太多函数了,导致内存崩溃吗?我程序没写多少啊,不过有很多按键的循环嵌套,要优化程序吗,有没其他办法可以解决?
回复

使用道具 举报

板凳
ID:743654 发表于 2020-12-10 16:01 | 只看该作者
其中的部分代码:

while(1)
       
        {   
           Key_scan();
           if (KeyState)
                {
                 KeyState=0;
                 if(KEY==KEY_MEAS)
                   {Disp_meas();}
                 
                 if(KEY==KEY_CAL)
                   {Disp_cal();}
            
                 if(KEY==KEY_MENU)
             {
                 Disp_menu();                                     
                  Menu_set();
                 }       
             if(KEY==KEY_DEBUG)
                  {
                  Disp_Probe_Debug_01();
                  Probe_Debug_1();
                  }       
                }  
     }   
void Menu_set()
{

  Uint menu_flag;
  menu_flag=0;
  menu_flag++;
  while(menu_flag==1)
       
   {  
         Key_scan();
         if(KeyState)
          {
                 KeyState=0;
           if(KEY==KEY_OK){Disp_Menu_1();}
           if(KEY==KEY_DOWN){Disp_menu_02();Set_menu_02();}
           if(KEY==KEY_UP){Disp_menu_06();Set_menu_06();}  
           menu_flag=0;

      }
                
        }          

}          
回复

使用道具 举报

地板
ID:57657 发表于 2020-12-10 17:20 | 只看该作者
其他函数要放到main函数上面,否则编译器就找不到函数。
回复

使用道具 举报

5#
ID:739545 发表于 2020-12-10 17:48 | 只看该作者
cheney03 发表于 2020-12-10 16:01
其中的部分代码:

while(1)

在keil中药把函数放到前面,或者在上面定义行数名,比如加void Menu_set();就可以了。在其他的编译器中可能不需要这种方式,和编译器有关
回复

使用道具 举报

6#
ID:743654 发表于 2020-12-10 19:33 | 只看该作者
npn 发表于 2020-12-10 17:20
其他函数要放到main函数上面,否则编译器就找不到函数。

我只是举个我调用函数的例子,程序开头函数我都有声明
回复

使用道具 举报

7#
ID:743654 发表于 2020-12-10 19:34 | 只看该作者
lovezjf234 发表于 2020-12-10 17:48
在keil中药把函数放到前面,或者在上面定义行数名,比如加void Menu_set();就可以了。在其他的编译器中 ...

程序开头函数都有声明,问题不在这
回复

使用道具 举报

8#
ID:822755 发表于 2020-12-10 21:05 | 只看该作者
如果中断中和主程序循环中都调用一个函数,或者递归调用的函数。需要修饰这个函数为递归函数。
回复

使用道具 举报

9#
ID:739545 发表于 2020-12-11 16:24 | 只看该作者
还有就是被调用函数里面包含太多调用函数,你屏蔽下if()里面的几个函数试试,
回复

使用道具 举报

10#
ID:764418 发表于 2020-12-11 19:59 来自手机 | 只看该作者
在其他的编译器中可能不需要这种方式,和编译器有关
回复

使用道具 举报

11#
ID:764088 发表于 2020-12-14 08:53 | 只看该作者
Too many recursion 就是太多递归调用,函数中又套原函数,最可疑!另外,main的 while环中调KEY_scan,
Menu_set() 的 while环中也调KEY_scan,让人感觉您的代码是乱的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表