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

TMS320F2812: 怎么避免编译后跳过一些语句?

Part Number:TMS320F2812

CCS Version: 12.4.0.00007

现象如下, 数据格式都为 int32:

1. 如下图, 上一语句第144行 park1.q 计算出来监控结果一直在变, 为Q30格式,紧接着下一行将值赋给 iir.input , 监控iir.input一直为0, Q30 * 2不会导致数值溢出况且监控结果看也没有溢出;

2. 我在147行后第148行增加了一句测试 instr.testCount++; instr.testCount这个却每中断一次增加一;

3. 断点调试在143行处设断点, 停下后按step in to,直接跳到152, instr.testCount 正常增加并且park1.q结果正常有数值, 而iir.input一直为0;

监控结果如下:

编译器优化等级为0, 不优化, 如下图设置 

反汇编如下

从汇编看, 是第144行到151行被优化了没有汇编语句, 但是中间的测试语句按理也被优化了, 却运行正常, 从143行跳到152行时会自动增1

另外说明, 此程序之前运行正常, 在一次注释整段语句时用快捷键Ctrl + /时出现了连续 ///  三个/的情况, 我删掉后就出现问题了

工程文件全部删除, 只把.c文件和.h文件拷出来, 重头再建工程文件, 还是一样的现象;

更换了一个CCS V11的版本来编译, 也一样的情况

也尝试更换C2000 tools, 不起作用, 能用的办法都用过了, 还是没辙, 请大神支招!

fw yang:

fw yang said: Q30 * 2不会导致数值溢出

 是因为:

1. 我把原始数据取0.5以下;

2. 监控结果看也没有溢出

,

fw yang:

我在其他编辑器里把尾符显示出来, 发现如果注释后面是CR的, 下一语句就不会执行, 再CR后面再按一次回车变成CRLF下一语句就能执行.

那么问题来了, 我只有WINDOWS, 也没进行什么操作, 按理WINDOWS按回车就是CRLF, 怎么突然会变掉, 另外再怎么变回去又是个问题, 我总不能一行一行修改过去, 请指教

,

fw yang:

尾符的默认设置也正常, 真是奇了怪了,

,

Cherry Zhou:

您好,您的问题我们需要升级到英文论坛寻求帮助,如有答复将尽快回复您。

,

Cherry Zhou:

您好,

确实是很奇怪的问题。在您分享的第二个屏幕截图中,我们发现第152行中没有源代码的程序计数器。 源代码关联可能关闭了。

能否分享一个test case?不需要是实际的项目,一个非常分散的简化版本可以帮助我们重现相同的问题就好。 

,

fw yang:

1. 源代码可以给,没问题;

2. 原因我已经在上文中说了, 是/注释语句后, 每一行的尾符莫名其妙的变成CR了, 正常WINDOWS尾符应该是CRLF才对, 导致编译器认为下一行也是注释, 重新在每一行后面按一下回车程序就正常了;

3. 现在的主要问题是, 这个尾符是怎么变成CR的, 我并没有进复制粘贴操作过, 也没在LINUX上去编辑过.

这个问题折腾了我两天

,

Cherry Zhou:

您好,

fw yang said:

2. 原因我已经在上文中说了, 是/注释语句后, 每一行的尾符莫名其妙的变成CR了, 正常WINDOWS尾符应该是CRLF才对, 导致编译器认为下一行也是注释, 重新在每一行后面按一下回车程序就正常了;

3. 现在的主要问题是, 这个尾符是怎么变成CR的, 我并没有进复制粘贴操作过, 也没在LINUX上去编辑过.

您这边只能在 Windows 环境中使用 CCS 编辑源代码吗?请问是否在版本控制中处理文件? 

,

fw yang:

没有使用GIT版本控制, 也没有使用其他版本控制软件

,

Cherry Zhou:

您好,

工程师这边无法重现此问题。 打开特殊字符的可见性,始终可以看到 CRLF:

 由于这之前都没有问题,建议您尝试使用全新的工作区文件夹并将项目导入到其中,看看是否有帮助。 

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F2812: 怎么避免编译后跳过一些语句?
分享到: 更多 (0)