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.2 迁移 CLAmath.h 函数和内联函数
- CLA 编译器不支持 math.h。我们使用了一个单独的文件 CLAmath.h,其中包含对 C2000Ware CLAmath 库中函数/变量的外部引用。这些是用于特定操作(trig、div、sqrt、isqrt、exp、log)的手动优化 CLA 汇编例程。它还包含可将代码从 C28 移植到 CLA 的函数重新定义/映射,例如:
- 将特定的 math.h 函数和 TMU 内联函数映射到上述 CLA 数学库函数。例如,如果 C28 代码包含 __cos(对应于 TMU 指令)或 cosf,则它将在不进行任何更新的情况下迁移到 CLA,因为 CLAmath.h 将 __cos 和 cosf 映射到 CLAcos(在 CLAMath 库中)或 CLAcos_inline(在 CLAmath.h 中)。
- 因此,如果用户 CLA 代码包含 __cos,那么迁移到 C29 的过程与将 C28 内联函数迁移到 C29 的过程类似,如 C28-C29 源代码迁移部分所述。
- C29 编译器有一个名为 c29clang-tidy 的工具,用于检查 C28 内联函数的使用情况并提供替代方案建议(如有),此处对该工具进行了讨论(在 c29migration-c28-builtins 下)。该工具在这里也适用。
- 如果它包含 cosf,则迁移到 C29 不需要进行任何更改。
- 但如果它包含 CLAcos 或 CLAcos_inline,则用户需要将所有这些调用更改为 cosf。我们计划了一个映射头文件来帮助迁移 CLAMath 函数。
- 将特定的 math.h 函数和 C28+FPU 内联函数映射到 CLA 内联函数。例如,如果 C28 代码包含 __fmax(对应于 FPU 指令)或 fmaxf,则它将在不进行任何更新的情况下迁移到 CLA,因为 CLAmath.h 将 __fmax 和 fmaxf 映射到 __mmaxf32(CLA 内联函数)。
- 因此,如果用户 CLA 代码包含 __fmax,那么迁移到 C29 的过程与将 C28 内联函数迁移到 C29 的过程类似,如 C28-C29 源代码迁移部分所述。
- C29 编译器有一个名为 c29clang-tidy 的工具,用于检查 C28 内联函数的使用情况并提供替代方案建议(如有),此处对该工具进行了讨论(在 c29migration-c28-builtins 下)。该工具在这里也适用。
- 如果它包含 fmaxf,则迁移到 C29 不需要进行任何更改。
- 但如果它包含 __mmaxf32,则用户需要将所有这些调用更改为 fmaxf。计划使用 c29clang-tidy 扩展来检查 CLA 内联函数。
- 如果用户代码包含的 CLA 内联函数不映射到对应的 C28 内联函数(例如 __mgeq、__mgequ、__mgt、__mgtu、__mleq、__mlequ、__mlt、__mltu、__mdebugstop),则需要手动更新用户代码来修复这些函数。计划使用 c29clang-tidy 扩展来检查 CLA 内联函数。