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参考资料

将 C28 和 CLA 迁移到相同的 C29 CPU

  1. 在 C28+CLA 实现中,CLA 任务可由硬件或软件触发,并且在任务完成时,系统可能会向 C28 发送中断。
  2. 要在这种情况下实现此目的,对于软件任务触发器,将通过 PIPE 触发软件中断以运行所需的 ISR。
  3. 对于硬件任务触发器,将设置 C29 CPU 的 PIPE 以从所需的外设进行触发。
  4. 对于任务完成中断,通过 PIPE 触发软件中断(用户代码需要写入 PIPE 寄存器)来运行所需的 ISR。
  5. 如果 C28+CLA 实现中存在后台任务,则该任务可在 C29 CPU 中作为后台循环(空闲循环)轻松实现。
  6. 此场景中的一个关键挑战是中断优先级分配,因为 C28 ISR 和 CLA 任务现在都映射到 C29 ISR,需要分配中断优先级。而在 C28+CLA 上,它们在独立内核上独立运行;在这里,它们在相同的 C29 CPU 上运行。CLA 任务会一直运行到完成,而不会被其他任务抢占。如上所述,这可通过将这些任务分组到同一个 C29 PIPE 中断组来实现。但是,无法确保 C28 ISR 不会抢占 CLA 任务。同样,无法确保 CLA 任务不会抢占 C28 ISR。因此,在这种情况下,用户必须从整体上分析 C28 ISR + CLA 任务,并确定适合应用的中断优先级。
  7. 同样,如果 C28 ISR 是软件触发 CLA 任务,并且它们现在驻留在同一 C29 CPU 上,就会产生每个任务的相对中断优先级问题。如果 CLA 任务的优先级变得更高,它便可抢占 C28 ISR,并从 CLA 端运行和提供预期的功能。不过,这意味着 C28 ISR 将暂停,从 C28 的角度来看,这可能并非预期的功能。
  8. 此外,如果完全相同的事件(如外设)触发 C28 ISR 以及 CLA 任务,现在它们在同一 C29 CPU 上运行,则用户可以将它们合并为单个 ISR。
  9. CLA 寄存器为用户提供了许多功能,例如能够知道正在运行哪个任务,以及能够通过写入寄存器中的特定位来停止一个任务。迁移时,由于缺少这些寄存器和对应的功能,可能需要进行适当的源代码更新。
注: 此处可能并未确定所有极端情况。