原创 51单片机编程之WARNING L15: MULTIPLE CALL TO SEGMENT

2011-2-25 13:26 5636 9 12 分类: MCU/ 嵌入式

转载自QQ空间:

*** WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?WR_595?主控_?    C    CALLER2: ?C_C51STARTUP
ALLER1: ?PR?FINT0?主控_?

- 0 Error(s) 一般我们都不去管多少个 Warning(s).了,一般这样程序基本都能运行,但是其实仔细想想,这里还是有问题的,否则编译器没事吃饱了撑得,报什么警告啊~~~

其实这个问题应该是引起注意的,有可能引起程序冲突,但是一般时候程序运行不会有问题,但是如果出来问题,那将会是很讨厌的问题.

分析一下 产生这一警告的一个根源是:例如在主循环里调用了一个函数,而在中断服务中,你又一次调用了同样的函数。这样当主循环运行到该函数中时, 一旦产生中断,则在中断里又再次调用该函数!而使得该子函数发生了重入,这时,经管概率很低,但是很可能出错!这样,编译器就给出了警告!*** WARNING L15: MULTIPLE CALL TO SEGMENT ,表达的意思是发生了重入!其二:局部变量和变量(暂且这样翻译,arguments,[自变量,变元一数值,用于确定程序或子程序的值])的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的内存区就会被使用,这将导致其他函数的内存冲突。

想要避免这种情况的方法

一.用reentrant使函数重入例如:
 void myfunc(void) reentrant {
  ...
 }

关于reentrant的说明:

1,重入函数不能传递bit类型的参数和变量;

2,重入函数建立的是模拟堆栈区,所以不使用一般函数位于存储模式默认空间的可覆盖式堆栈,而是在同一空间从顶端另行分配一个非覆盖式的重入堆栈。

     small 默认空间是 data;

     compact 默认空间是 pdata;

     largr 默认空间是 xdata;

3,由于要保存参数和局部变量,所以会消耗很大的栈空间;尽量少用这种模式;

4、    在同一程序中可以定义和使用不同存储器模式的重入函数,任意模式的重入函数不能调用不同存储器模式的重入函数,但可以调用普通函数。
5、    实际参数可以传递给间接调用的重入函数。无重入属性的间接调用函数不能包含调用参数。

二.如果空间多的话,可以定义两个同功能的函数,分别在中断和中断外调用

三.主程序调用该函数时禁止中断,可以在该函数被调用时用#pragma disable语句来实现禁止中断的目的。必须使用OVERLAY指令将该函数从覆盖分析中除去。
四.复制两份该函数的代码,一份到主程序中,另一份复制到中断服务程序中。


文章评论3条评论)

登录后参与讨论

用户1499739 2015-9-5 08:34

谢谢楼主,学习啦

用户1489016 2013-5-21 10:46

不错,马上来验证一下

用户417546 2012-3-30 16:17

没人评价?我来评价一下吧。等用完再评价

zenghao616_997442595 2011-8-15 00:03

不过谢谢这位仁兄,以后我会注意把源链接 贴到我转帖的博客里面的!

zenghao616_997442595 2011-8-15 00:02

“转自QQ空间”,我开始就说了,而且我的 来源 写的也是转帖,不是原创。 这是我在QQ空间里面发现的,由于百度和腾讯的原因,用百度很难找到QQ空间里面的内容,所以我转帖过来了,给大家好的分享,这不算抄袭吧。

用户367653 2011-8-8 15:53

涉嫌抄袭,原文网址:http://yapinghappy.blog.163.com/blog/static/93469041201041712956298/
相关推荐阅读
zenghao616_997442595 2012-02-01 14:44
超声波测距资料+程序
这里整理了超声波测距的资料和对应的源代码 附件是我的超声波模块的资料 资料.rar 编译器 ICC AVR 下面是源代码: #include #include #inc...
zenghao616_997442595 2012-01-12 18:42
电力系统潮流计算的计算机算法
电力系统潮流计算的计算机算法: 由于本人参加我们电气学院的电气小课堂,主讲的是计算机算法计算潮流这章,所以潜心玩了一个星期,下面整理给大家分享下。 本人一个星期以来的汗水,弄清楚了计算...
zenghao616_997442595 2011-09-15 18:56
05年电赛悬挂系统资料+控制
悬挂系统源代码.rar 走直线和走圆算法.rar     电赛培训的暑假 附件里面是画圆和画直线的算法 我自己做了05年电赛自动控制类型的题目  悬挂系统  画圆的那道题目 编译器 ICC AVR  ...
zenghao616_997442595 2011-09-15 18:44
TCS32OOD颜色传感器资料+程序
我用的是TCS32OOD型号的颜色传感器  附件里面有相关的资料附件里面还有 RGB对照表  附件里面还有我的颜色传感器的PCB和原理图 颜色传感器PCB.rar 资料.rar 编译器 ICC AVR...
zenghao616_997442595 2011-09-15 18:41
SCA100T角度传感器程序+资料
11年电赛我用的是 sca100t  型号的角度传感器 附件里面是资料和我的工程源文件 angle_sca.rar 读取角度传感器的数据需要进行转换才能得到相应的角度值 转换的公式在官方资料里面有 不...
zenghao616_997442595 2011-09-15 18:37
SPI协议AVR单片机双机通讯
相关寄存器说明以及资料请查阅官方资料文档 编译器 ICC AVRSPI双机通讯源文件 下面是从机接收主文件: #include<iom128v.h>#include<macros.h...
我要评论
3
9
关闭 站长推荐上一条 /2 下一条