ZHCUAU3J January   2018  – March 2024

 

  1.   1
  2.   请先阅读
    1.     关于本手册
    2.     标记规则
    3.     相关文档
    4.     德州仪器 (TI) 提供的相关文档
    5.     商标
  3. 软件开发工具简介
    1. 1.1 软件开发工具概述
    2. 1.2 编译器接口
    3. 1.3 ANSI/ISO 标准
    4. 1.4 输出文件
  4. 开始使用代码生成工具
    1. 2.1 Code Composer Studio 项目如何使用编译器
    2. 2.2 从命令行编译
  5. 使用 C/C++ 编译器
    1. 3.1  关于编译器
    2. 3.2  调用 C/C++ 编译器
    3. 3.3  使用选项更改编译器的行为
      1. 3.3.1  链接器选项
      2. 3.3.2  常用选项
      3. 3.3.3  其他有用的选项
      4. 3.3.4  运行时模型选项
      5. 3.3.5  选择目标 CPU 版本(--silicon_version 选项)
      6. 3.3.6  符号调试和分析选项
      7. 3.3.7  指定文件名
      8. 3.3.8  更改编译器解释文件名的方式
      9. 3.3.9  更改编译器处理 C 文件的方式
      10. 3.3.10 更改编译器解释和命名扩展名的方式
      11. 3.3.11 指定目录
    4. 3.4  通过环境变量控制编译器
      1. 3.4.1 设置默认编译器选项 (C7X_C_OPTION)
      2. 3.4.2 命名一个或多个备用目录 (C7X_C_DIR)
    5. 3.5  控制预处理器
      1. 3.5.1  预先定义的宏名称
      2. 3.5.2  #include 文件的搜索路径
        1. 3.5.2.1 在 #include 文件搜索路径(--include_path 选项)中新增目录
      3. 3.5.3  支持#warning 和 #warn 指令
      4. 3.5.4  生成预处理列表文件(--preproc_only 选项)
      5. 3.5.5  预处理后继续编译(--preproc_with_compile 选项)
      6. 3.5.6  生成带有注释的预处理列表文件(--preproc_with_comment 选项)
      7. 3.5.7  生成带有行控制详细信息的预处理列表(--preproc_with_line 选项)
      8. 3.5.8  为 Make 实用程序生成预处理输出(--preproc_dependency 选项)
      9. 3.5.9  生成包含#include在内的文件列表(--preproc_includes 选项)
      10. 3.5.10 在文件中生成宏列表(--preproc_macros 选项)
    6. 3.6  将参数传递给 main()
    7. 3.7  了解诊断消息
      1. 3.7.1 控制诊断消息
      2. 3.7.2 如何使用诊断抑制选项
    8. 3.8  其他消息
    9. 3.9  生成原始列表文件(--gen_preprocessor_listing 选项)
    10. 3.10 使用内联函数扩展
      1. 3.10.1 内联内在函数运算符
      2. 3.10.2 内联限制
      3. 3.10.3 不受保护定义控制的内联
        1. 3.10.3.1 使用内联关键字
      4. 3.10.4 保护内联和 _INLINE 预处理器符号
        1. 3.10.4.1 头文件 string.h
        2. 3.10.4.2 库定义文件
    11. 3.11 使用交叉列出功能
    12. 3.12 关于应用程序二进制接口
    13. 3.13 启用入口挂钩和出口挂钩函数
  6. 优化您的代码
    1. 4.1  调用优化
    2. 4.2  控制代码大小与速度
    3. 4.3  执行文件级优化(--opt_level=3 选项)
      1. 4.3.1 创建优化信息文件(--gen_opt_info 选项)
    4. 4.4  程序级优化(--program_level_compile 和 --opt_level=3 选项)
      1. 4.4.1 控制程序级优化(--call_assumptions 选项)
    5. 4.5  自动内联扩展(--auto_inline 选项)
    6. 4.6  链接时优化(--opt_level=4 选项)
      1. 4.6.1 选项处理
      2. 4.6.2 不兼容的类型
    7. 4.7  优化软件流水线
      1. 4.7.1 关闭软件流水线(--disable_software_pipeline 选项)
      2. 4.7.2 软件流水线信息
        1. 4.7.2.1 软件流水线信息
        2. 4.7.2.2 软件流水线信息术语
        3. 4.7.2.3 不符合软件流水线的循环的消息循环
        4. 4.7.2.4 流水线故障消息
        5. 4.7.2.5 由 --debug_software_pipeline 选项生成寄存器使用表
      3. 4.7.3 折叠逻辑程序和收尾程序以改善性能和代码大小
        1. 4.7.3.1 推测执行
    8. 4.8  冗余循环
    9. 4.9  指示是否使用了某些别名技术
      1. 4.9.1 采用某些别名时使用 --aliased_variables 选项
    10. 4.10 防止重新排列关联浮点运算
    11. 4.11 使用性能建议优化代码
      1. 4.11.1 建议 #35000:使用 restrict 提高循环性能
    12. 4.12 通过优化使用交叉列出特性
    13. 4.13 调试和分析优化代码
      1. 4.13.1 分析优化的代码
    14. 4.14 正在执行什么类型的优化?
      1. 4.14.1  基于成本的寄存器分配
      2. 4.14.2  别名消歧
      3. 4.14.3  分支优化和控制流简化
      4. 4.14.4  数据流优化
      5. 4.14.5  表达式简化
      6. 4.14.6  函数的内联扩展
      7. 4.14.7  函数符号别名
      8. 4.14.8  归纳变量和强度降低
      9. 4.14.9  循环不变量代码运动
      10. 4.14.10 循环旋转
      11. 4.14.11 循环折叠和循环合并
      12. 4.14.12 展开和阻塞
      13. 4.14.13 向量化 (SIMD)
      14. 4.14.14 指令排程
      15. 4.14.15 寄存器变量
      16. 4.14.16 寄存器跟踪/定位
      17. 4.14.17 软件流水线
    15. 4.15 流引擎和流地址生成器
      1. 4.15.1 流引擎概述
      2. 4.15.2 流引擎和流地址生成器的工作原理
      3. 4.15.3 流地址生成器概述
      4. 4.15.4 使用流引擎和流地址生成器的优点
      5. 4.15.5 用于流引擎和流地址生成器的接口
      6. 4.15.6 参数模板配置
      7. 4.15.7 使用流引擎
        1. 4.15.7.1 使用流引擎时进行硬编码的内在函数操作数
      8. 4.15.8 使用流地址生成器
        1. 4.15.8.1 流地址生成器的矢量谓词
        2. 4.15.8.2 断言与非断言的流地址存储和加载
      9. 4.15.9 自动使用流引擎和流地址生成器(--auto_stream 选项)
        1. 4.15.9.1 自动使用 SE 和 SA 的正确性
        2. 4.15.9.2 对 SE 和 SA 的自动使用进行调优
    16. 4.16 嵌套循环控制器 (NLC)
      1. 4.16.1 可能限制使用 NLC 的障碍
  7. C/C++ 语言实现
    1. 5.1  C7000 C 的特征
      1. 5.1.1 实现定义的行为
    2. 5.2  C7000 C++ 的特性
    3. 5.3  数据类型
      1. 5.3.1 枚举类型大小
      2. 5.3.2 矢量数据类型
    4. 5.4  文件编码和字符集
    5. 5.5  关键字
      1. 5.5.1 complex 关键字
      2. 5.5.2 const 关键字
      3. 5.5.3 __cregister 关键字
        1. 5.5.3.1 定义和使用控制寄存器
        2. 5.5.3.2 在进行浮点运算后评估标志状态寄存器 (FSR) 中的标志
      4. 5.5.4 restrict 关键字
      5. 5.5.5 volatile 关键字
    6. 5.6  C++ 异常处理
    7. 5.7  寄存器变量和参数
    8. 5.8  pragma 指令
      1. 5.8.1  CALLS Pragma
      2. 5.8.2  CLINK Pragma
      3. 5.8.3  COALESCE_LOOP Pragma
      4. 5.8.4  CODE_ALIGN Pragma
      5. 5.8.5  CODE_SECTION Pragma
      6. 5.8.6  DATA_ALIGN Pragma
      7. 5.8.7  DATA_MEM_BANK Pragma
        1. 5.8.7.1 使用 DATA_MEM_BANK Pragma
      8. 5.8.8  DATA_SECTION Pragma
        1. 5.8.8.1 使用 DATA_SECTION Pragma C 源文件
        2. 5.8.8.2 使用 DATA_SECTION Pragma C++ 源文件
      9. 5.8.9  诊断消息 Pragma
      10. 5.8.10 FORCEINLINE Pragma
      11. 5.8.11 FORCEINLINE_RECURSIVE Pragma
      12. 5.8.12 FUNC_ALWAYS_INLINE Pragma
      13. 5.8.13 FUNC_CANNOT_INLINE Pragma
      14. 5.8.14 FUNC_EXT_CALLED Pragma
      15. 5.8.15 FUNC_IS_PURE Pragma
      16. 5.8.16 FUNC_IS_SYSTEM Pragma
      17. 5.8.17 FUNC_NEVER_RETURNS Pragma
      18. 5.8.18 FUNC_NO_GLOBAL_ASG Pragma
      19. 5.8.19 FUNC_NO_IND_ASG Pragma
      20. 5.8.20 FUNCTION_OPTIONS Pragma
      21. 5.8.21 INTERRUPT Pragma
      22. 5.8.22 LOCATION Pragma
      23. 5.8.23 MUST_ITERATE Pragma
        1. 5.8.23.1 MUST_ITERATE Pragma 语法
        2. 5.8.23.2 使用 MUST_ITERATE 扩展编译器对循环的了解
      24. 5.8.24 NOINIT 和 PERSISTENT Pragma
      25. 5.8.25 NOINLINE Pragma
      26. 5.8.26 NO_COALESCE_LOOP Pragma
      27. 5.8.27 NO_HOOKS Pragma
      28. 5.8.28 once Pragma
      29. 5.8.29 pack Pragma
      30. 5.8.30 PROB_ITERATE Pragma
      31. 5.8.31 RETAIN Pragma
      32. 5.8.32 SET_CODE_SECTION 和 SET_DATA_SECTION Pragma
      33. 5.8.33 STRUCT_ALIGN Pragma
      34. 5.8.34 UNROLL Pragma
      35. 5.8.35 WEAK Pragma
    9. 5.9  _Pragma 运算符
    10. 5.10 应用程序二进制接口
    11. 5.11 目标文件符号命名规则(链接名)
    12. 5.12 更改 ANSI/ISO C/C++ 语言模式
      1. 5.12.1 C99 支持 (--c99)
      2. 5.12.2 C11 支持 (--c11)
      3. 5.12.3 严格 ANSI 模式和宽松 ANSI 模式(--strict_ansi 和 --relaxed_ansi)
    13. 5.13 GNU 和 Clang 语言扩展
      1. 5.13.1 扩展
      2. 5.13.2 函数属性
      3. 5.13.3 For 循环属性
      4. 5.13.4 变量属性
      5. 5.13.5 类型属性
      6. 5.13.6 内置函数
    14. 5.14 向量数据类型的运算和函数
      1. 5.14.1 向量字面量和串联
      2. 5.14.2 向量的一元和二进制运算符
      3. 5.14.3 向量的三态运算符 (?:)
      4. 5.14.4 矢量的混合运算符
      5. 5.14.5 不受支持的矢量比较运算符
      6. 5.14.6 向量的转换函数
      7. 5.14.7 矢量的重新解释函数
      8. 5.14.8 矢量谓词类型
        1. 5.14.8.1 构造向量谓词类型
        2. 5.14.8.2 使用向量谓词类型
        3. 5.14.8.3 布尔向量类型
    15. 5.15 C7000 内在函数
      1. 5.15.1 高级别过载内在函数
      2. 5.15.2 为特殊加载和存储指令定义的内在函数
      3. 5.15.3 直接映射的内在函数
      4. 5.15.4 查找表和直方图内在函数
      5. 5.15.5 矩阵乘法加速器 (MMA) 内在函数
      6. 5.15.6 传统内在函数
    16. 5.16 C7000 可扩展矢量编程
  8. 运行时环境
    1. 6.1 存储器
      1. 6.1.1
      2. 6.1.2 C/C++ 系统堆栈
      3. 6.1.3 动态存储器分配
    2. 6.2 对象表示
      1. 6.2.1 数据类型存储
        1. 6.2.1.1 char 和 short 数据类型(有符号和无符号)
        2. 6.2.1.2 enum、int 和 long 数据类型(有符号和无符号)
        3. 6.2.1.3 长数据类型(有符号和无符号)
        4. 6.2.1.4 浮点数据类型
        5. 6.2.1.5 double 和 long double 数据类型
        6. 6.2.1.6 指向数据成员类型的指针
        7. 6.2.1.7 指向成员函数类型的指针
        8. 6.2.1.8 结构和数组
      2. 6.2.2 位字段
      3. 6.2.3 字符串常量
    3. 6.3 寄存器惯例
    4. 6.4 函数结构和调用惯例
      1. 6.4.1 函数如何进行调用
      2. 6.4.2 被调用函数如何响应
      3. 6.4.3 访问参数和局部变量
    5. 6.5 访问 C 和 C++ 中的链接器符号
    6. 6.6 运行时支持算术例程
    7. 6.7 系统初始化
      1. 6.7.1 用于系统预初始化的引导挂钩函数
      2. 6.7.2 变量的自动初始化
        1. 6.7.2.1 零初始化变量
        2. 6.7.2.2 的直接初始化
        3. 6.7.2.3 运行时变量自动初始化
        4. 6.7.2.4 的自动初始化表
          1. 6.7.2.4.1 数据格式遵循的长度
          2. 6.7.2.4.2 零初始化格式
          3. 6.7.2.4.3 行程编码 (RLE) 格式
          4. 6.7.2.4.4 Lempel-Ziv-Storer-Szymanski 压缩 (LZSS) 格式
        5. 6.7.2.5 在加载时初始化变量
        6. 6.7.2.6 全局构造函数
  9. 使用运行时支持函数并构建库
    1. 7.1 C 和 C++ 运行时支持库
      1. 7.1.1 将代码与对象库链接
      2. 7.1.2 头文件
      3. 7.1.3 修改库函数
      4. 7.1.4 支持字符串处理
      5. 7.1.5 极少支持国际化
      6. 7.1.6 时间和时钟函数支持
      7. 7.1.7 允许打开的文件数量
      8. 7.1.8 库命名规则
    2. 7.2 C I/O 函数
      1. 7.2.1 高级别 I/O 函数
        1. 7.2.1.1 格式化和格式转换缓冲区
      2. 7.2.2 低级 I/O 实现概述
        1.       open
        2.       close
        3.       read
        4.       write
        5.       lseek
        6.       unlink
        7.       rename
      3. 7.2.3 器件驱动程序级别 I/O 函数
        1.       DEV_open
        2.       DEV_close
        3.       DEV_read
        4.       DEV_write
        5.       DEV_lseek
        6.       DEV_unlink
        7.       DEV_rename
      4. 7.2.4 为 C I/O 添加用户定义的器件驱动程序
        1. 7.2.4.1 将默认流映射到器件
      5. 7.2.5 器件前缀
        1.       add_device
        2.       291
        3. 7.2.5.1 为 C I/O 器件编程
    3. 7.3 处理可重入性(_register_lock() 和 _register_unlock() 函数)
    4. 7.4 库构建流程
      1. 7.4.1 所需的非德州仪器 (TI) 软件
      2. 7.4.2 使用库构建流程
        1. 7.4.2.1 通过链接器自动重建标准库
        2. 7.4.2.2 手动调用 mklib
          1. 7.4.2.2.1 构建标准库
          2. 7.4.2.2.2 共享或只读库目录
          3. 7.4.2.2.3 使用自定义选项构建库
          4. 7.4.2.2.4 mklib 程序选项摘要
      3. 7.4.3 扩展 mklib
        1. 7.4.3.1 底层机制
        2. 7.4.3.2 来自其他供应商的库
  10. 目标模块简介
    1. 8.1 目标文件格式规范
    2. 8.2 可执行目标文件
    3. 8.3 段简介
      1. 8.3.1 特殊段名
    4. 8.4 链接器如何处理段
      1. 8.4.1 合并输入段
      2. 8.4.2 放置段
    5. 8.5 符号
      1. 8.5.1 局部符号
      2. 8.5.2 弱符号
    6. 8.6 加载程序
  11. 程序加载和运行
    1. 9.1 负载
    2. 9.2 入口点
    3. 9.3 运行时初始化
      1. 9.3.1 _c_int00 函数
      2. 9.3.2 RAM 模型与 ROM 模型
        1. 9.3.2.1 在运行时自动初始化变量 (--rom_model)
        2. 9.3.2.2 在加载时初始化变量 (--ram_model)
        3. 9.3.2.3 --rom_model 和 --ram_model 链接器选项
      3. 9.3.3 关于链接器生成的复制表
        1. 9.3.3.1 BINIT
        2. 9.3.3.2 CINIT
    4. 9.4 main 的参数
    5. 9.5 运行时重定位
    6. 9.6 其他信息
  12. 10归档器说明
    1. 10.1 归档器概述
    2. 10.2 归档器在软件开发流程中的作用
    3. 10.3 调用归档器
    4. 10.4 归档器示例
    5. 10.5 库信息归档器说明
      1. 10.5.1 调用库信息归档器
      2. 10.5.2 库信息归档器示例
      3. 10.5.3 列出索引库的内容
      4. 10.5.4 要求
  13. 11链接 C/C++ 代码
    1. 11.1 通过编译器调用链接器(-z 选项)
      1. 11.1.1 单独调用链接器
      2. 11.1.2 调用链接器作为编译步骤的一部分
      3. 11.1.3 禁用链接器(--compile_only 编译器选项)
    2. 11.2 链接器代码优化
      1. 11.2.1 条件链接
      2. 11.2.2 生成函数子段(--gen_func_subsections 编译器选项)
      3. 11.2.3 生成聚合数据子段(--gen_data_subsections 编译器选项)
    3. 11.3 控制链接过程
      1. 11.3.1 包含运行时支持库
        1. 11.3.1.1 自动选择运行时支持库
          1. 11.3.1.1.1 使用 --issue_remarks 选项
        2. 11.3.1.2 手动选择运行时支持库
        3. 11.3.1.3 用于搜索符号的库顺序
      2. 11.3.2 运行时初始化
      3. 11.3.3 全局对象构造函数
      4. 11.3.4 指定全局变量初始化类型
      5. 11.3.5 指定在内存中分配段的位置
      6. 11.3.6 链接器命令文件示例
  14. 12链接器说明
    1. 12.1  链接器概述
    2. 12.2  链接器在软件开发流程中的作用
    3. 12.3  调用链接器
    4. 12.4  链接器选项
      1. 12.4.1  文件、段和符号模式中的通配符
      2. 12.4.2  通过链接器选项指定 C/C++ 符号
      3. 12.4.3  重定位功能(--absolute_exe 和 --relocatable 选项)
        1. 12.4.3.1 生成绝对输出模块(--absolute_exe 选项)
        2. 12.4.3.2 生成可重定位输出模块(--relocatable 选项)
      4. 12.4.4  分配存储器供加载器使用以传递参数(--arg_size 选项)
      5. 12.4.5  压缩(--cinit_compression 和 --copy_compression 选项)
      6. 12.4.6  压缩 DWARF 信息(--compress_dwarf 选项)
      7. 12.4.7  控制链接器诊断
      8. 12.4.8  自动选择库(--disable_auto_rts 选项)
      9. 12.4.9  不要删除未使用的段(--unused_section_elimination 选项)
      10. 12.4.10 链接器命令文件预处理(--disable_pp、--define 和 --undefine 选项)
      11. 12.4.11 定义入口点(--entry_point 选项)
      12. 12.4.12 设置默认填充值(--fill_value 选项)
      13. 12.4.13 定义堆大小(--heap_size 选项)
      14. 12.4.14 隐藏符号
      15. 12.4.15 改变库搜索算法(--library、--search_path 和 C7X_C_DIR)
        1. 12.4.15.1 指定备用库目录(--search_path 选项)
        2. 12.4.15.2 指定备用库目录(C7X_C_DIR 环境变量)
        3. 12.4.15.3 详尽读取和搜索库(--reread_libs 和 --priority 选项)
      16. 12.4.16 更改符号局部化
        1. 12.4.16.1 将所有全局符号设为静态(--make_static 选项)
      17. 12.4.17 创建映射文件(--map_file 选项)
      18. 12.4.18 管理映射文件内容(--mapfile_contents 选项)
      19. 12.4.19 禁用名称还原 (--no_demangle)
      20. 12.4.20 合并符号调试信息
      21. 12.4.21 去除符号信息(--no_symtable 选项)
      22. 12.4.22 指定输出模块(--output_file 选项)
      23. 12.4.23 确定函数放置优先级(--preferred_order 选项)
      24. 12.4.24 C 语言选项(--ram_model 和 --rom_model 选项)
      25. 12.4.25 保留丢弃的段(--retain 选项)
      26. 12.4.26 扫描所有库中的重复符号定义(--scan_libraries)
      27. 12.4.27 定义栈大小(--stack_size 选项)
      28. 12.4.28 符号映射(--symbol_map 选项)
      29. 12.4.29 生成 Far 调用 Trampoline(--trampolines 选项)
        1. 12.4.29.1 使用 Trampoline 的优缺点
        2. 12.4.29.2 尽量减少所需的 Trampoline 数量(--minimize_trampolines 选项)
        3. 12.4.29.3 将 Trampoline 从加载空间传送到运行空间
      30. 12.4.30 引入未解析的符号(--undef_sym 选项)
      31. 12.4.31 创建未定义的输出段时显示一条消息 (--warn_sections)
      32. 12.4.32 生成 XML 链接信息文件(--xml_link_info 选项)
      33. 12.4.33 零初始化(--zero_init 选项)
    5. 12.5  链接器命令文件
      1. 12.5.1  链接器命令文件中的保留名称
      2. 12.5.2  链接器命令文件中的常量
      3. 12.5.3  从链接器命令文件访问文件和库
      4. 12.5.4  MEMORY 指令
        1. 12.5.4.1 默认存储器型号
        2. 12.5.4.2 MEMORY 指令语法
        3. 12.5.4.3 表达式和地址运算符
      5. 12.5.5  SECTIONS 指令
        1. 12.5.5.1 SECTIONS 指令语法
        2. 12.5.5.2 段分配和放置
          1. 12.5.5.2.1 绑定
          2. 12.5.5.2.2 指定的存储器
          3. 12.5.5.2.3 使用 HIGH 位置说明符来控制放置
            1. 12.5.5.2.3.1 使用 HIGH 说明符进行链接器放置
            2.         425
            3. 12.5.5.2.3.2 在没有 HIGH 说明符的情况下进行链接器放置
          4. 12.5.5.2.4 对齐和分块
          5. 12.5.5.2.5 对齐和填充
        3. 12.5.5.3 指定输入段
          1. 12.5.5.3.1 指定段内容的最常用方法
          2.        431
        4. 12.5.5.4 使用多级子段
        5. 12.5.5.5 指定库或存档成员作为输出段的输入
          1. 12.5.5.5.1 将成员存档至输出段
          2.        435
        6. 12.5.5.6 使用多个存储器范围进行分配
        7. 12.5.5.7 在非连续存储器范围之间自动拆分输出段
      6. 12.5.6  在不同的加载和运行地址放置段
        1. 12.5.6.1 指定加载和运行地址
        2.       440
      7. 12.5.7  使用 GROUP 和 UNION 语句
        1. 12.5.7.1 将输出段一同进行分组
        2. 12.5.7.2 利用 UNION 语句叠加段
        3. 12.5.7.3 将存储器用于多种用途
        4. 12.5.7.4 嵌套 UNION 和 GROUP
        5. 12.5.7.5 检查分配器的一致性
        6. 12.5.7.6 为 UNION 和 GROUP 命名
      8. 12.5.8  特殊段类型(DSECT、COPY、NOLOAD 和 NOINIT)
      9. 12.5.9  在链接时分配符号
        1. 12.5.9.1 赋值语句的语法
        2. 12.5.9.2 向符号分配 SPC
        3. 12.5.9.3 赋值表达式
        4. 12.5.9.4 由链接器自动定义的符号
        5. 12.5.9.5 向符号分配一个段的确切开始值、结束值和大小值
        6. 12.5.9.6 为什么点运算符有时不起作用
        7. 12.5.9.7 地址和维度运算符
          1. 12.5.9.7.1 输入项
          2. 12.5.9.7.2 输出段
          3. 12.5.9.7.3 GROUP
          4. 12.5.9.7.4 UNION
        8. 12.5.9.8 LAST 运算符
      10. 12.5.10 创建和填充孔洞
        1. 12.5.10.1 已初始化和未初始化的段
        2. 12.5.10.2 创建空洞
        3. 12.5.10.3 填充孔洞
        4. 12.5.10.4 对未初始化的段进行显式初始化
    6. 12.6  链接器符号
      1. 12.6.1 链接器定义的函数和数组
      2. 12.6.2 链接器定义的整数值
      3. 12.6.3 链接器定义的地址
      4. 12.6.4 有关 _symval 运算符的更多信息
      5. 12.6.5 使用 _symval、PC 相对寻址和远数据
      6. 12.6.6 弱符号
        1. 12.6.6.1 弱符号引用
        2. 12.6.6.2 弱符号定义
      7. 12.6.7 利用对象库解析符号
    7. 12.7  默认放置算法
      1. 12.7.1 分配算法如何创建输出段
      2. 12.7.2 减少存储器碎片
    8. 12.8  使用由链接器生成的复制表
      1. 12.8.1 使用复制表进行引导加载
      2. 12.8.2 在复制表中使用内置链接运算符
      3. 12.8.3 重叠管理示例
      4. 12.8.4 使用 table() 运算符生成复制表
        1. 12.8.4.1 table() 操作符
        2. 12.8.4.2 启动时复制表
        3. 12.8.4.3 使用 table() 操作符管理目标组件
        4. 12.8.4.4 由链接器生成的复制表段和符号
        5. 12.8.4.5 拆分对象组件和重叠管理
      5. 12.8.5 压缩
        1. 12.8.5.1 压缩的复制表格式
        2. 12.8.5.2 目标文件中的压缩段表示
        3. 12.8.5.3 压缩的数据布局
        4. 12.8.5.4 运行时解压缩
        5. 12.8.5.5 压缩算法
        6.       496
      6. 12.8.6 复制表内容
      7. 12.8.7 通用复制例程
    9. 12.9  部分(增量)链接
    10. 12.10 链接 C/C++ 代码
      1. 12.10.1 运行时初始化
      2. 12.10.2 对象库和运行时支持
      3. 12.10.3 设置堆栈段的大小
      4. 12.10.4 在运行时初始化和自动初始化变量
      5. 12.10.5 CMMU 配置产生的约束
    11. 12.11 链接器示例
  15. 13目标文件实用程序
    1. 13.1 调用目标文件显示实用程序
    2. 13.2 调用反汇编器
    3. 13.3 调用名称实用程序
    4. 13.4 调用符号去除实用程序
  16. 14C++ 名称还原器
    1. 14.1 调用 C++ 名称还原器
    2. 14.2 C++ 名称还原器的示例用法
  17.   A XML 链接信息文件说明
    1.     A.1 XML 信息文件元素类型
    2.     A.2 文档元素
      1.      A.2.1 标头元素
      2.      A.2.2 输入文件列表
      3.      A.2.3 对象组件列表
      4.      A.2.4 逻辑组列表
      5.      A.2.5 放置映射
      6.      A.2.6 Far Call Trampoline 列表
      7.      A.2.7 符号表
  18.   B 不受支持的工具和功能
    1.     B.1 不受支持的工具和功能列表
  19.   C 术语表
    1.     528
  20.   D 修订历史记录

