ZHCU820Y September   2004  – June 2021

 

  1. 1请先阅读
    1. 1.1 关于本手册
    2. 1.1 标记规则
    3. 1.1 相关文档
    4. 1.1 德州仪器 (TI) 提供的相关文档
    5. 1.1 商标
  2. 1软件开发工具简介
    1. 1.1 软件开发工具概述
    2. 1.2 编译器接口
    3. 1.3 ANSI/ISO 标准
    4. 1.4 输出文件
    5. 1.5 实用程序
  3. 2使用 C/C++ 编译器
    1. 2.1  关于编译器
    2. 2.2  调用 C/C++ 编译器
    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  更改编译器解释文件名的方式
      8. 2.3.8  更改编译器处理 C 文件的方式
      9. 2.3.9  更改编译器解释和命名扩展名的方式
      10. 2.3.10 指定目录
      11. 2.3.11 汇编器选项
      12. 2.3.12 已弃用的选项
    4. 2.4  通过环境变量控制编译器
      1. 2.4.1 设置默认编译器选项 (MSP430_C_OPTION)
      2. 2.4.2 命名一个或多个备用目录 (MSP430_C_DIR)
    5. 2.5  控制预处理器
      1. 2.5.1  预先定义的宏名称
      2. 2.5.2  #include 文件的搜索路径
        1. 2.5.2.1 将目录添加到 #include 文件搜索路径(--include_path 选项)
      3. 2.5.3  支持#warning 和 #warn 指令
      4. 2.5.4  生成预处理列表文件(--preproc_only 选项)
      5. 2.5.5  预处理后继续编译(--preproc_with_compile 选项)
      6. 2.5.6  生成带有注释的预处理列表文件(--preproc_with_comment 选项)
      7. 2.5.7  生成带有行控制详细信息的预处理列表(--preproc_with_line 选项)
      8. 2.5.8  为 Make 实用程序生成预处理输出(--preproc_dependency 选项)
      9. 2.5.9  生成包含#include在内的文件列表(--preproc_includes 选项)
      10. 2.5.10 在文件中生成宏列表(--preproc_macros 选项)
    6. 2.6  将参数传递给 main()
    7. 2.7  了解诊断消息
      1. 2.7.1 控制诊断消息
      2. 2.7.2 如何使用诊断抑制选项
    8. 2.8  其他消息
    9. 2.9  生成交叉引用列表信息(--gen_cross_reference 选项)
    10. 2.10 生成原始列表文件(--gen_preprocessor_listing 选项)
    11. 2.11 使用内联函数扩展
      1. 2.11.1 内联内在函数运算符
      2. 2.11.2 内联限制
    12. 2.12 使用交叉列出功能
    13. 2.13 控制应用程序二进制接口
    14. 2.14 启用入口挂钩和出口挂钩函数
  4. 3优化您的代码
    1. 3.1  调用优化
    2. 3.2  控制代码大小与速度
    3. 3.3  执行文件级优化(--opt_level=3 选项)
      1. 3.3.1 创建优化信息文件(--gen_opt_info 选项)
    4. 3.4  程序级优化(--program_level_compile 和 --opt_level=3 选项)
      1. 3.4.1 控制程序级优化(--call_assumptions 选项)
      2. 3.4.2 混合 C/C++ 和汇编代码时的优化注意事项
    5. 3.5  自动内联扩展(--auto_inline 选项)
    6. 3.6  链接时优化(--opt_level=4 选项)
      1. 3.6.1 选项处理
      2. 3.6.2 不兼容的类型
    7. 3.7  使用反馈制导优化
      1. 3.7.1 反馈向导优化
        1. 3.7.1.1 第 1 阶段 - 收集程序分析信息
        2. 3.7.1.2 第 2 阶段 - 使用应用程序分析信息进行优化
        3. 3.7.1.3 生成和使用配置文件信息
        4. 3.7.1.4 反馈制导优化的应用示例
        5. 3.7.1.5 .ppdata 段
        6. 3.7.1.6 反馈制导优化和代码大小调整
        7. 3.7.1.7 检测程序执行开销
        8. 3.7.1.8 无效的分析数据
      2. 3.7.2 分析数据解码器
      3. 3.7.3 反馈制导优化 API
      4. 3.7.4 反馈制导优化总结
    8. 3.8  使用配置文件信息分析代码覆盖率
      1. 3.8.1 代码覆盖
        1. 3.8.1.1 第 1 阶段 - 收集程序分析信息
        2. 3.8.1.2 第 2 阶段 -- 生成代码覆盖信息报告
      2. 3.8.2 相关的特征和功能
        1. 3.8.2.1 路径分析器
        2. 3.8.2.2 分析选项
        3. 3.8.2.3 环境变量
    9. 3.9  访问优化代码中的别名变量
    10. 3.10 在优化代码中谨慎使用 asm 语句
    11. 3.11 将交叉列出功能与优化一起使用
    12. 3.12 调试优化代码
    13. 3.13 正在执行什么类型的优化?
      1. 3.13.1  基于成本的寄存器分配
      2. 3.13.2  别名消歧
      3. 3.13.3  分支优化和控制流简化
      4. 3.13.4  数据流优化
      5. 3.13.5  表达式简化
      6. 3.13.6  函数的内联扩展
      7. 3.13.7  函数符号别名
      8. 3.13.8  归纳变量和强度降低
      9. 3.13.9  循环不变量代码运动
      10. 3.13.10 循环旋转
      11. 3.13.11 指令排程
      12. 3.13.12 尾部合并
      13. 3.13.13 用常数除数进行整数除法
  5. 4链接 C/C++ 代码
    1. 4.1 通过编译器调用链接器(-z 选项)
      1. 4.1.1 单独调用链接器
      2. 4.1.2 调用链接器作为编译步骤的一部分
      3. 4.1.3 禁用链接器(--compile_only 编译器选项)
    2. 4.2 链接器代码优化
      1. 4.2.1 条件链接
      2. 4.2.2 生成聚合数据子段(--gen_data_subsections 编译器选项)
    3. 4.3 控制链接过程
      1. 4.3.1 包含运行时支持库
        1. 4.3.1.1 自动选择运行时支持库
          1. 4.3.1.1.1 使用 --issue_remarks 选项
        2. 4.3.1.2 手动选择运行时支持库
        3. 4.3.1.3 用于搜索符号的库顺序
      2. 4.3.2 运行时初始化
      3. 4.3.3 通过中断向量进行初始化
      4. 4.3.4 FRAM 内存保护单元的初始化
      5. 4.3.5 Cinit 的初始化和看门狗计时器保持
      6. 4.3.6 全局对象构造函数
      7. 4.3.7 指定全局变量初始化类型
      8. 4.3.8 指定在内存中分配段的位置
      9. 4.3.9 链接器命令文件示例
  6. 5C/C++ 语言实现
    1. 5.1  MSP430 C 的特征
      1. 5.1.1 实现定义的行为
    2. 5.2  MSP430 C++ 的特征
    3. 5.3  使用 ULP Advisor
    4. 5.4  关于硬件配置的建议
    5. 5.5  数据类型
      1. 5.5.1 枚举类型大小
    6. 5.6  文件编码和字符集
    7. 5.7  关键字
      1. 5.7.1 const 关键字
      2. 5.7.2 __interrupt 关键字
      3. 5.7.3 restrict 关键字
      4. 5.7.4 volatile 关键字
    8. 5.8  C++ 异常处理
    9. 5.9  寄存器变量和参数
    10. 5.10 __asm 语句
    11. 5.11 pragma 指令
      1. 5.11.1  BIS_IE1_INTERRUPT
      2. 5.11.2  CALLS Pragma
      3. 5.11.3  CHECK_ULP Pragma
      4. 5.11.4  CODE_ALIGN Pragma
      5. 5.11.5  CODE_SECTION Pragma
      6. 5.11.6  DATA_ALIGN Pragma
      7. 5.11.7  DATA_SECTION Pragma
        1. 5.11.7.1 使用 DATA_SECTION Pragma C 源文件
        2. 5.11.7.2 使用 DATA_SECTION Pragma C++ 源文件
        3. 5.11.7.3 使用 DATA_SECTION Pragma 汇编源文件
      8. 5.11.8  诊断消息 Pragma
      9. 5.11.9  FORCEINLINE Pragma
      10. 5.11.10 FORCEINLINE_RECURSIVE Pragma
      11. 5.11.11 FUNC_ALWAYS_INLINE Pragma
      12. 5.11.12 FUNC_CANNOT_INLINE Pragma
      13. 5.11.13 FUNC_EXT_CALLED Pragma
      14. 5.11.14 FUNC_IS_PURE Pragma
      15. 5.11.15 FUNC_NEVER_RETURNS Pragma
      16. 5.11.16 FUNC_NO_GLOBAL_ASG Pragma
      17. 5.11.17 FUNC_NO_IND_ASG Pragma
      18. 5.11.18 FUNCTION_OPTIONS Pragma
      19. 5.11.19 INTERRUPT Pragma
      20. 5.11.20 LOCATION Pragma
      21. 5.11.21 MUST_ITERATE Pragma
        1. 5.11.21.1 MUST_ITERATE Pragma 语法
        2. 5.11.21.2 使用 MUST_ITERATE 扩展编译器对循环的了解
      22. 5.11.22 NOINIT 和 PERSISTENT Pragma
      23. 5.11.23 NOINLINE Pragma
      24. 5.11.24 NO_HOOKS Pragma
      25. 5.11.25 once Pragma
      26. 5.11.26 pack Pragma
      27. 5.11.27 PROB_ITERATE Pragma
      28. 5.11.28 RESET_ULP Pragma
      29. 5.11.29 RETAIN Pragma
      30. 5.11.30 SET_CODE_SECTION 和 SET_DATA_SECTION Pragma
      31. 5.11.31 UNROLL Pragma
      32. 5.11.32 vector Pragma
      33. 5.11.33 WEAK Pragma
    12. 5.12 _Pragma 运算符
    13. 5.13 应用程序二进制接口
    14. 5.14 目标文件符号命名规则(链接名)
    15. 5.15 更改 ANSI/ISO C/C++ 语言模式
      1. 5.15.1 C99 支持 (--c99)
      2. 5.15.2 C11 支持 (--c11)
      3. 5.15.3 严格 ANSI 模式和宽松 ANSI 模式(--strict_ansi 和 --relaxed_ansi)
    16. 5.16 GNU 和 Clang 语言扩展
      1. 5.16.1 扩展
      2. 5.16.2 函数属性
      3. 5.16.3 For 循环属性
      4. 5.16.4 变量属性
      5. 5.16.5 类型属性
      6. 5.16.6 内置函数
    17. 5.17 编译器限制
  7. 6运行时环境
    1. 6.1  内存模型
      1. 6.1.1 代码内存模型
      2. 6.1.2 数据存储器模式
      3. 6.1.3 支持近数据
      4. 6.1.4
      5. 6.1.5 C/C++ 软件堆栈
      6. 6.1.6 动态内存分配
    2. 6.2  对象表示
      1. 6.2.1 数据类型存储
        1. 6.2.1.1 指向成员函数类型的指针
        2. 6.2.1.2 结构和数组对齐
        3. 6.2.1.3 字段/结构对齐
        4. 6.2.1.4 var 的 C 代码定义
      2. 6.2.2 字符串常量
    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  将 C 和 C++ 与汇编语言相连
      1. 6.6.1 使用汇编语言模块与 C/C++ 代码
      2. 6.6.2 从 C/C++ 访问汇编语言函数
        1. 6.6.2.1 从 C/C++ 程序调用汇编语言函数
        2. 6.6.2.2 Topic Link Label1 调用的汇编语言程序
        3.       227
      3. 6.6.3 从 C/C++ 访问汇编语言变量
        1. 6.6.3.1 访问汇编语言全局变量
          1. 6.6.3.1.1 汇编语言变量程序
          2. 6.6.3.1.2 C 程序从 Topic Link Label1 中访问汇编语言
        2.       232
        3. 6.6.3.2 访问汇编语言常量
          1. 6.6.3.2.1 从 C 语言访问汇编语言常量
          2. 6.6.3.2.2 Topic Link Label1 的汇编语言程序
          3.        236
      4. 6.6.4 与汇编源代码共享 C/C++ 头文件
      5. 6.6.5 使用内联汇编语言
    7. 6.7  中断处理
      1. 6.7.1 在中断期间保存寄存器
      2. 6.7.2 使用 C/C++ 中断例程
        1.       242
      3. 6.7.3 使用汇编语言中断例程
      4. 6.7.4 中断向量
      5. 6.7.5 其他中断信息
    8. 6.8  使用内在函数访问汇编语言语句
      1. 6.8.1 MSP430 内在函数
      2. 6.8.2 Floating Point Conversion Intrinsics
      3. 6.8.3 弃用的内在函数
      4. 6.8.4 __delay_cycle 内在函数
      5. 6.8.5 __never_executed 内在函数
        1. 6.8.5.1 将 __never_executed 与矢量发生器搭配使用
          1. 6.8.5.1.1 TBIV 矢量发生器
          2.        254
        2. 6.8.5.2 将 __never_executed 与通用 Switch 表达式搭配使用
          1. 6.8.5.2.1 通用 Switch 语句
          2.        257
    9. 6.9  系统初始化
      1. 6.9.1 用于系统预初始化的引导挂钩函数
      2. 6.9.2 运行时栈
      3. 6.9.3 变量的自动初始化
        1. 6.9.3.1 零初始化变量
        2. 6.9.3.2 的直接初始化
        3. 6.9.3.3 在 运行时自动初始化变量
        4. 6.9.3.4 的自动初始化表
          1. 6.9.3.4.1 数据格式遵循的长度
          2. 6.9.3.4.2 零初始化格式
          3. 6.9.3.4.3 行程编码 (RLE) 格式
          4. 6.9.3.4.4 Lempel-Ziv-Storer-Szymanski 压缩 (LZSS) 格式
        5. 6.9.3.5 在加载时初始化变量
        6. 6.9.3.6 全局构造函数
      4. 6.9.4 初始化表
    10. 6.10 对 20 位 MSP430X 器件的编译
  8. 7使用运行时支持函数并构建库
    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 源码树中的非标准头文件
      9. 7.1.9 库命名规则
    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.       308
        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 来自其他供应商的库
  9. 8C++ 名称还原器
    1. 8.1 调用 C++ 名称还原器
    2. 8.2 C++ 名称还原器的示例用法
      1.      A 术语表
        1.       A.1 术语
          1.        B 修订历史记录

