终于解决 归递调用 警告,其实程序没有 归递调用*** WARNING L13: RECURSIVE CALL TO SEGMENT
## 终于解决 归递调用 警告,其实程序没有 归递调用*** WARNING L13: RECURSIVE CALL TO SEGMENT> 引用块内容> http://blog.csdn.net/avideointerfaces/article/details/32687899> 以下是转载上面链接内容> 最近编译keil项目时,遇到一个比较奇怪的link warning,如下所示。根据这个warning,容易知道这两个函数存在递归(相互)调用关系。其实在源代码中不存在直接递归调用关系,而是间接地调用,从map文件摘出这个calltree如下+--> _CBUSMSCREADECBUSSPEEDSDONE/SI_DRVCBUSRX| | _CBUSMSCREADTMDSSPEEDSDONE/SI_DRVCBUSRX| | _CBUSMSCREADECBUSDEVROLESDONE/SI_DRVCBUSRX| | _CBUSMSCREADLOGDEVMAPDONE/SI_DRVCBUSRX| | _CBUSMSCREADBANDWIDTHDONE/SI_DRVCBUSRX| | _CBUSMSCREADFEATUREFLAGDONE/SI_DRVCBUSRX| | _CBUSMSCREADDEVICEIDHDONE/SI_DRVCBUSRX| | _CBUSMSCREADDEVICEIDLDONE/SI_DRVCBUSRX| | _CBUSMSCREADSCRATCHPADSIZEDONE/SI_DRVCBUSRX<--+ _CBUSMSCREADINTSTATSIZEDONE/SI_DRVCBUSRX简单梳理一下上面的调用树,就是CBUSMSCREADECBUSSPEEDSDONE调用了CBUSMSCREADTMDSSPEEDSDONE, CBUSMSCREADECBUSDEVROLESDONE调用了CBUSMSCREADECBUSDEVROLESDONE。。。 。。。最后CBUSMSCREADINTSTATSIZEDONE又调用了CBUSMSCREADECBUSSPEEDSDONE。众所周知,Keil51由于内存资源比较紧张,函数的参数及局部变量一般地放在data segment, 为了避免一个函数的变量被另外一个函数的变量覆盖,keil会分析函数之间的相互调用关系,对于没有相互调用的关系的函数变量就可以重叠在一起,即overlay。 对于存在调用关系的函数,则变量存放在data区间的不同地址。但是,递归调用是一种例外,由于是同一个函数,所以变量都会重叠在一起,这样会造成变量还没用完就被覆盖了。 基于此,原则上,keil51是不允许递归调用的。关键点:如何解决这类问题?1)如果是直接递归调用, 如下所示void B(void){... ... B().. ....}就将B函数申明为void B(void) reentrant, 这样就会生成模拟栈来储存自动变量和参数,以避免变量被覆盖。2)如果是间接递归调用,如我的项目遇到的case,怎么办?在option->LX51 Misc->Misc controls中,有一个Overlay的空白框,这个是干什么用的呢? 查阅LX51 user guide,知道Overlay是link的一个指示符,我们可以利用它来手动修改或标明call tree关系。比方说,A通过函数指针调用B,为安全起见,可以增加一条OVERLAY(A!(B)) 又比如A和B其实不存在调用关系,如我的项目中遇到的case,这种情况下,只需要增加OVERLAY(A~(B))其实LX51指示符除了Overlay外还有很多,如removeunused, disablewarning等。如不把它们弄清楚 就很容易造成项目的各种不稳定性。
以上是转载
根据上面的 方法,自已怎么搞也搞不好, OVERLAY 的格试 不会写
能过自已慢慢摸索
终于 搞字,
先打开 .M51文件
有如下内容:
PROGRAM RECURSIONS REMOVED FROM CALL TREE
=========================================
+--> ?CO?MENU
<--+ ?PR?DSP_ZT_TCK?MENU
有人知道 ?co? 是什么意思 ,我程序里是个函数指针,
解决方法
其实上面的程序没有归递调用;
在在option->LX51 Misc->Misc controls中,有一个Overlay的空白框
写下如下内容 就可以
?PR?DSP_ZT_TCK?MENU ~ ?CO?MENU
多个用,分开.
终于解决 归递调用 警告,其实程序没有 归递调用*** WARNING L13: RECURSIVE CALL TO SEGMENT相关推荐
- Linux错误27,解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”...
centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件. 安装 ...
- JS中调用本地Winform程序并传递参数
场景 JS中调用本地exe程序: JS中调用本地exe程序_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面的基础上怎样在js中调用本地winform程序并且传递参数. 注: 博客: ...
- Robotium调用getActivity()导致程序挂起的方法
1. 问题背景的叙述性说明 需要直接用在工作中没有项目的源代码robotium测试目标android平台launcher,该平台的基础上,当前日期的版本号android 4.4.2.之前我用来验证的可 ...
- E5 调用API续订程序:Microsoft 365 E5 Renew
Microsoft 365 E5 Renew Microsoft365 E5 Renew 已于2021-04-30结束生命周期,请下载Microsoft365 E5 Renew Plus 继续使用!! ...
- 【方法】HTML网页调用本地Python程序
欢迎支持个人chatgpt:https://chat.immuseai.com/register?promotion-code=pRE9p9DXCOBz3Z1s.注册即可使用GPT3.5和4.0. 代 ...
- 终于不用为了调试一个ARX(.net)程序而反复重新启动AutoCAD了!!!
.net开发AutoCAD遇到的最大不方便之处就是调试程序的时候要不断的重新启动AutoCAD.而可用于.net开发的AutoCAD的版本都是非常新的,启动一次非常的慢,最新的AutoCAD2007启 ...
- air java_Air 调用本地化java程序
最近在写一个客户端,使用的air但是其中要访问数据库,众所周知,air除了那个sqlite之外,是不能访问任何数据库的,只能借助于其它语言与数据库进行交互,所以这就会牵扯到air调用本地化java程序 ...
- 成功解决win10下dos中运行tensorboard --logdir=logs和调用events.out.tfevents一闪而过的问题
成功解决win10下dos中运行tensorboard --logdir=logs和调用events.out.tfevents一闪而过的问题 目录 解决问题 解决思路 解决方法 解决问题 在dos中运 ...
- 熬了一个通宵,终于解决了所有的事情,下线,睡觉
熬了一个通宵,终于解决了所有的事情,下线,睡觉 现在时间2009年12月30日4:56:55. 完成移动邮件初步内容.打包上传,更新到SVN 完成网络工程分享网站(http://www.the520. ...
- oracle 找不到程序单元,Oracle Web ADI 加载时错误:ORA-06508: PL/SQL: 无法在调用之前找到程序单元...
Oracle EBS 的Web ADI给批量导入数据提供一个不错的解决方案.但是,Web ADI开发比较麻,主要缺点如: 1.集成器设置好以后不能修改,必须要事先考虑包的存储过程或函数的参数.则否,存 ...
最新文章
- .Net 2.0 中的发送邮件实现小解(轉)
- UI 积累之select section
- 使用JAVA建立稳定的多线程服务器
- c/c++ c++ file c++/stl/boost 判断文件目录是否存在
- 一个最简单的SAP UI5应用部署到SAP云平台CloudFoundry环境后,自动生成了哪些资源
- 第一次收到这么用心的感谢信
- Kotlin学习笔记 第二章 类与对象 第九节 泛型
- python程序加密_项目源代码被好朋友“盗用”!让我痛心疾首!给Python源码加密!...
- html 权限模块设置,角色权限设置.html
- 盘点2012中国承载网十大事件(转)
- webrtc项目编译报错(image not found)
- Atitit 集成之道 attilax著 1. 所谓系统集成(SI,System Integration),	1 2. 发展方向	1 2.1. 产品技术服务型	2 2.2. 系统咨询型	2 2.3.
- microsoft html help workshop_云话科技 | 奥比中光Workshop技术研讨线上沙龙
- python 3d游戏 源码_毕设3D游戏《天鹰教》源码
- PS各种实用的辅助工具
- 计算机四级(网络工程师)内容,计算机四级《网络工程师》考试内容
- opencv的core组件——像素,ROI,图像混合(3)
- 计算机教案在幻灯片中插入影片,2019小学信息技术教师资格证面试:试讲及答辩真题《在幻灯片中插入音频文件》...
- 数据库内外连接、自连接
- linux 管理部门打印,Linux打印机相关的命令-打印管理_Linux常用命令大全