[其他ST产品] STVD 调试STM8S所遇到的问题

[复制链接]
824|0
 楼主| 结合国际经验 发表于 2024-3-30 19:42 | 显示全部楼层 |阅读模式

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

大概代码如下:



  1. <font face="新宋体" size="4" color="#000000">        u8 ret;
  2.         ret=rf_get_addr_len();
  3.         ret=rf_get_trint_level();
  4.         ret=rf_get_drssi_level();
  5.         ret=rf_get_dest_provider();
  6.         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调试下来,结果完全不对:

1057366077bc5af0ac.png

貌似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;

再运行,结果就都对了:


4618666077bd7acb63.png



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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

775

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部