Thread 中讨论的其他器件:SysConfig、 TMDSCNCD263P
工具/软件:
我有一个使用 R5 内核初始化 PRU 内核的小型工程。 为 PRU 内核生成的代码是通过用 C 代码编写的 CCS 工程创建的。 当这个生成的代码从 R5 发送到 PRU 时、它将无法正常运行。 妨碍正常运行的问题是、为 PRU 生成的代码绝不会初始化在 R2 保存的栈指针。
依赖:
- TI-CGT-PRU_2.3.3
- TI-CGT-armllvm_4.0.0.LTS
- MCU_PLUS_SDK_am263px_10_01_00_31
- SYSCONFIG_1.22.0
- TMDSCNCD263P - Sitara AM263Px 控制卡
基本编译流程:系统级工程(包括 R5 和 PRU 内核)可从附加的工程文件构建。 首先构建 PRU 内核、它会根据 C 代码创建一个头文件、其中包含构建工件的十六进制版本。 还会保存一个汇编文件以供参考。 创建的头文件包含在 R5 构建中(作为工程配置的一部分)。 R5 内核运行时、它会初始化 PRU 内核、然后传输头文件中包含的指令。
尽管文件中包含调试配置以及有关如何在硬件上复制问题的说明、但并不要求能够调试程序。 可以看到的是这一点 通过 PRU 内核构建创建的 main.asm 文件没有用于初始化栈指针值的指令 、应在 R2 中保存。 生成的第一条指令是递减栈指针(进入 main 函数时的标准操作)。
请注意、我还有 2 篇与此相关的其他 E2E 文章、目前的补救措施是在主循环开始时添加内联汇编命令以强制 R2 为正确的值。 这是一种脆弱的临时解决办法。 生成的代码应在进入 main 函数之前初始化 R2 的值、但没有发生这种情况。