修订历史记录

All Revision History Changes Intro HTMLDecember 15, 2023 to March 15, 2024 (from RevisionI (December 2023)to RevisionJ (March 2024))

  • 更正了与芯片勘误表相关的编译器选项的语法Go
  • 更正了与芯片勘误表相关的编译器选项的语法Go
  • 添加了从 L2 读取时流引擎的效率最高Go
  • 添加了有关“流引擎和流地址生成器的工作原理”的部分Go
  • 更具体地指定了迭代计数器和维度大小偏移Go
  • 改进了 SE 和 SA 接口说明。Go
  • 阐明了尺寸偏移(而非尺寸大小)用于 SE 和 SAGo
  • 添加了有关可传递给 SE API 的类型的注释Go
  • 添加了有关可传递给 SA API 的类型的注释Go
  • 不再记录 --rtti 选项。RTTI 生成始终针对 C++ 应用程序启用Go
  • 澄清了有关使用 CLINK pragma 的信息,因为默认情况下会启用条件链接Go
  • 不再需要定义 __C7X_UNSTABLE_API 宏来访问 MMA 可扩展矢量编程实用程序Go
  • 添加了关于 RTS 函数中的时区的信息Go
  • 澄清了有关使用 CLINK pragma 的信息,因为默认情况下会启用条件链接Go
  • <link_info> 中的 <output_file> 元素现在还包括输出文件的绝对路径Go
  • <input_file> 中的 <path> 元素现在一致地显示绝对路径Go
  • <object_component> 现在还可以包含 <alignment>、<readonly>、<readwrite>、<executable> 和 <uninitialized>。Go
  • <logical_group> 现包含 <output_section_group> 标志Go
  • <symbol> 现包含 <local> 标志Go

