ZHCUAQ1F july   2015  – april 2023

 

  1.   请先阅读
    1.     关于本手册
    2.     标记规则
    3.     相关文档
    4.     德州仪器 (TI) 提供的相关文档
    5.     商标
  2. 软件开发工具简介
    1. 1.1 软件开发工具概述
    2. 1.2 编译器接口
    3. 1.3 ANSI/ISO 标准
    4. 1.4 输出文件
    5. 1.5 实用程序
  3. 开始使用代码生成工具
    1. 2.1 Code Composer Studio 项目如何使用编译器
    2. 2.2 从命令行编译
  4. 使用 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 指定目录
      12. 3.3.12 汇编器选项
    4. 3.4  通过环境变量控制编译器
      1. 3.4.1 设置默认编译器选项 (C6X_C_OPTION)
      2. 3.4.2 命名一个或多个备用目录 (C6X_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_cross_reference_listing 选项)
    10. 3.10 生成原始列表文件(--gen_preprocessor_listing 选项)
    11. 3.11 使用内联函数扩展
      1. 3.11.1 内联内在函数运算符
      2. 3.11.2 内联限制
      3. 3.11.3 不受保护定义控制的内联
        1. 3.11.3.1 使用内联关键字
      4. 3.11.4 保护内联和 _INLINE 预处理器符号
        1. 3.11.4.1 头文件 string.h
        2. 3.11.4.2 库定义文件
    12. 3.12 中断灵活性选项(--interrupt_threshold 选项)
    13. 3.13 使用交叉列出功能
    14. 3.14 生成和使用性能建议
    15. 3.15 关于应用程序二进制接口
    16. 3.16 启用入口挂钩和出口挂钩函数
  5. 优化您的代码
    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 选项)
      2. 4.4.2 混合 C/C++ 和汇编代码时的优化注意事项
    5. 4.5  自动内联扩展(--auto_inline 选项)
    6. 4.6  优化软件流水线
      1. 4.6.1 关闭软件流水线(--disable_software_pipeline 选项)
      2. 4.6.2 软件流水线信息
        1. 4.6.2.1 软件流水线信息
        2. 4.6.2.2 软件流水线信息术语
        3. 4.6.2.3 不符合软件流水线的循环的消息循环
        4. 4.6.2.4 流水线故障消息
        5. 4.6.2.5 由 --debug_software_pipeline 选项生成寄存器使用表
      3. 4.6.3 折叠 序言和结语以改善性能和代码大小
        1. 4.6.3.1 推测执行
        2. 4.6.3.2 选择最佳阈值
    7. 4.7  冗余循环
    8. 4.8  通过 SPLOOP 使用循环缓冲区
    9. 4.9  减小代码大小(--opt_for_space(或 -ms)选项)
    10. 4.10 使用反馈制导优化
      1. 4.10.1 反馈向导优化
        1. 4.10.1.1 第 1 阶段 - 收集程序分析信息
        2. 4.10.1.2 第 2 阶段 - 使用应用程序分析信息进行优化
        3. 4.10.1.3 生成和使用配置文件信息
        4. 4.10.1.4 反馈制导优化的应用示例
        5. 4.10.1.5 .ppdata 段
        6. 4.10.1.6 反馈制导优化和代码大小调整
        7. 4.10.1.7 检测程序执行开销
        8. 4.10.1.8 无效的分析数据
      2. 4.10.2 分析数据解码器
      3. 4.10.3 反馈制导优化 API
      4. 4.10.4 反馈制导优化总结
    11. 4.11 使用配置文件信息获得更好的程序缓存布局并分析代码覆盖率
      1. 4.11.1 背景和动机
      2. 4.11.2 代码覆盖
        1. 4.11.2.1 第 1 阶段 - 收集程序分析信息
        2. 4.11.2.2 第 2 阶段 -- 生成代码覆盖信息报告
      3. 4.11.3 您期待看到哪些性能改进?
        1. 4.11.3.1 评估 L1P 缓存性能
      4. 4.11.4 程序缓存布局相关的特征和功能
        1. 4.11.4.1 路径分析器
        2. 4.11.4.2 分析选项
        3. 4.11.4.3 环境变量
        4. 4.11.4.4 程序缓存布局工具 clt6x
        5. 4.11.4.5 连接器
        6. 4.11.4.6 链接器命令文件运算符 unordered()
      5. 4.11.5 程序指令缓存布局开发流程
        1. 4.11.5.1 收集动态分析信息
        2. 4.11.5.2 从动态分析信息中生成首选功能顺序
        3. 4.11.5.3 在重新构建的应用程序中使用首选函数顺序
      6. 4.11.6 带有加权调用图 (WCG) 信息的逗号分隔值 (CSV) 文件
      7. 4.11.7 链接器命令文件运算符 - unordered()
        1. 4.11.7.1 unordered() 运算符的输出段
        2.       124
        3. 4.11.7.2 为 生成的链接器映射文件
        4. 4.11.7.3 关于 Dot (.)出现 unordered() 的表达式
          1. 4.11.7.3.1 关于a位置表达式
          2.        128
        5. 4.11.7.4 GROUP 和 UNION
          1. 4.11.7.4.1 将 unordered()应用于GROUP
        6.       131
      8. 4.11.8 注意事项
    12. 4.12 指示是否使用了某些别名技术
      1. 4.12.1 采用某些别名时使用 --aliased_variables 选项
      2. 4.12.2 使用 --no_bad_aliases 选项来指示未采用这些技术
      3. 4.12.3 将 --no_bad_aliases 选项与汇编优化器一起使用
    13. 4.13 防止重新排列关联浮点运算
    14. 4.14 在优化代码中谨慎使用 asm 语句
    15. 4.15 使用性能建议优化您的代码
      1. 4.15.1  Advice #27000
      2. 4.15.2  Advice #27001 提高优化级别
      3. 4.15.3  Advice #27002 不要关闭软件流水线
      4. 4.15.4  Advice #27003 避免使用调试选项进行编译
      5. 4.15.5  Advice #27004 未生成性能建议
      6. 4.15.6  Advice #30000 防止由于调用导致循环不合格
      7. 4.15.7  Advice #30001 防止由于 rts 调用导致循环不合格
      8. 4.15.8  Advice #30002 防止由于 asm 语句导致循环不合格
      9. 4.15.9  Advice #30003 防止复杂条件导致的循环不合格
      10. 4.15.10 Advice #30004 防止由于 switch 语句导致循环不合格
      11. 4.15.11 Advice #30005 防止因算术运算导致循环不合格
      12. 4.15.12 Advice #30006 防止由于调用导致循环不合格 (2)
      13. 4.15.13 Advice #30007 防止由于 rts 调用导致循环不合格 (2)
      14. 4.15.14 Advice #30008 改进循环;使用 restrict 进行限定
      15. 4.15.15 Advice #30009 改进循环;添加 MUST_ITERATE pragma
      16. 4.15.16 Advice #30010 改进循环;添加 MUST_ITERATE pragma (2)
      17. 4.15.17 Advice #30011 改进循环;添加 _nasssert()
    16. 4.16 通过优化使用交叉列出特性
    17. 4.17 调试和分析优化代码
      1. 4.17.1 分析优化的代码
    18. 4.18 正在执行什么类型的优化?
      1. 4.18.1  基于成本的寄存器分配
      2. 4.18.2  别名消歧
      3. 4.18.3  分支优化和控制流简化
      4. 4.18.4  数据流优化
      5. 4.18.5  表达式简化
      6. 4.18.6  函数的内联扩展
      7. 4.18.7  函数符号别名
      8. 4.18.8  归纳变量和强度降低
      9. 4.18.9  循环不变量代码运动
      10. 4.18.10 循环旋转
      11. 4.18.11 向量化 (SIMD)
      12. 4.18.12 指令排程
      13. 4.18.13 寄存器变量
      14. 4.18.14 寄存器跟踪/定位
      15. 4.18.15 软件流水线
  6. 使用汇编优化器
    1. 5.1 可提高性能的代码开发流程
    2. 5.2 关于汇编优化器
    3. 5.3 编写线性汇编需要了解的内容
      1. 5.3.1 线性汇编源语句格式
      2. 5.3.2 线性汇编的寄存器规格
        1. 5.3.2.1 用于计算点积的线性汇编代码
        2.       183
        3. 5.3.2.2 用于计算点积的 C 代码
        4.       185
        5. 5.3.2.3 指定寄存器对
        6.       187
        7. 5.3.2.4 指定四倍字寄存器(仅限 C6600)
        8.       189
      3. 5.3.3 线性汇编的功能单元规格
      4. 5.3.4 使用线性汇编源代码注释
        1. 5.3.4.1 显示注释的 Lmac 函数代码
      5. 5.3.5 汇编文件保留您的符号寄存器名称
    4. 5.4 汇编优化器指令
      1.      .call
      2.      .circ
      3.      .cproc/.endproc
      4.      .map
      5.      .mdep
      6.      .mptr
      7.      .no_mdep
      8.      .pref
      9.      .proc/.endproc
      10.      .reg
      11.      .rega/.regb
      12.      .reserve
      13.      .return
      14.      .trip
      15.      .volatile
      16. 5.4.1 过程中不允许使用的指令
    5. 5.5 避免与汇编优化器发生存储器组冲突
      1. 5.5.1 防止存储器组冲突
        1. 5.5.1.1 指定存储器组信息的加载和存储指令
      2. 5.5.2 避免存储器组冲突的点积示例
        1. 5.5.2.1 点积的 C 代码
        2. 5.5.2.2 点积的线性汇编
        3. 5.5.2.3 点积软件流水线内核
        4.       218
        5. 5.5.2.4 中的点积展开以防止存储器组冲突
        6.       220
        7. 5.5.2.5 从 展开的点积内核
        8.       222
      3. 5.5.3 索引指针的存储器组冲突
        1. 5.5.3.1 对索引指针使用 .mptr
      4. 5.5.4 存储器组冲突算法
    6. 5.6 存储器别名消歧
      1. 5.6.1 汇编优化器如何处理存储器引用(默认)
      2. 5.6.2 使用 --no_bad_aliases 选项处理存储器引用
      3. 5.6.3 使用 .no_mdep 指令
      4. 5.6.4 使用 .mdep 指令来识别特定的存储器依赖关系
        1. 5.6.4.1 对存储器引用进行批注
        2.       232
        3. 5.6.4.2 使用 .mdep ld1、st1 的软件流水线
        4.       234
        5. 5.6.4.3 使用 .mdep st1、ld1 和 .mdep ld1、st1 的软件流水线
        6.       236
      5. 5.6.5 存储器别名示例
  7. 链接 C/C++ 代码
    1. 6.1 通过编译器调用链接器(-z 选项)
      1. 6.1.1 单独调用链接器
      2. 6.1.2 调用链接器作为编译步骤的一部分
      3. 6.1.3 禁用链接器(--compile_only 编译器选项)
    2. 6.2 链接器代码优化
      1. 6.2.1 条件链接
      2. 6.2.2 生成函数子段(--gen_func_subsections 编译器选项)
      3. 6.2.3 生成聚合数据子段(--gen_data_subsections 编译器选项)
    3. 6.3 控制链接过程
      1. 6.3.1 包含运行时支持库
        1. 6.3.1.1 自动选择运行时支持库
          1. 6.3.1.1.1 使用 --issue_remarks 选项
        2. 6.3.1.2 手动选择运行时支持库
        3. 6.3.1.3 用于搜索符号的库顺序
      2. 6.3.2 运行时初始化
      3. 6.3.3 全局对象构造函数
      4. 6.3.4 指定全局变量初始化类型
      5. 6.3.5 指定在内存中分配段的位置
      6. 6.3.6 链接器命令文件示例
  8. C/C++ 语言实现
    1. 7.1  TMS320C6000 C 的特征
      1. 7.1.1 实现定义的行为
    2. 7.2  TMS320C6000 C++ 的特征
    3. 7.3  数据类型
      1. 7.3.1 枚举类型大小
      2. 7.3.2 矢量数据类型
    4. 7.4  文件编码和字符集
    5. 7.5  关键字
      1. 7.5.1 complex 关键字
      2. 7.5.2 const 关键字
      3. 7.5.3 __cregister 关键字
        1. 7.5.3.1 定义和使用控制寄存器
      4. 7.5.4 __interrupt 关键字
      5. 7.5.5 __near 和 __far 关键字
        1. 7.5.5.1 near 和 far 数据对象
        2. 7.5.5.2 near 和 far 函数调用
      6. 7.5.6 restrict 关键字
      7. 7.5.7 volatile 关键字
    6. 7.6  C++ 异常处理
    7. 7.7  寄存器变量和参数
    8. 7.8  __asm 语句
    9. 7.9  pragma 指令
      1. 7.9.1  CALLS Pragma
      2. 7.9.2  CODE_ALIGN Pragma
      3. 7.9.3  CODE_SECTION Pragma
      4. 7.9.4  DATA_ALIGN Pragma
      5. 7.9.5  DATA_MEM_BANK Pragma
        1. 7.9.5.1 使用 DATA_MEM_BANK Pragma
      6. 7.9.6  DATA_SECTION Pragma
        1. 7.9.6.1 使用 DATA_SECTION Pragma C 源文件
        2. 7.9.6.2 使用 DATA_SECTION Pragma C++ 源文件
        3. 7.9.6.3 使用 DATA_SECTION Pragma 汇编源文件
      7. 7.9.7  诊断消息 Pragma
      8. 7.9.8  FORCEINLINE Pragma
      9. 7.9.9  FORCEINLINE_RECURSIVE Pragma
      10. 7.9.10 FUNC_ALWAYS_INLINE Pragma
      11. 7.9.11 FUNC_CANNOT_INLINE Pragma
      12. 7.9.12 FUNC_EXT_CALLED Pragma
      13. 7.9.13 FUNC_INTERRUPT_THRESHOLD Pragma
      14. 7.9.14 FUNC_IS_PURE Pragma
      15. 7.9.15 FUNC_IS_SYSTEM Pragma
      16. 7.9.16 FUNC_NEVER_RETURNS Pragma
      17. 7.9.17 FUNC_NO_GLOBAL_ASG Pragma
      18. 7.9.18 FUNC_NO_IND_ASG Pragma
      19. 7.9.19 FUNCTION_OPTIONS Pragma
      20. 7.9.20 INTERRUPT Pragma
      21. 7.9.21 LOCATION Pragma
      22. 7.9.22 MUST_ITERATE Pragma
        1. 7.9.22.1 MUST_ITERATE Pragma 语法
        2. 7.9.22.2 使用 MUST_ITERATE 扩展编译器对循环的了解
      23. 7.9.23 NMI_INTERRUPT Pragma
      24. 7.9.24 NOINIT 和 PERSISTENT Pragma
      25. 7.9.25 NOINLINE Pragma
      26. 7.9.26 NO_HOOKS Pragma
      27. 7.9.27 once Pragma
      28. 7.9.28 pack Pragma
      29. 7.9.29 PROB_ITERATE Pragma
      30. 7.9.30 RETAIN Pragma
      31. 7.9.31 SET_CODE_SECTION 和 SET_DATA_SECTION Pragma
      32. 7.9.32 STRUCT_ALIGN Pragma
      33. 7.9.33 UNROLL Pragma
    10. 7.10 _Pragma 运算符
    11. 7.11 应用程序二进制接口
    12. 7.12 目标文件符号命名规则(链接名)
    13. 7.13 更改 ANSI/ISO C/C++ 语言模式
      1. 7.13.1 C99 支持 (--c99)
      2. 7.13.2 C11 支持 (--c11)
      3. 7.13.3 严格 ANSI 模式和宽松 ANSI 模式(--strict_ansi 和 --relaxed_ansi)
    14. 7.14 GNU 和 Clang 语言扩展
      1. 7.14.1 扩展
      2. 7.14.2 函数属性
      3. 7.14.3 For 循环属性
      4. 7.14.4 变量属性
      5. 7.14.5 类型属性
      6. 7.14.6 内置函数
    15. 7.15 向量数据类型的运算和函数
      1. 7.15.1 向量字面量和串联
      2. 7.15.2 向量的一元和二进制运算符
      3. 7.15.3 矢量的混合运算符
      4. 7.15.4 向量的转换函数
      5. 7.15.5 矢量的重新解释函数
      6. 7.15.6 使用 printf() 设置矢量
      7. 7.15.7 内置矢量函数
  9. 运行时环境
    1. 8.1  存储器模型
      1. 8.1.1
      2. 8.1.2 C/C++ 系统堆栈
      3. 8.1.3 动态存储器分配
      4. 8.1.4 数据内存模型
        1. 8.1.4.1 确定数据地址模型
        2. 8.1.4.2 DP 相对寻址与绝对寻址
        3. 8.1.4.3 远常量对象
      5. 8.1.5 函数调用的蹦床生成
      6. 8.1.6 位置无关数据
    2. 8.2  对象表示
      1. 8.2.1 数据类型存储
        1. 8.2.1.1 char 和 short 数据类型(有符号和无符号)
        2. 8.2.1.2 enum、int 和 long 数据类型(有符号和无符号)
        3. 8.2.1.3 浮点数据类型
        4. 8.2.1.4 __int40_t 数据类型(有符号和无符号)
        5. 8.2.1.5 long long 数据类型(有符号和无符号)
        6. 8.2.1.6 double 和 long double 数据类型
        7. 8.2.1.7 指向数据成员类型的指针
        8. 8.2.1.8 指向成员函数类型的指针
        9. 8.2.1.9 结构和数组
      2. 8.2.2 位字段
      3. 8.2.3 字符串常量
      4.      366
    3. 8.3  寄存器惯例
    4. 8.4  函数结构和调用惯例
      1. 8.4.1 函数如何进行调用
      2. 8.4.2 被调用函数如何响应
      3. 8.4.3 访问参数和局部变量
    5. 8.5  访问 C 和 C++ 中的链接器符号
    6. 8.6  将 C 和 C++ 与汇编语言相连
      1. 8.6.1  使用汇编语言模块与 C/C++ 代码
      2. 8.6.2  从 C/C++ 访问汇编语言函数
        1. 8.6.2.1 从 C/C++ 程序调用汇编语言函数
        2. 8.6.2.2 由 调用的汇编语言程序
        3.       378
      3. 8.6.3  从 C/C++ 访问汇编语言变量
        1. 8.6.3.1 访问汇编语言全局变量
          1. 8.6.3.1.1 汇编语言变量程序
          2. 8.6.3.1.2 C 程序从 中访问汇编语言
        2.       383
        3. 8.6.3.2 访问汇编语言常量
          1. 8.6.3.2.1 从 C 语言访问汇编语言常量
          2. 8.6.3.2.2 的汇编语言程序
          3.        387
      4. 8.6.4  与汇编源代码共享 C/C++ 头文件
      5. 8.6.5  使用内联汇编语言
      6. 8.6.6  使用内在函数访问汇编语言语句
      7. 8.6.7  __x128_t 容器类型
        1. 8.6.7.1 __x128_t 容器类型
        2.       393
      8. 8.6.8  __float2_t 容器类型
      9. 8.6.9  使用内在函数进行中断控制和原子代码段
      10. 8.6.10 使用未对齐的数据和 64 位值
        1. 8.6.10.1 使用 _mem8 内在函数
      11. 8.6.11 通过 MUST_ITERATE 和 _nassert 来启用 SIMD 并扩展编译器对循环的了解
      12. 8.6.12 对齐数据的方法
        1. 8.6.12.1 数组的基址
        2. 8.6.12.2 相对于数组基址的偏移
        3. 8.6.12.3 动态存储器分配
        4. 8.6.12.4 结构体或类的成员
          1. 8.6.12.4.1 结构中的数组
          2. 8.6.12.4.2 类中的数组
          3.        406
      13. 8.6.13 SAT 位副作用
      14. 8.6.14 IRP 和 AMR 规则
      15. 8.6.15 浮点和饱和控制寄存器副作用
    7. 8.7  中断处理
      1. 8.7.1 保存 SGIE 位
      2. 8.7.2 在中断期间保存寄存器
      3. 8.7.3 使用 C/C++ 中断例程
      4. 8.7.4 使用汇编语言中断例程
    8. 8.8  运行时支持算术例程
    9. 8.9  系统初始化
      1. 8.9.1 用于系统预初始化的引导挂钩函数
      2. 8.9.2 变量的自动初始化
        1. 8.9.2.1 零初始化变量
        2. 8.9.2.2 的直接初始化
        3. 8.9.2.3 运行时变量自动初始化
        4. 8.9.2.4 的自动初始化表
          1. 8.9.2.4.1 数据格式遵循的长度
          2. 8.9.2.4.2 零初始化格式
          3. 8.9.2.4.3 行程编码 (RLE) 格式
          4. 8.9.2.4.4 Lempel-Ziv-Storer-Szymanski 压缩 (LZSS) 格式
          5. 8.9.2.4.5 用于处理 C 自动初始化表的 C 代码示例
        5. 8.9.2.5 在加载时初始化变量
        6. 8.9.2.6 全局构造函数
    10. 8.10 支持多线程应用
      1. 8.10.1 使用 OpenMP 进行编译
      2. 8.10.2 多线程运行时支持
        1. 8.10.2.1 运行时线程安全
        2. 8.10.2.2 线程创建、初始化和终止
        3. 8.10.2.3 线程局部存储 (TLS)
        4. 8.10.2.4 访问共享数据
  10. 使用运行时支持函数并构建库
    1. 9.1 C 和 C++ 运行时支持库
      1. 9.1.1 将代码与对象库链接
      2. 9.1.2 头文件
      3. 9.1.3 修改库函数
      4. 9.1.4 支持字符串处理
      5. 9.1.5 极少支持国际化
      6. 9.1.6 时间和时钟函数支持
      7. 9.1.7 允许打开的文件数量
      8. 9.1.8 库命名规则
    2. 9.2 C I/O 函数
      1. 9.2.1 高级别 I/O 函数
        1. 9.2.1.1 格式化和格式转换缓冲区
      2. 9.2.2 低级 I/O 实现概述
        1.       open
        2.       close
        3.       read
        4.       write
        5.       lseek
        6.       unlink
        7.       rename
      3. 9.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. 9.2.4 为 C I/O 添加用户定义的器件驱动程序
        1. 9.2.4.1 将默认流映射到器件
      5. 9.2.5 器件前缀
        1.       add_device
        2.       470
        3. 9.2.5.1 为 C I/O 器件编程
    3. 9.3 处理可重入性(_register_lock() 和 _register_unlock() 函数)
    4. 9.4 库构建流程
      1. 9.4.1 所需的非德州仪器 (TI) 软件
      2. 9.4.2 使用库构建流程
        1. 9.4.2.1 通过链接器自动重建标准库
        2. 9.4.2.2 手动调用 mklib
          1. 9.4.2.2.1 构建标准库
          2. 9.4.2.2.2 共享或只读库目录
          3. 9.4.2.2.3 使用自定义选项构建库
          4. 9.4.2.2.4 mklib 程序选项摘要
      3. 9.4.3 扩展 mklib
        1. 9.4.3.1 底层机制
        2. 9.4.3.2 来自其他供应商的库
  11. 10C++ 名称还原器
    1. 10.1 调用 C++ 名称还原器
    2. 10.2 C++ 名称还原器的示例用法
  12.   A 术语表
    1.     A.1 术语
  13.   B 修订历史记录
  14.   491
  15.   492
  16.   B 早期修订版本

