您的位置 首页 数字

Keil 中的报警过错:WARNING L15: MULTIPLE CAL

Keil中的报警错误:WARNINGL15:MULTIPLECALLTOSEGMENT(转)原文地址http:yapinghappyblog163comblogstatic9346904120

Keil 中的报警过错:WARNING L15: MULTIPLE CALL TO SEGMENT(转)

原文地址http://yapinghappy.blog.163.com/blog/static/93469041201041712956298/

今日调试时遇到了这个问题,曾经都不留意这些正告过错,现在看来争夺要做到:0过错,0正告。

中止中和中止外都调用了同一个串口打印函数,一向有上述的报警,没介意,今日调试时发现串口打印出了一些杂乱无章的东东,且程序也不知道跑哪里去了,很抑郁。最终查到是上述这个问题导致的,现在解决办法为选用第二种办法,第一种办法听说要耗许多存储空间,今后渐渐领会。
说说几个小问题吧,一般咱们在用KEIL的时分,只需编译器报

– 0 Error(s) 一般咱们都不去管多少个 Warning(s).了,一般这样程序根本都能运转,可是其实细心想想,这儿仍是有问题的,不然编译器没事吃饱了撑得,报什么正告啊~~~

今日来说说*** WARNING L15: MULTIPLE CALL TO SEGMENT这个问题!

其实这个问题应该是引起留意的,有或许引起程序抵触,可是一般时分程序运转不会有问题,可是假如出来问题,那将会是很厌烦的问题.

剖析一下 发生这一正告的一个本源是:例如在主循环里调用了一个函数,而在中止服务中,你又一次调用了相同的函数。这样当主循环运转到该函数中时, 一旦发生中止,则在中止里又再次调用该函数!而使得该子函数发生了重入,这时,经管概率很低,可是很或许犯错!这样,编译器就给出了正告!告知你*** WARNING L15: MULTIPLE CALL TO SEGMENT ,表达的意思是发生了重入!字面意思自己了解去吧~~~

想要防止这种状况的办法

一.用reentrant使函数重入

关于reentrant的阐明:

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

2,重入函数树立的是模仿仓库区,所以不运用一般函数坐落存储形式默许空间的可掩盖式仓库,而是在同一空间从顶端另行分配一个非掩盖式的重入仓库。

small 默许空间是 data;

compact 默许空间是 pdata;

largr 默许空间是 xdata;

3,因为要保存参数和局部变量,所以会耗费很大的栈空间;尽量少用这种形式;

4、 在同一程序中能够界说和运用不同存储器形式的重入函数,恣意形式的重入函数不能调用不同存储器形式的重入函数,但能够调用一般函数。
5、 实践参数能够传递给直接调用的重入函数。无重入特点的直接调用函数不能包括调用参数。

二.假如空间多的话,能够界说两个同功用的函数,分别在中止和中止外调用

其他办法没研究出来,嘿嘿~~~对了 我主张用第二种办法好点,第一种有些约束,不爽~~

WARNING L15: MULTIPLE CALL TO SEGMENT

这个问题有必要留意,或许引起程序抵触,假定你用于自动化范畴,则或许导致信号发生尖峰。 发生这一正告的一个本源是:你在主循环里调用了一个函数(如aaa),而在中止服务函数里,你用调用了这个函数(如aaa)。这样当主循环运转到该函数中 是,一旦发生中止,则在中止里又再次调用该函数!这时,很或许犯错! 防止这种状况的办法许多:如,在进中止的时分置需调用该函数的标志,而在主循环中调用该函数

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/258161.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部