使用选项更改编译器的行为

选项控制编译器的运行。本部分说明选项约定和选项摘要表。此外,还提供最常用选项(包括用于类型检查和汇编的选项)的详细说明。

如需查看选项的帮助屏幕摘要,请在命令行上输入不带参数的 cl430

下述原则适用于编译器选项:

  • 通常有两种方法来指定给定的选项。“长格式”使用两个连字符前缀,通常是更具描述性的名称。“短格式”使用单个连字符前缀以及并不总是直观的字母与数字的组合。
  • 选项通常区分大小写。
  • 单个选项不能组合。
  • 带参数的选项应在参数前用等号指定,以清楚地将参数与选项关联起来。例如,用于取消定义常量的选项可以表示为 --undefine=name。同样,用于指定最大优化量的选项可以表示为 -O=3。还可以在某些选项后直接指定参数,例如 -O3 与 -O=3 相同。选项与可选参数之间不允许有空格,因此不接受 -O 3。
  • 文件和除 --run_linker 选项外的选项可以按任何顺序出现。--run_linker 选项必须跟在所有编译器选项之后且在任何链接器选项之前。

可以使用 MSP430_C_OPTION 环境变量为编译器定义默认选项。有关环境变量的详细说明,请参阅Topic Link Label3.4.1

表 3-8表 3-29 汇总了所有选项(包括链接选项)。使用表中的参考资料以获取更完整的选项说明。