术语

    别名消歧

    一种决定两个指针表达式何时不能指向同一位置的技术,从而允许编译器自由地优化此类表达式。

    别名使用

    以多种方式访问单个对象的能力,例如当两个指针指向单个对象时。其会破坏优化,这是因为任何间接引用都可能引用任何其它对象。

    分配

    链接器计算输出段最终存储器地址的过程。

    ANSI

    美国国家标准协会;一个建立行业自愿遵循的标准的组织。

    应用程序二进制接口 (ABI)

    一项指定两个目标模块之间接口的标准。ABI 规定了如何调用函数以及如何将信息从一个程序组件传递到另一个程序组件。

    存档库

    由归档器将单独文件组合成单个文件的集合。

    归档器

    将多个单独文件集合成一个单个文件(称为存档库)的软件程序。借助归档器,可以添加、删除、提取或替换存档库的成员。

    汇编器

    根据包含汇编语言指令、指示和宏定义的源文件创建机器语言程序的软件程序。汇编器将绝对操作码替换为符号操作码,并将绝对地址或可重定位地址替换为符号地址。

    赋值语句

    用值来初始化变量的语句。

    自动初始化

    在程序开始执行之前,初始化全局 C 变量(包含在 .cinit 段中)的过程。

    运行时的自动初始化

    链接器在链接 C 代码时使用的自动初始化方法。在使用 --rom_model 链接选项调用链接器时,链接器会使用此方法。链接器将数据表的 .cinit 段加载到内存中,并在运行时初始化变量。

    大端

    一种寻址协议,字中的字节从左至右进行编号。字中较高的有效字节存放在低地址处。字节序视硬件而定,并在复位时确定。另请参阅小端

    一组在大括号内组合在一起并被视为实体的语句。

    .bss 段[.bss section]

    默认的目标文件段之一。使用汇编器 .bss 指令在存储器映射中保留指定量的空间,以便稍后用于存储数据。.bss 段未被初始化。

    字节

    根据 ANSI/ISO C,可容纳一个字符的最小可寻址单元。

    C/C++ 编译器

    一种将 C 源语句转换成汇编语言源语句的软件程序。

    代码生成器

    一种编译器工具,采用解析器和优化器生成的文件并生成汇编语言源文件。

    COFF

    通用目标文件格式;根据 AT&T 开发的标准配置的目标文件系统。不再支持该 ABI。

    命令文件

    包含链接器或十六进制转换实用程序的选项、文件名、指令或命令的文件。

    注释

    用于记录或提高源文件可读性的源语句(或源语句的一部分)。不对注释进行编译、汇编或链接;不会影响对象文件。

    编译器程序

    一种实用工具,可以一步完成编辑、汇编和选择性链接操作。通过编译器(包括解析器、优化器和代码生成器)、汇编器和链接器,编译器可以运行一个或多个源代码模块。

    配置内存

    链接器指定用于分配的存储器。

    常量

    其值不能改变的类型。

    交叉引用列表

    由汇编器创建的输出文件,其中列出了定义的符号、定义符号的行、引用符号的行以及符号的最终值。

    .data 段[.data section]

    默认的目标文件段之一。.data 段是包含初始化数据的初始化段。可以使用 .data 指令将代码汇编到 .data 段中。

    直接调用

    一种函数调用,其中一个函数使用函数名称调用另一函数。

    指令

    用于控制软件工具操作和功能的专用命令(与用于控制器件操作的汇编语言指令相反)。

    消歧

    请参阅别名消歧

    动态内存分配

    几个函数(如 malloc,calloc 和 realloc)在运行时为变量动态分配内存所使用的技术。这是通过定义较大的内存池(堆)并使用函数分配堆中的内存来实现。

    ELF

    可执行和可链接格式;根据系统V 应用程序二进制接口规范配置的目标文件系统。

    仿真器

    复制 TMS320C6000 运行的硬件开发系统。

    入口点

    目标存储器中的执行起点。

    环境变量

    由用户定义并分配给字符串的系统符号。环境变量通常包含在 Windows 批处理文件或 UNIX shell 脚本(例如 .cshrc 或 .profile)中。

    收尾程序

    函数中恢复堆栈并返回的代码部分。

    可执行目标文件

    在目标系统上下载并执行的可执行链接目标文件。

    表达式

    一个常量、一个符号或由算术运算符分隔的一系列常量和符号。

    外部符号

    一种在当前程序模块中使用但在其他程序模块中定义或声明的符号。

    文件级优化

    一种优化级别,编译程序使用其具有的有关整个文件的信息来优化代码(与程序级优化相反,编译程序使用其具有的有关整个程序的信息来优化代码)。

    函数内联

    在调用点为函数插入代码的过程。这节省了函数调用的开销,并允许优化器在周围代码的上下文中优化函数。

    全局符号

    一种在当前模块中定义并在另一模块中访问或者在当前模块中访问但在另一模块中定义的符号。

    高级别语言调试

    编译程序保留符号和高级别语言信息(如类型和函数定义)的能力,这样调试工具就可以使用此类信息。

    间接调用

    一种函数调用,其中一个函数通过给出被调用函数的地址来调用另一个函数。

    加载时初始化

    链接 C/C++ 代码时由链接器使用的自动初始化方法。在使用 --ram_model 链接选项调用时,链接器会使用此方法。此方法在加载时而不是运行时初始化变量。

    初始化段

    从目标文件中链接到可执行目标文件中的段。

    输入段

    从目标文件中链接到可执行目标文件中的段。

    集成预处理器

    与解析器合并的C/C++ 预处理器,以允许更快的编译。也可以使用独立的预处理或已预处理的列表。

    交叠特征

    一种将原始 C/C++ 源语句作为注释插入到汇编器的汇编语言输出中的特征。C/C++ 语句被会插入到等效汇编指令的旁边。

    内联函数

    像函数一样使用的运算符,可生成在 C 中无法表达或者需要更多时间和精力才能编写代码的汇编语言代码。

    ISO

    国际标准化组织;一个由国家标准机构组成的全球联合会,其制定了行业自愿遵循的国际标准。

    内核

    流水线循环序言和流水线循环结语之间的软件流水线循环主体。

    K&R C

    Kernighan 和 Ritchie C,在C 程序设计语言 (K&R) 第一版中定义的事实标准。大多数为早期非 ISO C 编译器编写的 K&R C 程序应该无需修改即可正确编译和运行。

    标签

    从汇编器源语句第 1 列开始并与该语句的地址相对应的符号。标签是唯一可以从第 1 列开始的汇编器语句。

    链接器

    一种将目标文件组合成可执行目标文件的软件程序,该文件可分配到系统内存中并由器件执行。

    列表文件

    由汇编器创建的输出文件,其中列出源语句、源语句的行号以及源语句对段程序计数器 (SPC) 的影响。

    小端

    一种寻址协议,字中的字节从右至左进行编号。字中较高的有效字节存放在高地址处。字节序视硬件而定,并在复位时确定。另请参阅大端字节序

    加载器

    一种将可执行目标文件放入系统内存的器件。

    循环展开

    一种扩展小循环的优化,使循环的每次迭代出现在代码中。虽然循环展开会增大代码大小,但可以提高代码性能。

    可用作指令的用户定义例程。

    宏调用

    调用宏的过程。

    宏定义

    定义组成宏的名称和代码的源语句块。

    宏扩展

    在代码中插入源语句以代替宏调用的过程。

    映射文件

    由链接器创建的输出文件,其中显示内存配置、段组成、段分配、符号定义以及为程序定义符号的地址。

    内存映射

    被划分为功能块的目标系统内存空间的映射。

    名称改编

    编译器专用特征,其使用有关函数参数返回类型的信息对函数名称进行编码。

    目标文件

    包含机器语言目标代码的汇编或链接文件。

    对象库

    由单个目标文件组成的存档库。

    操作数

    汇编语言指令、汇编器指令或宏指令的参数,为由指令或指示执行的操作提供信息。

    优化器

    可提高执行速度并减小 C 程序大小的软件工具。另请参阅汇编优化器

    选项

    允许您在调用软件工具时请求附加或特定函数的命令行参数。

    输出段

    可执行的已链接模块中的最终分配段。

    解析器

    一种读取源文件、执行预处理函数、检查语法,以及生成中间文件以用作优化器或代码生成器的输入的软件工具。

    分区

    为每条指令分配数据路径的过程。

    流水线

    一种在第一条指令完成之前就开始执行第二条指令的技术。流水线中可以有几条指令,每条指令处于不同的处理阶段。

    pop

    从堆栈中检索数据对象的操作。

    pragma

    一种指示编译器如何处理特殊语句的预处理器指令。

    预处理器

    一种解释宏定义、扩展宏、解释头文件、解释有条件编译以及对预处理器指令起作用的软件工具。

    程序级优化

    一种将所有源文件编译成一个中间文件的积极的优化级别。由于编译器可以看到整个程序,因此在程序级优化中执行了一些很少在文件级优化中应用的优化。

    序言

    函数中设置堆栈的代码部分。

    推入

    将数据对象放在堆栈上以进行临时存储的操作。

    无声运行

    用于抑制正常横幅和进度信息的选项。

    原始数据

    输出段中的可执行代码或初始化数据。

    重定位

    一种当符号的地址改变时由链接器调整对符号的所有引用的过程。

    运行时环境

    程序必须在其中运行的运行时参数。这些参数由内存和寄存器约定、堆栈组织、函数调用约定及系统初始化定义。

    运行时支持函数

    标准的 ISO 函数,执行不属于 C 语言的任务(比如内存分配、字符串转换和字符串搜索等)。

    运行时支持库

    库文件 rts.src,其包含运行时支持函数的源代码。

    一个可重定位的代码块或数据块,最终将与内存映射中的其他段接续。

    符号扩展

    用值的符号位来填充该值未使用的 MSB 的过程。

    软件流水线

    C/C++ 优化器使用的一种技术,用于调度循环中的指令以使循环的多个迭代并行执行。

    源文件

    一种包含C/C++ 代码或汇编语言代码的文件,该代码经编译或汇编后形成目标文件。

    独立预处理器

    一种将宏、#include 文件和条件编译扩展为独立程序的软件工具。其还执行集成预处理,包括解析指令。

    静态变量

    范围局限在一个函数或程序内的一种变量。当函数或程序退出时,静态变量的值不会被丢弃;当重新输入函数或程序时,将恢复其之前的值。

    存储类

    符号表中指示如何访问符号的条目。

    字符串表

    存储长度超过八个字符的符号名称的表(长度为八个字符或更长的符号名称不能存储在符号表中,而是存储在字符串表中)。符号入口点的名称部分指向字符串表中字符串的位置。

    子段

    一个可重定址的代码块或数据块,最终将占用存储器映射中的连续空间。子段为较大段中的小段。子段使用户能够更严格地控制存储器映射。

    符号

    表示地址或值的字母数字字符串。

    符号调试

    软件工具的能力,用于保留可供仿真器等调试工具使用的符号信息。

    目标系统

    执行其上开发了目标代码的系统。

    .text 段

    默认的目标文件段之一。.text 段被初始化并包含可执行代码。可以使用 .text 指令将代码汇编到 .text 段中。

    三字符序列

    具有某种含义的3 字符序列(由 ISO 646-1983 不变代码集定义)。这些字符不能在 C 字符集中表示,而是扩展为一个字符。例如,三个字符 ??' 扩展为 ^。

    循环计数

    循环结束前执行的次数。

    未配置的内存

    未定义为存储器映射的一部分,且无法加载代码或数据的存储器。

    未初始化段

    在存储器映射中保留空间但没有实际内容的目标文件段。这些段是使用.bss 和 .usect 指令创建的。

    无符号值

    无论实际符号如何都会被当作非负数的值。

    目标内存中的 32 位可寻址位置。