All Revision History Changes Intro HTMLFebruary 28, 2023 to December 15, 2023 (from RevisionH (February 2023)to RevisionI (December 2023))

  • 添加了 --auto_stream 和 --assume_addresses_ok_for_stream 选项Go
  • 添加了有关建议诊断的信息Go
  • 向循环相关优化说明添加了有关相应 --opt_level 的信息Go
  • 通篇将“循环计数”更改为“迭代计数”,以匹配新软件流水线循环信息。Go
  • 更新了软件流水线示例以匹配新的嵌入式软件流水线循环信息Go
  • 添加了有关使用性能建议诊断的信息Go
  • 添加了建议诊断以建议提高循环性能Go
  • 向循环相关优化说明添加了有关相应 --opt_level 的信息Go
  • 添加了“展开和阻塞”优化Go
  • 删除了不能自动使用流引擎和流地址生成器的语句Go
  • 添加了 --auto_stream 和 --assume_addresses_ok_for_stream 选项的说明Go
  • 添加了有关自动使用自动流式传输的潜在问题的信息Go
  • 添加了有关调优自动流式传输的信息Go
  • 添加了如下表述:--auto_stream、--assume_addresses_ok_for_stream 和 --diag_suppress 选项可与 FUNCTION_OPTIONS pragma 一起使用Go
  • 添加了有关向量的部分元素谓词的注释Go

