Part Number: TMS320F28377D
源代码

ASM

出错

long = uint16 -uint16
在特定情况下反复出现, uint 3050 - uint 3046 = long 65532
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Part Number: TMS320F28377D
源代码

ASM

出错

long = uint16 -uint16
在特定情况下反复出现, uint 3050 - uint 3046 = long 65532
@BarbiQ -:感谢参与讨论!
@ li xiaokun:
楼上的回复没有错,代码实际上执行的是
(uint16)3046 - (uint16)3050 = (long)65532
也就是-4。
uint16无符号16位整型,执行减法操作时出现负数,也就是溢出。
将代码改成如下试试
v_pos[0] = pos[0] ;
v_pos[0] -= pre_pos[0];
可以参考下楼上提供的这个方法。
好像是监控界面出问题,仿真器到CCS软件之间的传输截断错误或者其他问题,使用if语句测试,监控显示65535,实际值没有大于5000,
如下图,两个断点都没有触发。

这个问题我也遇到过,28377D,CCS12.1,就是在Expressions中明确看到一个变量的数值出现过65530左右的值,但我这个程序不可能计算出这个数值,后来我在程序里增加if(数值>50000)的语句,打断点发现没有触发短点;后来我又进一步验证,if(数值>50000),我让一个变量自加,在Expressions中也看到自加变量没有自加。
就知道实际没有这么大的数值,后来也没再管了。