表 2-1 处理器选项
选项 别名 效果
--silicon_version={msp|mspx} -v 选择指令集。 Topic Link Label3.3.4
--code_model={small|large} 指定代码内存模型。 Topic Link Label7.1.1
--data_model={small|large|
restricted}
指定数据内存模型。 Topic Link Label7.1.2
--near_data={globals|none} 指定必须靠近的数据。默认为 globals。 Topic Link Label7.1.3
表 2-2 优化选项(1)
选项 别名 效果
--opt_level=off 禁用所有优化。 Topic Link Label4.1
--opt_level=n -On 级别 0 (-O0) 仅优化寄存器使用情况(如果未使用选项,则为默认值)
级别 1 (-O1) 使用级别 0 优化并在本地进行优化。
级别 2 (-O2) 使用级别 1 优化并在本地进行优化。
级别 3 (-O3) 使用级别 2 优化并对文件进行优化。
级别 4 (-O4) 使用级别 3 优化并执行链接时间优化。
Topic Link Label4.1Topic Link Label4.3Topic Link Label4.6
--opt_for_speed[=n] -mf 控制大小和速度之间的权衡(0-5 范围)。如果此选项未指定 n,则默认值为 4。如果未指定此选项,则默认设置为 1。 Topic Link Label4.2
注意:机器专用选项(参阅表 3-14)也会影响优化。
表 2-3 高级优化选项(1)
选项 别名 效果
--align_for_power 将所有函数和循环与 4 字节边界对齐。如果小函数或循环与32 位缓冲区对齐以从闪存中获取代码,则可以实现节能。对于较大的函数和循环,节能就不太重要。 --
--auto_inline=[size] -oi 设置自动内联大小(仅限 --opt_level=3)。如果未指定 size,则默认值为 1。 Topic Link Label4.5
--call_assumptions=n -opn 级别 0 (-op0) 指定了模块包含从提供给编译器的源代码外部调用或修改的函数和变量。
级别 1 (-op1) 指定了模块包含从提供给编译器的源代码外部修改的变量,但不使用从源代码外部调用的函数。
级别 2 (-op2) 指定了模块不包含从提供给编译器的源代码外部调用或修改的函数或变量(默认值)。
级别 3 (-op3) 指定了模块包含从提供给编译器的源代码外部调用的函数,但不使用从源代码外部修改的变量。
Topic Link Label4.4.1
--disable_inlining 防止发生任何内联。 Topic Link Label3.11
--fp_mode={relaxed|strict} 启用或禁用宽松浮点模式。 Topic Link Label3.3.3
--fp_reassoc={on|off} 启用或禁用浮点算术的重新关联。 Topic Link Label3.3.3
--gen_opt_info=n -onn 级别 0 (-on0) 禁用优化信息文件。
级别 1 (-on2) 生成优化信息文件。
级别 2 (-on2) 生成详细的优化信息文件。
Topic Link Label4.3.1
--optimizer_interlist -os 交叉列出优化器注释与汇编语句。 Topic Link Label4.11
--program_level_compile -pm 组合源文件以执行程序级优化。 Topic Link Label4.4
--aliased_variables -ma 假设变量被别名 Topic Link Label4.9
注意:机器专用选项(参阅表 3-14)也会影响优化。
表 2-4 调试选项
选项 别名 效果
--symdebug:dwarf -g 默认行为。启用符号调试。调试信息的生成不会影响优化。因此,默认情况下会生成调试信息。 Topic Link Label3.3.5
Topic Link Label4.12
--symdebug:dwarf_version=2|3|4 指定 DWARF 格式版本。 Topic Link Label3.3.5
--symdebug:none 禁用所有符号调试。 Topic Link Label3.3.5
Topic Link Label4.12
--symdebug:skeletal (已弃用;无效。)
表 2-5 Include 选项
选项 别名 效果
--include_path=directory -I 将指定的目录添加到 #include 搜索路径。 Topic Link Label3.5.2.1
--preinclude=filename 在编译开始时包含 filename Topic Link Label3.3.3
表 2-6 ULP顾问选项
选项 别名 效果
--advice:power[={all|none|rulespec}] 启用检查指定的 ULP Advisor 规则。(默认为 all。) Topic Link Label3.3.3
--advice:power_severity={error|
warning|remark|suppress}
设置 ULP Advisor 规则的诊断严重程度。 Topic Link Label3.3.3
表 2-7 硬件配置顾问选项
选项 别名 效果
--advice:hw_config[={all|none| rulespec} 启用查检器件配置设置。(如果此选项未包含在命令行中,则默认为 none。如果使用此选项但未指定值,则默认为 all。) Topic Link Label3.3.3
表 2-8 控制选项
选项 别名 效果
--compile_only -c 禁用链接(否定 --run_linker)。 Topic Link Label5.1.3
--help -h 打印(在标准输出设备上)编译器理解的选项的说明。 Topic Link Label3.3.2
--run_linker -z 导致从编译器命令行调用链接器。 Topic Link Label3.3.2
--skip_assembler -n 编译 C/C++ 源文件,从而生成汇编语言输出文件。汇编器不会运行,也不会生成目标文件。 Topic Link Label3.3.2
表 2-9 语言选项
选项 别名 效果
--c89 根据 ISO C89 标准处理 C 文件。 Topic Link Label6.15
--c99 根据 ISO C99 标准处理 C 文件。 Topic Link Label6.15
--c11 根据 ISO C11 标准处理 C 文件。 Topic Link Label6.15
--c++14 根据 ISO C++14 标准处理 C++ 文件。
已弃用 --c++03 选项。
Topic Link Label6.15
--cpp_default -fg 将所有带有 C 扩展名的源文件作为 C++ 源文件处理。 Topic Link Label3.3.7
--enum_type={packed|unpacked} 选择是否使用紧凑整数类型来存储小型枚举类型。 Topic Link Label3.3.4
--exceptions 启用 C++ 异常处理。 Topic Link Label6.8
--extern_c_can_throw 允许外部 C 函数传播异常。 --
--float_operations_allowed
={none|all|32|64}
限制允许的浮点运算类型。 Topic Link Label3.3.3
--gen_cross_reference -px 生成交叉引用列表文件 (.crl)。 Topic Link Label3.9
--pending_instantiations=# 指定在任何给定时间可能正在进行的模板实例化的数量。使用 0 来指定无限数量。 Topic Link Label3.3.4
--plain_char={signed|unsigned} -mc 将字符类型的变量从无符号更改为有符号。默认为无符号。 Topic Link Label3.3.4
--printf_support={nofloat|full|
minimal}
支持小型且版本受限的 printf 函数系列(sprintf、fprintf 等)和 scanf 函数系列(sscanf、fscanf 等)运行时支持函数的支持。 Topic Link Label3.3.3
--relaxed_ansi -pr 启用宽松模式;忽略严格的 ISO 违规。默认设置为 on。要禁用此模式,请使用 --strict_ansi 选项。 Topic Link Label6.15.3
--rtti -rtti 启用 C++ 运行时类型信息 (RTTI)。 –-
--strict_ansi -ps 启用严格的 ANSI/ISO 模式(适用于 C/C++,不适用于 K&R C)。在此模式下,禁用与 ANSI/ISO C/C++ 冲突的语言扩展。在严格的 ANSI/ISO 模式下,大多数 ANSI/ISO 违规都会报告为错误。被视为酌情处理的违规行为可能会报告为警告。 Topic Link Label6.15.3
表 2-10 解析器预处理选项
选项 别名 效果
--preproc_dependency[=filename] -ppd 仅执行预处理,但不写入预处理的输出,而是写入适合于输入到标准 make 实用程序的依赖行列表。 Topic Link Label3.5.8
--preproc_includes[=filename] -ppi 仅执行预处理,但不写入预处理的输出,而是写入 #include 指令中包含的文件列表。 Topic Link Label3.5.9
--preproc_macros[=filename] -ppm 仅执行预处理。将预定义和用户定义的宏列表写入与输入同名但扩展名为 .pp 的文件。 Topic Link Label3.5.10
--preproc_only -ppo 仅执行预处理。将预处理的输出写入与输入同名但扩展名为 .pp 的文件。 Topic Link Label3.5.4
--preproc_with_comment -ppc 仅执行预处理。将预处理的输出(保留注释)写入与输入同名但扩展名为 .pp 的文件。 Topic Link Label3.5.6
--preproc_with_compile -ppa 使用任何通常会禁用编译的 -pp<x> 选项在预处理后继续编译。 Topic Link Label3.5.5
--preproc_with_line -ppl 仅执行预处理。将带有行控制信息(#line 指令)的预处理的输出写入与输入同名但扩展名为 .pp 的文件。 Topic Link Label3.5.7
表 2-11 预定义宏选项
选项 别名 效果
--define=name[=def] -D 预定义 name Topic Link Label3.3.2
--undefine=name -U 未定义 name Topic Link Label3.3.2
表 2-12 诊断消息选项
选项 别名 效果
--compiler_revision 打印出编译器发布版本并退出。 --
--diag_error=num -pdse num 标识的诊断分类为错误。 Topic Link Label3.7.1
--diag_remark=num -pdsr num 标识的诊断分类为备注。 Topic Link Label3.7.1
--diag_suppress=num -pds 抑制 num 标识的诊断。 Topic Link Label3.7.1
--diag_warning=num -pdsw num 标识的诊断分类为警告。 Topic Link Label3.7.1
--diag_wrap={on|off} 使诊断消息换行(默认为 on)。请注意,此命令行选项不能在 Code Composer Studio IDE 中使用。
--display_error_number -pden 显示诊断的标识符及其文本。请注意,此命令行选项不能在 Code Composer Studio IDE 中使用。 Topic Link Label3.7.1
--emit_warnings_as_errors -pdew 将警告视为错误。 Topic Link Label3.7.1
--gen_func_info_listing 生成用户信息文件 (.aux)。 Topic Link Label3.3.2
--issue_remarks -pdr 发出备注(非严重警告)。 Topic Link Label3.7.1
--no_warnings -pdw 抑制诊断警告(仍会发出错误)。 Topic Link Label3.7.1
--quiet -q 抑制进度消息(静默)。 --
--set_error_limit=num -pdel 将错误限制设置为 num。在在错误达到这个数量后,编译器放弃编译。(默认为 100。) Topic Link Label3.7.1
--super_quiet -qq 超级静默模式。 --
--tool_version -version 显示每个工具的版本号。 --
--verbose 显示横幅和函数进度信息。 --
--verbose_diagnostics -pdv 提供详细的诊断消息,以自动换行的方式显示原始源代码。请注意,此命令行选项不能在 Code Composer Studio IDE 中使用。 Topic Link Label3.7.1
--write_diagnostics_file -pdf 生成诊断消息信息文件。编译器唯一选项。请注意,此命令行选项不能在 Code Composer Studio IDE 中使用。 Topic Link Label3.7.1
表 2-13 补充信息选项
选项 别名 效果
--gen_preprocessor_listing -pl 生成原始列表文件 (.rl)。 Topic Link Label3.10
--section_sizes={on|off} 生成段大小信息,包括含可执行代码和常量、常量或初始化数据(全局和静态变量)以及未初始化数据的段的大小。(如果此选项未包含在命令行中,则默认为 off。如果使用此选项但未指定值,则默认为 on。) Topic Link Label3.7.1
表 2-14 运行时模型选项
选项 别名 效果
--common={on|off} 默认为 on。设置为 on 时,未初始化的文件范围变量作为通用符号发出。设置为 off 时,不会创建通用符号。 Topic Link Label3.3.4
--disable_interrupts_around_hw_mpy=off 将此选项设置为 off 会在内联的硬件乘法运算期间使中断启用。仅当所有 ISR 不使用乘法或调用其他函数时才能使用此选项。 Topic Link Label3.3.4
--gen_data_subsections={on|off} 将所有聚合数据(数组、结构和联合体)放入子段中。这使得链接器可以更好地控制在最终链接步骤期间删除未使用的数据。有关默认设置的详细信息,请参阅右侧的链接。 Topic Link Label5.2.2
--global_register={r4|r5} 保留寄存器供用户使用。
--large_memory_model -ml 在编译MSP430X 时使用大型内存模型。(已弃用) Topic Link Label3.3.4
--ramfunc={on|off} 如果设置为 on,则指定所有函数都应放置在 RAM 中的 .TI.ramfunc 段中。 Topic Link Label3.3.4
--silicon_errata={errata} 生成代码以处理指定的芯片勘误表。errata 值可以是 CPU12、CPU13、CPU15、CPU18、CPU19、CPU21、CPU22、CPU23 或 CPU40。有关详细信息,请参阅相应的器件勘误表。
--use_hw_mpy[={16|32|F5|none}] 如果 --opt_for_speed 设置为 1 或更高,则将所有对默认整数/长型乘法例程的引用替换为采用硬件乘法器支持的乘法例程版本。此外,如果 --opt_for_speed 设置为 4 或 5,则在代码生成期间内联硬件乘法。 Topic Link Label3.3.4
表 2-15 入口/出口挂钩选项
选项 别名 效果
--entry_hook[=name] 启用入口挂钩。 Topic Link Label3.14
--entry_parm={none|name|
address}
将函数的参数指定给 --entry_hook 选项。 Topic Link Label3.14
--exit_hook[=name] 启用出口挂钩。 Topic Link Label3.14
--exit_parm={none|name|address} 将函数的参数指定给 --exit_hook 选项。 Topic Link Label3.14
--remove_hooks_when_inlining 删除自动内联函数的入口/出口挂钩。 Topic Link Label3.14
表 2-16 反馈选项
选项 别名 效果
--analyze=codecov 从配置文件数据生成分析信息。 Topic Link Label4.8.2.2
--analyze_only 仅生成分析。 Topic Link Label4.8.2.2
--gen_profile_info 生成检测代码以收集配置文件信息。 Topic Link Label4.7.1.3
--use_profile_info=file1[, file2,...] 指定配置文件信息文件。 Topic Link Label4.7.1.3
表 2-17 汇编器选项
选项 别名 效果
--keep_asm -k 保留汇编语言 (.asm) 文件。 Topic Link Label3.3.11
--asm_listing -al 生成汇编列表文件。 Topic Link Label3.3.11
--c_src_interlist -ss 交叉列出 C 源代码和汇编语句。 Topic Link Label3.12
Topic Link Label4.11
--src_interlist -s 交叉列出优化器注释(如果可用)和汇编源语句;否则交叉列出 C 语言和汇编源语句。 Topic Link Label3.3.2
--absolute_listing -aa 启用绝对列表。 Topic Link Label3.3.11
--asm_define=name[=def] -ad 设置 name 符号。 Topic Link Label3.3.11
--asm_dependency -apd 执行预处理;仅列出程序集依赖项。 Topic Link Label3.3.11
--asm_includes -api 执行预处理;仅列出包含的 #include 文件。 Topic Link Label3.3.11
--asm_undefine=name -au 不对预定义的常量 name进行定义。 Topic Link Label3.3.11
--asm_listing_cross_reference -ax 生成交叉引用文件。 Topic Link Label3.3.11
--include_file=filename -ahi 包含汇编模块的指定文件。 Topic Link Label3.3.11
表 2-18 文件类型说明符选项
选项 别名 效果
--asm_file=filename -fa 不管其扩展名为何,都将 filename 标识为汇编源文件。默认情况下,编译器和汇编器将 .asm 文件视为汇编源文件。 Topic Link Label3.3.7
--c_file=filename -fc 不管其扩展名为何,都将 filename 标识为 C 源文件。默认情况下,编译器将 .c 文件视为 C 源文件。 Topic Link Label3.3.7
--cpp_file=filename -fp 不管其扩展名为何,都将 filename 标识为 C++ 文件。默认情况下,编译器将 .C、.cpp、.cc 和 .cxx 文件视为 C++ 文件。 Topic Link Label3.3.7
--obj_file=filename -fo 不管其扩展名为何,都将 filename 标识为目标代码文件。默认情况下,编译器和链接器将 .obj 文件视为目标代码文件,包括 *.c.obj 和 *.cpp.obj 文件。 Topic Link Label3.3.7
表 2-19 目录说明符选项
选项 别名 效果
--abs_directory=directory -fb 指定绝对列表文件目录。默认情况下,编译器使用目标文件目录。 Topic Link Label3.3.10
--asm_directory=directory -fs 指定汇编文件目录。默认情况下,编译器使用当前目录。 Topic Link Label3.3.10
--list_directory=directory -ff 指定汇编列表文件和交叉引用列表文件目录。默认情况下,编译器使用目标文件目录。 Topic Link Label3.3.10
--obj_directory=directory -fr 指定目标文件目录。默认情况下,编译器使用当前目录。 Topic Link Label3.3.10
--output_file=filename -fe 指定编译输出文件名;可以覆盖 --obj_directory。 Topic Link Label3.3.10
--pp_directory=dir 指定预处理器文件目录。默认情况下,编译器使用当前目录。 Topic Link Label3.3.10
--temp_directory=directory -ft 指定临时文件目录。默认情况下,编译器使用当前目录。 Topic Link Label3.3.10
表 2-20 默认文件扩展名选项
选项 别名 效果
--asm_extension=[.]extension -ea 设置汇编源文件的默认扩展名。 Topic Link Label3.3.9
--c_extension=[.]extension -ec 设置 C 源文件的默认扩展名。 Topic Link Label3.3.9
--cpp_extension=[.]extension -ep 设置 C++ 源文件的默认扩展名。 Topic Link Label3.3.9
--listing_extension=[.]extension -es 设置列表文件的默认扩展名。 Topic Link Label3.3.9
--obj_extension=[.]extension -eo 设置目标文件的默认扩展名。 Topic Link Label3.3.9
表 2-21 命令文件选项
选项 别名 效果
--cmd_file=filename -@ 将文件内容解释为命令行的扩展。可以使用多个 -@ 实例。 Topic Link Label3.3.2