您的位置 首页 编程

***WARNING L15: MULTIPLE CALL TO SEGMENT错误信息的处理

***WARNINGL15:MULTIPLECALLTOSEGMENT今天来说说***WARNINGL15:MULTIPLECALLTOSEGMENT这个问题!其实这个问题应该是

***WARNING L15: MULTIPLE CALL TO SEGMENT

今日来说说*** 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、实践参数能够传递给直接调用的重入函数。无重入特点的直接调用函数不能包括调用参数。
二.假如空间多的话,能够界说两个同功用的函数,分别在中止和中止外调用
其他办法没研究出来,嘿嘿~~~对了 我主张用第二种办法好点,第一种有些约束,不爽~~

三.主程序调用该函数时制止中止。

能够在该函数被调用时用#pragma disable句子来完成制止中止的意图。有必要运用OVERLAY指令将该函数从掩盖剖析中除掉。

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

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部