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.

TMS320F2809: CCS对于%运算符的支持怎样?

Part Number: TMS320F2809

CCS 6.2对于%运算符的支持怎样?采用%进行运算的时候,为什么程序运行不对?

  • CCS支持%运算的,你是具体怎么编写代码的?程序运行不对是指什么不对?

  • 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) 内设置断点能停住吗?