ZHCUCF7 October   2024 TMS320C28341 , TMS320C28342 , TMS320C28343 , TMS320C28343-Q1 , TMS320C28344 , TMS320C28345 , TMS320C28346 , TMS320C28346-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
  5. 2C28 到 C29 的 CPU 迁移
    1. 2.1 用例
    2. 2.2 主要差异
    3. 2.3 源代码迁移
      1. 2.3.1 C/C++ 源代码
        1. 2.3.1.1 pragma 和属性
        2. 2.3.1.2
        3. 2.3.1.3 内联函数
        4. 2.3.1.4 内联汇编
        5. 2.3.1.5 关键字
        6. 2.3.1.6 数据类型差异
        7. 2.3.1.7 迁移工具支持
      2. 2.3.2 汇编语言源代码
    4. 2.4 工具链迁移
      1. 2.4.1 编译器
      2. 2.4.2 链接器
      3. 2.4.3 CCS 工程迁移
  6. 3CLA 到 C29 的 CPU 迁移
    1. 3.1 用例
    2. 3.2 主要差异
    3. 3.3 源代码迁移
      1. 3.3.1 C/C++ 源代码
        1. 3.3.1.1 数据类型差异
        2. 3.3.1.2 迁移 CLAmath.h 函数和内联函数
        3. 3.3.1.3 将 C28 和 CLA 迁移到相同的 C29 CPU
        4. 3.3.1.4 将 C28 和 CLA 迁移到不同的 C29 CPU
      2. 3.3.2 汇编语言源代码
    4. 3.4 工具链迁移
  7. 4参考资料

迁移 CLAmath.h 函数和内联函数

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