打印
[其他ST产品]

STVD 调试STM8S所遇到的问题

[复制链接]
90|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

环境为主控芯片: STM8SF103F3,编译器 COSMIC8,IDE环境为STVD。

大概代码如下:



<font face="新宋体" size="4" color="#000000">        u8 ret; 
        ret=rf_get_addr_len();
        ret=rf_get_trint_level();
        ret=rf_get_drssi_level();
        ret=rf_get_dest_provider();
        ret=rf_get_addr_len();</font>



使用STLINK进行调试时发现,ret的值根本就不是正确的,我跟踪到具体的函数里面去,检测值是正确的,但为什么赋值给ret后,这个值就不对了呢?



后来google搜后发现一个贴上有说明,内容如下:





一段很简单的代码,跑在ST-DISCOVERY的板子上(实际芯片是STM8S105C6),环境是STVD + COSMIC 4.3.4


float f1 = 3.90, f2 = 2.78, f3 = 0.0;

unsigned int i1 = 3, i2 = 12, i3 = 0;


initMCU(115200);


f3 = f1 * f2;

i3 = i1 * i2;


这样用ST-LINK/SWIM调试下来,结果完全不对:

貌似i3和f3的值仍然是之前的内存保存的值,感觉像完全没有做乘法一样。


而加上volatile后,

volatile float f1 = 3.90, f2 = 2.78, f3 = 0.0;

volatile unsigned int i1 = 3, i2 = 12, i3 = 0;


initMCU(115200);


f3 = f1 * f2;

i3 = i1 * i2;

再运行,结果就都对了:




难道COSMIC/STM8S一定要在局部变量上加上volatile?
看了一下编译器设置,好像DEBUG模式下没有任何的优化啊。

使用特权

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

本版积分规则

44

主题

569

帖子

1

粉丝