All Revision History Changes Intro HTMLAugust 5, 2022 to February 28, 2023 (from RevisionG (August 2022)to RevisionH (February 2023))

  • 添加了 --silicon_errata 命令行选项Go
  • 添加了 --silicon_errata 命令行选项Go
  • 记录了 ptrdiff_t、size_t、wchar_t 和 C7000 矢量大小的预定义宏。Go
  • 添加了流引擎的说明Go
  • 添加了流地址生成器的说明。Go
  • 介绍了使用流引擎和流地址生成器的优点。Go
  • 记录了用于 MMA 和可扩展矢量编程的宏Go
  • 阐明了链接器定义的符号的使用,包括何时以及如何使用 _symval() 运算符Go

All Revision History Changes Intro HTMLOctober 22, 2021 to August 5, 2022 (from RevisionF (October 2021)to RevisionG (August 2022))

  • --strict_compatibility 链接器选项不再起任何作用且已从文档中删除Go
  • 删除了不受支持的 --rom 链接器选项的文档Go
  • 添加了 --fp_single_precision_constant 编译器选项Go
  • 为 C7504 添加了 --mma_version=2_256 设置Go
  • 新增了 --silicon_version=7504 命令行选项。Go
  • 为 C7504 器件添加了预定义的宏名称。Go
  • 向 --opt_level 优化列表添加了指向其他信息的链接。Go
  • 向某些优化说明添加了有关相应 --opt_level 的信息Go
  • 本机向量类型现在称为“TI 向量类型”,并且添加了布尔向量类型。Go
  • 修订了与 OpenCL 一致性相关的信息。Go
  • 更新了相关示例,以使用构造函数来初始化向量的元素,而不是使用强制转换/标量扩展语法。Go
  • 为转换运算符提供了访问器。更新了相关示例以反映此更改。Go
  • 添加了布尔向量的重新解释示例。Go
  • 添加了布尔向量的信息和示例Go
  • 添加了有关可扩展矢量编程的部分Go
  • --strict_compatibility 链接器选项不再起任何作用,已从文档中删除。Go
  • 删除了不受支持的 --rom 链接器选项的文档。Go
  • 记录了 --absolute_exe 和 --relocatable 选项可能无法一同使用。Go
  • 为 C7504 器件添加了预定义的宏名称。Go
  • 更正链接器的头文件搜索路径的说明。Go

