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.

[参考译文] 编译器/CC1312R:__delay_cycles ()等待太多周期

Guru**** 2999690 points

Other Parts Discussed in Thread: CC1312R

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/924371/compiler-cc1312r-__delay_cycles-waits-too-many-cycles

器件型号:CC1312R

工具/软件:TI C/C++编译器

您好!

当我调用它时:

_delay_cycles (1000000ul); 

编译器会生成以下内容:

F2416014 模 R0、#0x1614
F2C00005 移动 R0、#5
$1_$43:
1E40 副 R0、r0、#1
D1FD BNE
1美元至43美元 BF00 NOP
BF00 NOP

编译器为什么认为333332×4 + 2 NOP 需要1000000个周期? 需要1333330! 我尝试了其他值、它总是三分之一、太多。 O0或 O3没有影响。

请帮助!

我将使用 CCS 10.0、TI 编译器 v20.2.0.LTS。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有关__delay_cycles 的 TI ARM 编译器手册文档规定了以下内容...

    周期时序基于0等待状态。 结果因其他等待状态而异。

    存储器等待状态或 CPU 之外的其他存储器影响是否考虑了额外的周期?

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如何检查? 我在定制硬件上使用 CC1312。 没有其他任务正在运行、它都是"裸机"(无 TI-RTOS)。

    不过、我通过 XDS110调试器运行它、这会影响什么吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我还调查了一些问题、有一些问题正在发生:

    如果我单步执行此代码、并将 R0预先设置为10、则只需20个时钟周期:

    1E40               subs      r0、r0、#1
    F47FAFFD           bne.w     #-6 

    但是、如果我运行它而不是单步执行它、则需要38!? 根据 HW 时钟周期计数器、即。

    R0 = 20给出78
    R0 = 40会得到158
    R0 = 100得出398

    因此、如果我运行它、它是4n-2、如果我单步执行、它是2n。 如果我单步执行它、它如何能够以更快的速度运行? 它应该这么做吗?

    (另请注意、在我最初的问题中、它是 BNE (D1xx)而不是 BNE.W (F47FAFxx)、这可能是因素差异的原因。 我没有尝试单步1000000步执行、但它(原始代码)对所有值执行了相同的+33%操作。)

    看起来时钟周期计数器在某种程度上是坏的(?)、但我现在正在进入 voodoo 领域

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Tomas Gradin">如何检查? 通常、我希望器件文档中提到闪存的等待状态数。 但是,从搜索 CC1312R 数据表和 CC13x2、CC26x2 SimpleLinkTm无线 MCU 技术参考手册中,我似乎找不到指定的等待状态数。

    对于其他 Cortex-M4F 器 件、我确实创建了程序来测量等待状态的数量-请参阅 MSP432P401R:48MHz 时 SRAM_CODE 的性能。 我 目前没有任何 CC1312R 器件尝试运行测量。