liutaominshida 发表于 2016-12-10 16:10:47

STM8S103F3P在STVD在线调试下的离奇问题

最近有一个项目,采用的是STM8S103F3P,代码写完了之后,使用用ST-LINK在线进行调试,开发环境使用的是STVD+Cosmic.
定义了几个变量,由于是怕编译时被pass掉,所以在变量之前都加了volatile修饰。
在运行时,只是简单的执行变量自加操作,结果竟大出所料

这是跟踪进入中断执行代码时的对比,BlankingCounter和Phase变量执行自加时,只是从0变到1就不变了,而为了对比,我在中断当中增加了一个static局部变量,这个变量在进入四次中断之后,它的值变到了4,这是为什么呢?

liu553824989 发表于 2016-12-15 07:30:06

这很简单的问题了,不知道你的BlankingCounter和Phase变量是定义在哪里?其次就是你这两个变量在哪里清。不要动不动就怀疑编译器有问题,其实绝大多数是你的逻辑有问题。

无薪税绵 发表于 2016-12-15 08:15:52

可能被优化掉了,建议每行增加一个NOP.

斜阳__ 发表于 2016-12-15 09:00:06

stm32调试也遇到过类似的情况,都是把局部变成全局或静态之后调试的

z258121131 发表于 2016-12-15 09:08:33

检查下逻辑

cldym 发表于 2016-12-15 09:29:45

可能被优化掉了

peter001 发表于 2016-12-15 13:11:38

查看编译器优化等级

J_x 发表于 2016-12-15 15:53:59

同意二楼啊,这个编译环境我用过一段时间,很多感觉奇怪的问题仅仅是因为自己不了解而已。
检查其他调用这两个变量的地方有没有做过相应的操作。
关于编译器的一些特性可以参考编译器手册《cosmic c cross compiler user's guide for stm8》
页: [1]
查看完整版本: STM8S103F3P在STVD在线调试下的离奇问题