All Revision History Changes Intro HTMLMarch 19, 2021 to October 22, 2021 (from RevisionE (March 2021)to RevisionF (October 2021))

  • 添加了 --mma_version 命令行选项Go
  • 添加了 --mma_version 命令行选项Go
  • 新增了 --silicon_version=7120 命令行选项。Go
  • 为 C7120 器件添加了预定义的宏名称。Go
  • 使用不同的 --silicon_version 或 --mma_version 编译的文件不支持链接时优化。Go
  • 指定可以将 C7120 和更高版本的 ISA 配置为允许断言的 SA 加载Go
  • 新增了几个加载操作的示例Go
  • SET_DATA_SECTION pragma 优先于 --gen_data_subsections=on 选项。Go
  • 记录了所有 C7000 代码和数据都必须位于 2GB 的虚拟地址空间内。Go
  • 删除了 RTS 库中不再包含的运行时支持算术函数。Go
  • 阐明了有关字符串处理函数的信息。Go
  • 添加了关于时间和时钟 RTS 函数的信息Go
  • SET_DATA_SECTION pragma 优先于 --gen_data_subsections=on 选项。Go
  • 为 C7120 器件添加了预定义的宏名称。Go
  • 记录了所有 C7000 代码和数据都必须位于 2GB 的虚拟地址空间内。Go

