打印
[STM8]

关于IAR Debug与Release版本运行结果不一致的问题

[复制链接]
5083|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lanjackg2003|  楼主 | 2014-8-19 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟我在写代码时候发现个奇怪的问题,工程代码一致,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有什么区别对待吗?毕竟我两个版本目前设置的大小都一致的.

看看哪位大侠遇到类似的问题,求指教。
沙发
lanjackg2003|  楼主 | 2014-8-19 15:38 | 只看该作者
本帖最后由 lanjackg2003 于 2014-8-19 15:42 编辑

问题虽然没有解决,但本来想分享一下找到的IAR选项优化的视频连接给大家分享一下,却发现无权限发链接
没办法了,这是视频的地址,自己动一下手板中文字删掉吧
v.youku.com删掉这几个字/v_show/id_XNzE2MDY5NDI0.html

使用特权

评论回复
板凳
bjxdylzsts| | 2014-8-19 16:42 | 只看该作者
不懂帮顶。

使用特权

评论回复
地板
lanjackg2003|  楼主 | 2014-8-21 10:20 | 只看该作者
bjxdylzsts 发表于 2014-8-19 16:42
不懂帮顶。

谢谢,不过该问题确实太奇怪了,后面我回去用debug模式也测试发现有该问题.
我调试运行到strtok这个函数就死掉了,跑不出来,但定时器中断函数还能够工作.
难道IAR的strtok函数有问题?确实不好分析到底strtok这个函数搞了什么,
因为我看了一下传入的数据内容是{0x0e,0x0d,0x0a,0x0d}
而strtok我的用法是,char *pPos = strtok(数据,"\r\n");
按理说不至于进了strtok之后不出来.
估计这个问题很难解决,结贴吧

使用特权

评论回复
5
yc_xpg| | 2014-12-29 16:47 | 只看该作者
不错1哦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

440

帖子

7

粉丝