ZHCUCF7
October
2024
TMS320C28341 , TMS320C28342 , TMS320C28343 , TMS320C28343-Q1 , TMS320C28344 , TMS320C28345 , TMS320C28346 , TMS320C28346-Q1
-
1
-
摘要
-
商标
-
1简介
-
2C28 到 C29 的 CPU 迁移
- 2.1
用例
- 2.2
主要差异
- 2.3
源代码迁移
- 2.3.1
C/C++ 源代码
- 2.3.1.1
pragma 和属性
- 2.3.1.2
宏
- 2.3.1.3
内联函数
- 2.3.1.4
内联汇编
- 2.3.1.5
关键字
- 2.3.1.6
数据类型差异
- 2.3.1.7
迁移工具支持
- 2.3.2
汇编语言源代码
- 2.4
工具链迁移
- 2.4.1
编译器
- 2.4.2
链接器
- 2.4.3
CCS 工程迁移
-
3CLA 到 C29 的 CPU 迁移
- 3.1
用例
- 3.2
主要差异
- 3.3
源代码迁移
- 3.3.1
C/C++ 源代码
- 3.3.1.1
数据类型差异
- 3.3.1.2
迁移 CLAmath.h 函数和内联函数
- 3.3.1.3
将 C28 和 CLA 迁移到相同的 C29 CPU
- 3.3.1.4
将 C28 和 CLA 迁移到不同的 C29 CPU
- 3.3.2
汇编语言源代码
- 3.4
工具链迁移
-
4参考资料
3.3.1.3 将 C28 和 CLA 迁移到相同的 C29 CPU
- 在 C28+CLA 实现中,CLA 任务可由硬件或软件触发,并且在任务完成时,系统可能会向 C28 发送中断。
- 要在这种情况下实现此目的,对于软件任务触发器,将通过 PIPE 触发软件中断以运行所需的 ISR。
- 对于硬件任务触发器,将设置 C29 CPU 的 PIPE 以从所需的外设进行触发。
- 对于任务完成中断,通过 PIPE 触发软件中断(用户代码需要写入 PIPE 寄存器)来运行所需的 ISR。
- 如果 C28+CLA 实现中存在后台任务,则该任务可在 C29 CPU 中作为后台循环(空闲循环)轻松实现。
- 此场景中的一个关键挑战是中断优先级分配,因为 C28 ISR 和 CLA 任务现在都映射到 C29 ISR,需要分配中断优先级。而在 C28+CLA 上,它们在独立内核上独立运行;在这里,它们在相同的 C29 CPU 上运行。CLA 任务会一直运行到完成,而不会被其他任务抢占。如上所述,这可通过将这些任务分组到同一个 C29 PIPE 中断组来实现。但是,无法确保 C28 ISR 不会抢占 CLA 任务。同样,无法确保 CLA 任务不会抢占 C28 ISR。因此,在这种情况下,用户必须从整体上分析 C28 ISR + CLA 任务,并确定适合应用的中断优先级。
- 同样,如果 C28 ISR 是软件触发 CLA 任务,并且它们现在驻留在同一 C29 CPU 上,就会产生每个任务的相对中断优先级问题。如果 CLA 任务的优先级变得更高,它便可抢占 C28 ISR,并从 CLA 端运行和提供预期的功能。不过,这意味着 C28 ISR 将暂停,从 C28 的角度来看,这可能并非预期的功能。
- 此外,如果完全相同的事件(如外设)触发 C28 ISR 以及 CLA 任务,现在它们在同一 C29 CPU 上运行,则用户可以将它们合并为单个 ISR。
- CLA 寄存器为用户提供了许多功能,例如能够知道正在运行哪个任务,以及能够通过写入寄存器中的特定位来停止一个任务。迁移时,由于缺少这些寄存器和对应的功能,可能需要进行适当的源代码更新。
注: 此处可能并未确定所有极端情况。