All Revision History Changes Intro HTMLDecember 15, 2020 to March 19, 2021 (from RevisionD (December 2020)to RevisionE (March 2021))

  • 由编译器生成的矢量谓词存储在某些情况下可能会触发页面错误异常。可在链接器命令文件中更正此问题。Go

All Revision History Changes Intro HTMLFebruary 28, 2020 to December 15, 2020 (from RevisionC (February 2020)to RevisionD (December 2020))

  • 更新了整个文档中的表格、图和交叉参考的编号格式。Go
  • 删除了整个文档中对处理器 wiki 的引用Go
  • 阐明了 --opt_level=4 必须位于 --run_linker 选项之前Go
  • 为流地址生成器添加了断言的加载,并添加了一些示例,这些示例根据 SA 配置导致存储和加载操作出现定义明确的行为与不明确的行为Go
  • 有文件证明不支持 C11 原子操作。Go
  • 更新了有关枚举类型大小的信息。Go
  • 阐明 --opt_level 和 FUNCTION_OPTIONS pragma 之间的交互。Go
  • 为与 MUST_ITERATE pragma 对应的属性新增了 C++ 属性语法Go
  • 添加了与 UNROLL pragma 对应的各个属性的 C++ 属性语法。Go
  • 有文件证明不支持 C11 原子操作。Go
  • 增加了使用位置属性的示例。Go
  • 添加了有关 --gen_func_subsections 选项的默认值的信息Go
  • 更正了有关 --gen_data_subsections 选项的默认值的信息。Go

