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.

[参考译文] PRU 编译器 CLPRU 2.3.3"内在函数__delay_cycles 中存在错误

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1245850/pru-compiler-clpru-2-3-3-bug-in-intrinsic-function-__delay_cycles

我可以解决使用多个延迟调用的问题。 仅供参考。 文档错误或存在错误。

根据 SPRUHV7C 中的表5-4–2014年7月–2018年7月修订

void _delay_cycles (unsigned int cycles); 针对指定的周期数改变 PRU 执行的延迟时间。

                                                                    周期数必须是常数。

任何超过 int32_MAX (有符号整型)的值都会导致64位翻转错误。

警告! 第106行:[W0001]常数值超出范围,
                                                 将被截断为32位
          LDI32   r0923372035781033983

在截断后、这会导致不正确的等待时间。

工具链版本号

PRU C/C++编译器 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D

PRU EABI C/C++解析器 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU C/C++文件合并 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU C/C++优化器 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU C/C++代码生成 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU 汇编器 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU 嵌入实用程序 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU C 源代码接口 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU 链接器 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU 绝对列表器 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU 符号去除实用程序 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU XREF 实用程序 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU C++还原器 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU 十六进制转换器 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU 名称实用程序 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU 目标文件显示 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D
PRU 归档器 v2.3.3
内部版本号1TKVO-2LI-UASAR-TAR-C08D

要重现的示例代码

Fullscreen
1
2
3
4
5
6
7
8
#include <stdint.h>
const uint32_t MAX_CYCLES_WITHOUT_ERROR = INT32_MAX;
void main(void)
{
__delay_cycles(MAX_CYCLES_WITHOUT_ERROR);
__delay_cycles(MAX_CYCLES_WITHOUT_ERROR+1);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX