51单片机里的定时中断服务程序能调用用户自己编写的子程序么?我怎么用KEIL编译出现两个警告?
***WARNINGL15:MULTIPLECALLTOSEGMENTSEGMENT:?PR?_VALUEDISPLAY?START1CALLER1:?C_C51STAR...
*** WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?_VALUEDISPLAY?START1
CALLER1: ?C_C51STARTUP
CALLER2: ?PR?TIMER1?START1
*** WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?_WRD?LCD
CALLER1: ?C_C51STARTUP
CALLER2: ?PR?TIMER1?START1
高手帮忙,谢谢。。。 展开
SEGMENT: ?PR?_VALUEDISPLAY?START1
CALLER1: ?C_C51STARTUP
CALLER2: ?PR?TIMER1?START1
*** WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?_WRD?LCD
CALLER1: ?C_C51STARTUP
CALLER2: ?PR?TIMER1?START1
高手帮忙,谢谢。。。 展开
1个回答
展开全部
WARNING L15: MULTIPLE CALL TO SEGMENT
这个问题必须注意,可能引起程序冲突,假设你用于自动化领域,则可能导致信号产生尖峰。 产生这一警告的一个根源是:你在主循环里调用了一个函数(如aaa),而在中断服务函数里,你用调用了这个函数(如aaa)。这样当主循环运行到该函数中是,一旦产生中断,则在中断里又再次调用该函数!这时,很可能出错! 避免这种情况的方法很多:如,在进中断的时候置需调用该函数的标志,而在主循环中调用该函数
你可以在中断函数设置标志 FLAG_Display = 1;
在主函数里判断这个标志:
if(FLAG_Display)
ValueDisplay();
更新后,清除显示标志: FLAG_Display = 0;
这个问题必须注意,可能引起程序冲突,假设你用于自动化领域,则可能导致信号产生尖峰。 产生这一警告的一个根源是:你在主循环里调用了一个函数(如aaa),而在中断服务函数里,你用调用了这个函数(如aaa)。这样当主循环运行到该函数中是,一旦产生中断,则在中断里又再次调用该函数!这时,很可能出错! 避免这种情况的方法很多:如,在进中断的时候置需调用该函数的标志,而在主循环中调用该函数
你可以在中断函数设置标志 FLAG_Display = 1;
在主函数里判断这个标志:
if(FLAG_Display)
ValueDisplay();
更新后,清除显示标志: FLAG_Display = 0;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询