当前位置:首页 > 单片机 > 单片机
[导读]此处的信息适用于:C51所有版本症状我添加了一个中断处理程序(ISR)到我的项目中,然而我却得到了如下的警告:***WARNING L15: MULTIPLE CALL TO SEGMENTSEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1CALLER1: ?PR?VSYNC


此处的信息适用于:

C51所有版本


症状

我添加了一个中断处理程序(ISR)到我的项目中,然而我却得到了如下的警告:

***WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1
CALLER1: ?PR?VSYNC_INTERRUPT?MAIN
CALLER2: ?C_C51STARTUP

***WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?_SPI_SEND_WORD?D_SPI
CALLER1: ?PR?VSYNC_INTERRUPT?MAIN
CALLER2: ?C_C51STARTUP

***WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI
CALLER1: ?PR?VSYNC_INTERRUPT?MAIN
CALLER2: ?C_C51STARTUP

上面这些都是什么?我该如何解决这个问题呢?

原因

Warning 15向我们表明了linker发现了一个函数,这个函数不仅在main code里被调用了,而且在ISR(或者被ISR调用的函数中)被调用了。或者是被同时被多个ISR同时调用了。

这样会产生一个问题,就是在此函数不是一个可重入函数,而当此函数已经在执行时它可能被另一个ISR所调用。这样就会导致结果是可变的而且很可能会导致一些参数的错误。

另一个问题就是本地变量和参数所使用的内存可能被其他函数的内存覆盖。如果函数是由中断所调用的,则此函数的内存就会被使用。这会引起其它函数的内存错误。

举例来说,对于你的第一个警告,WRITE_GMVLX1_REG是会被多个root所调用。其被定义在D_GMVLX1.C或者D_GMVLX1.A51中。他不仅会被ISR(或者被ISR调用的函数)而且也会被MAIN.C中的VSYNC_INTERRUPT函数所调用。

解决方法

有几种方法去解决这个问题


如果你100%确认这个函数的两个副本都不会同时执行(如果此函数是被main调用并且中断是未被使能的)并且此函数没有使用内存(只使用的寄存器),那么你就可以忽略此警告。


如果此函数使用了内存,你就要使用OVERLAY directive来将此函数从覆盖分析(overlay anaysis)中移除。举例如下:

OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *)

如上语句能阻止被此函数使用的内存遭到覆盖。如果这个函数调用了你程序中其他的在别处的函数,那么你可能需要将这些函数也排除在覆盖分析之外。


如果当此函数在执行时可以被调用,那么事情就会变得比较的复杂。你可能需要:

无论何时当从main中调用此函数时,需要关闭中断。你可能需要对被调用的函数使用#pragma disable。你也必须使用OVERLAY directive将此函数从overlay analysis中移除。

为此函数创建两个副本。一个给main,一个给ISR。

使此函数可重入。举例如下: void myfunc(void) reentrant {
...
}

上面的定义会产生一个用来存储参数和本地变量的可重入的栈。如果使用了这种方法那么这个可重入的栈必须在STARTUP.A51中配置。这样会花费更多的RAM并且会减缓可冲入函数的执行。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

并非所有功能都会在正式版发布时提供,包括 FaceTime 共享、专注模式、重新设计的 Safari 等等。据 wccftech 报道,这些功能尚未完全就绪,将在稍后版本的更新中提供。

关键字: 苹果 iOS iPadOS 15

今天下午,联想小新笔记本官微宣布新品:小新Air 15锐龙版,给出设计上的三大特色:大屏、轻薄、全金属。具体发布时间未定。 2020年已经过去了2/3,联想小新Pro 13 2020、小新Air 14

关键字: 联想 小新air 15 锐龙版

Linux存储管理模型非常简单,因为这种Linux机制使其具有可移植性,并且可以在具有类似存储管理单元的计算机上实现Linux。 让我们看看如何实现Linux内存管理。

关键字: data Linux segment 内存

AMD是当今唯一同时拥有高性能处理器、高性能显卡、高性能主板芯片组的厂商,这就是大名鼎鼎的3A平台,而来自同一家厂商的产品组合成一套平台,最大好处莫过于兼容性、稳定性、性能优化都可以发挥到极致。 3A

关键字: 15 5600m AMD g5 rx se 戴尔 游戏本 锐龙 smartshift

联想电脑一直是人们的关注焦点之一,因此在这篇文章中,小编将为大家带来昨日上新的联想ThinkBook 15的相关报道。如果你想了解它的详细内容,请继续阅读。

关键字: 15 thinkbook 联想

12月18日消息,荣耀官方宣布,荣耀MagicBook 14&15系列16GB超大内存版本将于12月22日发布。 荣耀MagicBook 14&15系列于11月26日发布,搭载AMD 锐龙7处理器,全

关键字: 14 15 magicbook 荣耀 16gb内存

近日,绿联最新推出了一套MFi认证的18W快充套装,包含一个18W的USB PD快充充电器和一条USB-C to Lightning线。 由于苹果一直没有开放充电器单独过MFi认证的通道,所以市面上的

关键字: lightning数据线 to ugreen绿联mfi认证usb-c

近日,荣耀发布了全新升级的笔记本电脑,包括荣耀MagicBook 14和荣耀MagicBook 15及对应型号的科技尝鲜版。 12月1日0点起,荣耀MagicBook 15及荣耀MagicBook 1

关键字: 15 今晚 荣耀magicbook 锐龙5 首销 3099元

大数据方兴未艾。大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换而言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的...

关键字: b to 区块链 大数据

智能家居是在互联网影响之下物联化的体现。现在是智能家居产业最好的时代,用户需求明显,产品厂商极其活跃,供销两旺的势头越来越明显。但智能家居毕竟是一个新兴事物,加上5G、AIoT等新技术的加持,在市场定位、渠道建设、商业...

关键字: c to 智能家居 b
关闭