TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28335: CCS6.1.3选择O3优化等级编译,for循环语句被中断打断后偶尔执行错误

Part Number:TMS320F28335

你好!最近遇到一个问题,同一个工程文件,用ccs6.1.3选择O3优化等级编译与用ccs3.3选择O3优化等级编译,之后烧写到板子上运行结果不一样。具体表现是:使用一个for循环语句对一个16位的变量按从低到高的位进行赋值操作,用ccs6.1.3选择O3优化等级编译的执行结果是有时会出错,即某些高位赋值未执行。我分析认为应该是for循环执行到中途时被中断打断后,之后回来未继续执行for语句而是直接执行之后的语句了。而用ccs3.3选择O3优化等级编译,或者用ccs6.1.3选择O1优化等级编译则未出现该问题。请问这个是什么原因?有什么好的解决方案吗?是两个编译器对堆栈的保护要求不一样吗?

Green Deng:

你好,还请附上一下编译器的版本是多少?

或者你可以直接参考一下最新编译器的user guide:https://www.ti.com.cn/cn/lit/ug/spru514v/spru514v.pdf?ts=1621934047026&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Ftool%252Fcn%252FCCSTUDIO

,

xumei zhang:

,

xumei zhang:

请问一下这个问题原因是什么啊?怎么解决?

,

xumei zhang:

请问一下这个问题原因是什么啊?怎么解决?

,

Green Deng:

你好,方便提供一下for语句的内容,以及赋值之后的寄存器值吗?

另外,有没有测试过其他版本的CCS?这边不推荐使用CCS 6.x版本的,这个版本的bug较多。你可以试一下其他版本CCS:

processors.wiki.ti.com/…/Download_CCS

,

xumei zhang:

就是一个简单的for循环语句对一个16位的变量按从低到高的位进行赋值操作,我手上目前没有代码。我目前已经定位了,大概跑了十多个小时出现了一次for循环未执行完的情况。我猜测是两个中断嵌套打断导致的,因为之前测试时只开了发波中断测了几天都没出来,后来接上了键盘,相当于加了一个串口接收中断,就出来比较频繁了。目前只用ccs6.1.3和ccs3.3测试过,只有ccs6.1.3加上O3优化等级会出来这个问题。

,

xumei zhang:

就是一个简单的for循环语句对一个16位的变量按从低到高的位进行赋值操作,我手上目前没有代码。我目前已经定位了,大概跑了十多个小时出现了一次for循环未执行完的情况。我猜测是两个中断嵌套打断导致的,因为之前测试时只开了发波中断测了几天都没出来,后来接上了键盘,相当于加了一个串口接收中断,就出来比较频繁了。目前只用ccs6.1.3和ccs3.3测试过,只有ccs6.1.3加上O3优化等级会出来这个问题。

,

xumei zhang:

手机操作不太方便,好像误操作了

,

xumei zhang:

问题还没解决呢?怎么显示为已解决了呢?不知道是不是手机上误操作了。先前好半天登录不上。

,

xumei zhang:

请问ccs6平台有些什么bug?新的平台会不会存在?目前哪个版本ccs比较稳定可靠?麻烦推荐一下?另外由ccs3.3或ccs6更换到新的ccs版本便利性如何?我们这边现在已经用ccs6做了一些产品了,担心哪天又有什么问题出来,想尽快更换一个稳定可靠的版本。麻烦您了!

,

xumei zhang:

就是这个for循环语句,目前我加了测试程序,偶尔确实会走到TEMP_TEST1!=15里面去,但是得好多个小时才会出来一次,目前并未记录过出问题时候的寄存器值。

,

xumei zhang:

就是这个for循环语句,目前我加了测试程序,偶尔确实会走到TEMP_TEST1!=15里面去,但是得好多个小时才会出来一次,目前并未记录过出问题时候的寄存器值。

,

Green Deng:

1、

xumei zhang 说:偶尔确实会走到TEMP_TEST1!=15里面去

看代码,不是应该每次都进到if语句里面,直到TEMP_TEST1 == 15才不进去吗?

2、理论上来说,如果只是赋值语句的话,即使被中断打断,等中断出来之后还是会继续执行的,不会跳过剩下的任务从新开始执行,包括中断嵌套。

3、目前就不推荐使用CCS 6.x版本,其他版本都ok。另外你的程序在CCS 6.x能运行的话在其他版本也可以使用。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28335: CCS6.1.3选择O3优化等级编译,for循环语句被中断打断后偶尔执行错误
分享到: 更多 (0)