ZHCUCO7B December   2024  – November 2025 F29H850TU , F29H859TU-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
  5. 2性能优化
    1. 2.1 编译器设置
      1. 2.1.1 启用调试和源代码交叉列
      2. 2.1.2 优化控制
      3. 2.1.3 浮点数学
      4. 2.1.4 定点除法
      5. 2.1.5 单精度与双精度浮点
      6. 2.1.6 链接时优化 (LTO)
    2. 2.2 存储器设置
      1. 2.2.1 从 RAM 执行代码
      2. 2.2.2 从闪存执行代码
      3. 2.2.3 数据放置
    3. 2.3 代码结构和配置
      1. 2.3.1 内联
      2. 2.3.2 内联函数
      3. 2.3.3 易失性变量
      4. 2.3.4 函数参数
      5. 2.3.5 启用更广泛的数据访问
      6. 2.3.6 自动代码生成工具
      7. 2.3.7 准确剖析代码
    4. 2.4 应用代码优化
      1. 2.4.1 SDK 优化库
      2. 2.4.2 使用库优化代码尺寸
      3. 2.4.3 C29 特别指令
      4. 2.4.4 C29 并行性
      5. 2.4.5 首选 32 位变量和写入
      6. 2.4.6 编码风格及其对性能的影响
  6. 3参考资料
  7. 4修订历史记录

C29 并行性

  • C29 编译器可以利用 C29 架构的并行性,并行执行多条指令,尤其在依次执行多个独立运算的情况下。例如,下面的代码块演示了依次发生的两个相同 PID 运算。如果 DCL_runPID 在头文件中声明为静态函数,则编译器可以执行内联,然后并行执行两个 PID 运算。
    注: 但是,为了通过并行操作提高性能,可能还需要将存储器对象放置在不同的 RAM 块中,以避免在同时访问与独立执行(例如 PID)实例相关的对象时出现存储器停顿。
    float run_dualPID(DCL_PID *restrict p1, DCL_PID *restrict p2,float32_t rk1, float32_t yk1, float32_t lk1,float32_t rk2, float32_t yk2, float32_t lk2)
    {
       float x = DCL_runPID_C3(p1, rk1, yk1, lk1);
       float y = DCL_runPID_C3(p2, rk2, yk2, lk2);
       return x+y;
    }
  • 二进制 LUT 搜索 — 二进制查找表搜索在电机控制应用中很常见,并且可以通过将条件循环更改为固定迭代循环来进行优化。F29-SDK 在 examples/rtlibs/fastmath/binary_lut_search 中提供了一个示例。