01 - 多种调用MULTIPLE CALL TO SEGMENT
使用RTX51 Tiny系统,Keil编译出现Warning:MULTIPLE CALL TO SEGMENT的时候,说明一个不可重入的函数Fun同时被2个或以上的任务调用,可能出现重入的情况,比如:
02 - 解决办法
在Keil的51编译器中,因为资源限制,函数都是不可重入的,并不是所有的函数被2个或以上的任务调用都会报这个Warning,而是被编译器Overlay处理的函数再被2个或以上的任务调用才会报Warning,解决的办法暂时有如下:
方法0(先行):重新设计代码。尽量让同一个资源只在一个任务中使用。
方法1(首选):建立多个备份或建立守护任务。目的是让2个或以上的任务不调用同一个函数,有N个任务在使用Fun,就复制N份,然后函数名不同,供每个任务调用,如果Fun内还有其他不可重入的函数A和B,那么A和B也要根据不同的Fun相应复制。
优点:没有重入问题
缺点:占用CODE和RAM,操作和维护麻烦