小弟我在写代码时候发现个奇怪的问题,工程代码一致,Debug与Rel版本运行的结果不一样。
消息利用定时器时间Delayms的延时函数
伪代码:
u8 uDelay = 0;
void Delayms(u8 ms)
{
uDelay = ms;
while(uDelay);
}
//定时器代码
void Timer(void)
{
.....
if( 1ms到了)
{
if(uDelay != 0)
uDelay --;
}
.....
}
//主函数
void main(void)
{
while(1)
{
.....
处理A
Delayms(50);
处理B
.....
}
}
在A中有打印信息,假设打印内容为"AAAA"
那么在Debug版本中隔段时间会输出"AAAAAA",
而Rel版本输出1次"AAAAAA",之后就不输出了
若在Rel版本中去掉Delayms,则程序能够循环打印出信息出来.
一致都认为Debug模式下OK,Rel模式下程序应该也能够正常的运行.
没有想到差异性会这么大,甚至影响到MCU的部分外设.
像ADC采样在Rel版本中运行过Delayms函数后,就不能够工作,而去掉Delayms就ok了。
也许说是变量被优化了,但是我加了volatile 进行修饰也是有这种问题.
不知道是否debug版本与Rel版本,对heap与stack有什么区别对待吗?毕竟我两个版本目前设置的大小都一致的.
看看哪位大侠遇到类似的问题,求指教。 |