下表列出了代码生成工具 v7.4 (SPRU187) 与 SPRUI03C(文档生成系统发生更改后)之间文档的变化。左列标识了本文档出现该特定改动的版本。

早期修订版本
添加内容的版本 章节 位置 添加/修改/删除
SPRUIG8C C/C++ 语言 GUID-965A0B01-9C16-4E42-AEBB-003AFE34E9F6.html#GUID-965A0B01-9C16-4E42-AEBB-003AFE34E9F6GUID-5A2C04DB-3D30-4BED-91C1-C7F3B1DC1D3E.html#GUID-5A2C04DB-3D30-4BED-91C1-C7F3B1DC1D3E 添加了矢量不能通过 stdarg 传递也不能传递给 printf() 的注释。
SPRUIG8C C/C++ 语言 GUID-2A56689B-FFEB-42CC-ACD0-C55BE51F7E4C.html#GUID-2A56689B-FFEB-42CC-ACD0-C55BE51F7E4CGUID-D3036DC8-B6DE-4B92-8443-38E725248F75.html#GUID-D3036DC8-B6DE-4B92-8443-38E725248F75GUID-8461D559-17C4-4C09-BF45-EE326985E497.html#GUID-8461D559-17C4-4C09-BF45-EE326985E497GUID-B17A6200-8057-4815-9487-5DED5482D704.html#GUID-B17A6200-8057-4815-9487-5DED5482D704 C++ 属性语法对应于 MUST_ITERATE、PROB_ITERATE 和 UNROLL pragma。
SPRUIG8C C/C++ 语言 GUID-B5E3710F-1C6C-492E-B180-66CA41079A44.html#GUID-B5E3710F-1C6C-492E-B180-66CA41079A44 #pragma once 现记录在头文件中使用。
SPRUIG8C 运行时环境,
链接器
GUID-194D3F68-FAF1-4A96-9EA4-101C26C4A2D6.html#GUID-194D3F68-FAF1-4A96-9EA4-101C26C4A2D6GUID-88BEF897-2B81-4E60-B2D3-0DFDC3B57C38.html#GUID-88BEF897-2B81-4E60-B2D3-0DFDC3B57C38 阐明了只有在使用 --rom_model 链接器选项时,才发生零初始化,使用 --ram_model 选项时则不发生。
SPRUIG8C 程序加载 GUID-2ADFA9EA-D117-4046-82B3-A44A83461545.html#GUID-2ADFA9EA-D117-4046-82B3-A44A83461545 更正了有关 RAM 和 ROM 模型使用 CINIT 的信息。
SPRUIG8C 链接,
链接器
GUID-92B0504E-63CC-42AD-96E1-AE919CB8241B.html#GUID-92B0504E-63CC-42AD-96E1-AE919CB8241BGUID-CA083EDE-2CFD-4161-A82A-4DAD5AA7C51A.html#GUID-CA083EDE-2CFD-4161-A82A-4DAD5AA7C51A 阐明了如果只有链接器在运行,则需要 --rom_model 或 --ram_model,但如果编译器在同一命令行中的 C/C++ 文件上运行,则 --rom_model 是默认选项。
SPRUIG8C 链接器 GUID-B65E09DA-4E20-4B45-9353-DF20B9418324.html#GUID-B65E09DA-4E20-4B45-9353-DF20B9418324GUID-FF28563B-D6AD-4B87-8954-50CAED14DB3B.html#GUID-FF28563B-D6AD-4B87-8954-50CAED14DB3BGUID-1369FD42-8A59-4A32-A442-7F8E25B7EFB2.html#GUID-1369FD42-8A59-4A32-A442-7F8E25B7EFB2 添加了使用相关存储器区域中上一个已分配字节的运行时地址来定义符号的 LAST 操作符。
SPRUIG8B 优化 GUID-C87434DA-EEA4-440E-B59F-6016C9405A71.html#GUID-C87434DA-EEA4-440E-B59F-6016C9405A71 更新了流引擎和流地址生成器的类型。
SPRUIG8B 语言 GUID-A676B826-6EEE-4FB7-9262-1E91372DF6AF.html#GUID-A676B826-6EEE-4FB7-9262-1E91372DF6AF 目前不支持 MISRA C 2004 检查。
SPRUIG8B 语言 GUID-65DAC964-C5E8-422E-82AE-82CF3A824236.html#GUID-65DAC964-C5E8-422E-82AE-82CF3A824236 目前不支持矢量数据类型的转换修饰符。
SPRUIG8A 简介,
语言
GUID-BC870AE2-E02A-480A-9BBF-24134CEF8F6D.html#GUID-BC870AE2-E02A-480A-9BBF-24134CEF8F6D
GUID-324ADF35-A2E6-4B87-8F16-6E0237D77A55.html#GUID-324ADF35-A2E6-4B87-8F16-6E0237D77A55
GUID-A676B826-6EEE-4FB7-9262-1E91372DF6AF.html#GUID-A676B826-6EEE-4FB7-9262-1E91372DF6AF
添加了对 C11 和 C++14 的支持。
SPRUIG8A 优化 GUID-C87434DA-EEA4-440E-B59F-6016C9405A71.html#GUID-C87434DA-EEA4-440E-B59F-6016C9405A71 添加了有关流引擎和流地址生成器的矢量长度和元素大小的信息。

Date Letter Revision History Changes Intro HTML ()to Revision ()