Part Number:TMS320F2809
CCS 6.2对于%运算符的支持怎样?采用%进行运算的时候,为什么程序运行不对?
Green Deng:
CCS支持%运算的,你是具体怎么编写代码的?程序运行不对是指什么不对?
,
NickTI:
Uint16 eshCNT = 0;Uint16 yu=0;
void Fun(){
yu=eshCNT%10;
if (yu == 0) { GpioDataRegs.GPASET.bit.GPIO10 = 1; DELAY_US(500); GpioDataRegs.GPACLEAR.bit.GPIO10 = 1; eshCNT=0; } if (yu == 1) { GpioDataRegs.GPASET.bit.GPIO10 = 1; DELAY_US(800); GpioDataRegs.GPACLEAR.bit.GPIO10 = 1; } if (yu == 2) { GpioDataRegs.GPASET.bit.GPIO10 = 1; DELAY_US(1000); GpioDataRegs.GPACLEAR.bit.GPIO10 = 1; } eshCNT++;
}
程序运行过程中,会丢掉800us的高电平,只有500和1000us的高电平出现?
补充内容:
1、在可以击中断点的情况下,以单次进入Fun()函数20次为例,前10次缺少2和6,剩下的0、1、3、4、5、7、8、9出现;后10次缺少4和8,剩下的0、1、2、3、5、6、7、9出现。
2、采用yu=eshCNT&0x000F;语句,则缺失4和8。
,
NickTI:
你好,已经补充了说明,还有需要补充内容么?
,
Green Deng:
有没有试过在其他版本的 CCS 中看到类似的情况?
CCS6.2对%运算没有特别操作。
% 操作由编译器 RTS 库中的函数执行。,它是用汇编写的,使用围绕 SUBCU 指令的循环。 自大约 20 年前编译器的第一个版本以来,它一直以这种方式工作。
尝试在 if (yu == 1) 内设置断点能停住吗?
TI中文支持网

