CCS 6.2对于%运算符的支持怎样?采用%进行运算的时候,为什么程序运行不对?
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.
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。
有没有试过在其他版本的 CCS 中看到类似的情况?
CCS6.2对%运算没有特别操作。
% 操作由编译器 RTS 库中的函数执行。,它是用汇编写的,使用围绕 SUBCU 指令的循环。 自大约 20 年前编译器的第一个版本以来,它一直以这种方式工作。
尝试在 if (yu == 1) 内设置断点能停住吗?