51686A.book

Size: px
Start display at page:

Download "51686A.book"

Transcription

1 MPLAB C32 C 编译器用户指南 2008 Microchip Technology Inc. DS51686A_CN

2 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一 目前, 仍存在着恶意 甚至是非法破坏代码保护功能的行为 就我们所知, 所有这些行为都不是以 Microchip 数据手册中规定的操作规范来使用 Microchip 产品的 这样做的人极可能侵犯了知识产权 Microchip 愿与那些注重代码完整性的客户合作 Microchip 或任何其他半导体厂商均无法保证其代码的安全性 代码保护并不意味着我们保证产品是 牢不可破 的 代码保护功能处于持续发展中 Microchip 承诺将不断改进产品的代码保护功能 任何试图破坏 Microchip 代码保护功能的行为均可视为违反了 数字器件千年版权法案 (Digital Millennium Copyright Act) 如果这种行为导致他人在未经授权的情况下, 能访问您的软件或其他受版权保护的成果, 您有权依据该法案提起诉讼, 从而制止这种行为 提供本文档的中文版本仅为了便于理解 请勿忽视文档中包含的英文部分, 因为其中提供了有关 Microchip 产品性能和使用情况的有用信息 Microchip Technology Inc. 及其分公司和相关公司 各级主管与员工及事务代理机构对译文中可能存在的任何差错不承担任何责任 建议参考 Microchip Technology Inc. 的英文原版文档 本出版物中所述的器件应用信息及其他类似内容仅为您提供便利, 它们可能由更新之信息所替代 确保应用符合技术规范, 是您自身应负的责任 Microchip 对这些信息不作任何明示或暗示 书面或口头 法定或其他形式的声明或担保, 包括但不限于针对其使用情况 质量 性能 适销性或特定用途的适用性的声明或担保 Microchip 对因这些信息及使用这些信息而引起的后果不承担任何责任 如果将 Microchip 器件用于生命维持和 / 或生命安全应用, 一切风险由买方自负 买方同意在由此引发任何一切伤害 索赔 诉讼或费用时, 会维护和保障 Microchip 免于承担法律责任, 并加以赔偿 在 Microchip 知识产权保护下, 不得暗中或以其他方式转让任何许可证 商标 Microchip 的名称和徽标组合 Microchip 徽标 Accuron dspic KEELOQ KEELOQ 徽标 MPLAB PIC PICmicro PICSTART PRO MATE rfpic 和 SmartShunt 均为 Microchip Technology Inc. 在美国和其他国家或地区的注册商标 FilterLab Linear Active Thermistor MXDEV MXLAB SEEVAL SmartSensor 和 The Embedded Control Solutions Company 均为 Microchip Technology Inc. 在美国的注册商标 Analog-for-the-Digital Age Application Maestro CodeGuard dspicdem dspicdem.net dspicworks dsspeak ECAN ECONOMONITOR FanSense In-Circuit Serial Programming ICSP ICEPIC Mindi MiWi MPASM MPLAB Certified 徽标 MPLIB MPLINK mtouch PICkit PICDEM PICDEM.net PICtail PIC 32 徽标 PowerCal PowerInfo PowerMate PowerTool REAL ICE rflab Select Mode Total Endurance UNI/O WiperLock 和 ZENA 均为 Microchip Technology Inc. 在美国和其他国家或地区的商标 SQTP 是 Microchip Technology Inc. 在美国的服务标记 在此提及的所有其他商标均为各持有公司所有 2008, Microchip Technology Inc. 版权所有 Microchip 位于美国亚利桑那州 Chandler 和 Tempe 与位于俄勒冈州 Gresham 的全球总部 设计和晶圆生产厂及位于美国加利福尼亚州和印度的设计中心均通过了 ISO/TS-16949:2002 认证 公司在 PIC MCU 与 dspic DSC KEELOQ 跳码器件 串行 EEPROM 单片机外设 非易失性存储器和模拟产品方面的质量体系流程均符合 ISO/TS :2002 此外, Microchip 在开发系统的设计和生产方面的质量体系也已通过了 ISO 9001:2000 认证 DS51686A_CN 第 ii 页 2008 Microchip Technology Inc.

3 目录 前言... 1 第 1 章语言相关信息 1.1 简介 主要内容 概述 文件命名约定 数据存储 预定义宏 属性和 Pragma 伪指令 命令行选项 通过命令行编译单个文件 通过命令行编译多个文件 第 2 章库环境 2.1 简介 主要内容 标准 I/O 弱函数 Helper 头文件 Multilib 第 3 章中断 3.1 简介 主要内容 指定中断处理函数 将中断处理函数与异常向量相关联 异常处理程序 第 4 章低级处理器控制 4.1 简介 主要内容 通用处理器头文件 处理器支持头文件 外设库函数 特殊功能寄存器访问 CP0 寄存器访问 配置位访问 Microchip Technology Inc. DS51686A_CN 第 iii 页

4 第 5 章编译器运行时环境 5.1 简介 主要内容 寄存器约定 堆栈使用 堆使用 函数调用约定 启动和初始化 默认链接描述文件的内容 RAM 函数 附录 A 实现定义的操作 A.1 简介 A.2 主要内容 A.3 概述 A.4 翻译 A.5 环境 A.6 标识符 A.7 字符 A.8 整型 A.9 浮点型 A.10 数组和指针 A.11 提示 A.12 结构 联合 枚举和位域 A.13 限定符 A.14 声明符 A.15 语句 A.16 预处理伪指令 A.17 库函数 A.18 架构 附录 B 开源许可 B.1 简介 B.2 通用公共许可证 B.3 BSD 许可证 B.4 Sun Microsystems 索引 全球销售及服务网点 DS51686A_CN 第 iv 页 2008 Microchip Technology Inc.

5 前言 客户须知 所有文档均会过时, 本文档也不例外 Microchip 的工具和文档将不断演变以满足客户的需求, 因此实际使用中有些对话框和 / 或工具说明可能与本文档所述之内容有所不同 请访问我们的网站 ( 获取最新文档 文档均标记有 DS 编号 该编号出现在每页底部的页码之前 DS 编号的命名约定为 DSXXXXXA, 其中 XXXXX 为文档编号, A 为文档版本 欲了解开发工具的最新信息, 请参考 MPLAB IDE 在线帮助 从 Help ( 帮助 ) 菜单选择 Topics ( 主题 ), 打开现有在线帮助文件列表 简介 文档编排 本章包含在使用 MPLAB C32 C 编译器之前需要了解的一般信息 本章讨论的内容包括 : 文档编排 本指南中使用的约定 推荐读物 Microchip 网站 开发系统变更通知客户服务 客户支持 文档版本历史 本文档介绍如何使用 MPLAB C32 C 编译器开发工具在目标电路板上仿真和调试固件 内容安排如下 : 第 1 章语言相关信息 讨论 MPLAB C32 C 编译器命令行的使用 属性 pragma 伪指令和数据表示 第 2 章库环境 讨论 MPLAB C32 C 库的使用 第 3 章中断 对中断处理进行概述 第 4 章低级处理器控制 讨论 PIC32MX 器件的低级寄存器和配置的访问 第 5 章编译器运行时环境 讨论 MPLAB C32 C 编译器的运行时环境 附录 A 实现定义的操作 讨论在 MPLAB C32 C 编译器中, 对于 实现定义的操作 所作的选择 附录 B 开源许可 简要介绍用于 MPLAB C32 C 编译器软件包某些部分的开源许可证 2008 Microchip Technology Inc. DS51686A_CN 第 1 页

6 本指南中使用的约定 本手册使用如下文档约定 : 文档约定 说明 涵义 示例 Arial 字体 : 斜体字 参考书目 MPLAB IDE User s Guide 需强调的文字... 仅有的编译器... 首字母大写 窗口 Output 窗口 对话框 Settings 对话框 菜单选项 选择 Enable Programmer 引号 窗口或对话框中的字段名 Save project before build 带右尖括号且有下划线的斜体 菜单路径 File>Save 文字 粗体字 对话框按钮 单击 OK 选项卡 单击 Power 选项卡 N Rnnnn verilog 格式的数, 其中 N 是 4 b0010, 2 hf1 数字总数, R 是进制数, n 是一个数字 尖括号 < > 括起的文字 键盘上的按键 按 <Enter>, <F1> Courier New 字体 : 常规 Courier New 源代码示例 #define START 文件名 autoexec.bat 文件路径 c:\mcc18\h 关键字 _asm, _endasm, static 命令行选项 -Opa+, -Opa- 位值 0, 1 常数 0xFF, A 斜体 Courier New 可变参数 file.o, 其中 file 可以是任一有效文件名 方括号 [ ] 可选参数 mcc18 [options] file [options] 花括号和竖线 :{ } 选择互斥参数 ; 或 选择 errorlevel {0 1} 省略号... 代替重复文字 var_name [, var_name...] 表示由用户提供的代码 void main (void) {... } DS51686A_CN 第 2 页 2008 Microchip Technology Inc.

7 前言 推荐读物 本用户指南介绍如何使用 MPLAB C32 C 编译器 下面列出了其他有用的文档 Microchip 提供了如下文档, 推荐将这些文档作为补充参考资料 Readme 文件关于 Microchip 工具的最新信息, 请阅读软件附带的相关 Readme 文件 (HTML 文件 ) 针对器件的文档 Microchip 网站上提供了许多描述 16 位器件功能和特性的文档, 其中包含 : 具体器件以及器件系列的数据手册 器件系列的参考手册 程序员参考手册 MPLAB C32 C Compiler Libraries (DS51685A) MPLAB C32 库和预编译目标文件的参考指南 其中列出了随 MPLAB C32 C 编译器提供的所有库函数, 以及它们详细的使用说明 PIC32MX Configuration Settings (PIC32MX 配置设置 ) 其中列出了 MPLAB C32 C 编译器的 #pragma config 所支持的 Microchip PIC32MS 器件的配置位设置 C 标准方面的信息 American National Standard for Information Systems Programming Language C. American National Standards Institute (ANSI), 11 West 42nd. Street, New York, New York, 此标准规定了用 C 语言编写程序的格式, 并对 C 程序进行了解释 其目的是提高 C 程序在多种计算机系统上的可移植性 可靠性 可维护性及执行效率 C 语言参考手册 Harbison, Samuel P. and Steele, Guy L., C A Reference Manual, 第四版, Prentice-Hall, Englewood Cliffs, N.J Kernighan, Brian W. and Ritchie, Dennis M., The C Programming Language, 第二版 Prentice Hall, Englewood Cliffs, N.J Kochan, Steven G., Programming In ANSI C, 修订版 Hayden Books, Indianapolis, Indiana Plauger, P.J., The Standard C Library, Prentice-Hall, Englewood Cliffs, N.J Van Sickle, Ted., Programming Microcontrollers in C, 第一版 LLH Technology Publishing, Eagle Rock, Virginia GCC 文档 Microchip Technology Inc. DS51686A_CN 第 3 页

8 MICROCHIP 网站 Microchip 网站 ( 为客户提供在线支持 客户可通过该网站方便地获取文件和信息 只要使用常用的因特网浏览器即可访问 网站提供以下信息 : 产品支持 数据手册和勘误表 应用笔记和示例程序 设计资源 用户指南以及硬件支持文档 最新的软件版本以及存档软件 一般技术支持 常见问题 (FAQ) 技术支持请求 在线讨论组以及 Microchip 顾问计划成员名单 Microchip 业务 产品选型和订购指南 最新 Microchip 新闻稿 研讨会和活动安排表 Microchip 销售办事处 代理商以及工厂代表列表 DS51686A_CN 第 4 页 2008 Microchip Technology Inc.

9 前言 开发系统变更通知客户服务 Microchip 的客户通知服务有助于客户了解 Microchip 产品的最新信息 注册客户可在他们感兴趣的某个产品系列或开发工具发生变更 更新 发布新版本或勘误表时, 收到电子邮件通知 欲注册, 请登录 Microchip 网站 点击 变更通知客户 (Customer Change Notification) 服务并按照注册说明完成注册 开发系统产品的分类如下 : 编译器 Microchip C 编译器及其他语言工具的最新信息, 包括 MPLAB C18 MPLAB C30 和 MPLAB C32 C 编译器 MPASM 和 MPLAB ASM30 汇编器 MPLINK 和 MPLAB LINK30 目标链接器 以及 MPLIB 和 MPLAB LIB30 目标库管理器 仿真器 Microchip 在线仿真器的最新信息, 包括 MPLAB REAL ICE 和 MPLAB ICE 2000 在线仿真器 在线调试器 Microchip 在线调试器的最新信息, 包括 MPLAB ICD 2 和 PICkit 2 MPLAB IDE 关于支持开发系统工具的 Windows 集成开发环境 Microchip MPLAB IDE 的最新信息, 主要针对 MPLAB IDE MPLAB IDE 项目管理器 MPLAB 编辑器 MPLAB SIM 模拟器以及一般的编辑和调试功能 编程器 Microchip 编程器的最新信息, 包括 MPLAB PM3 器件编程器以及 PICSTART Plus PICkit 1 和 PICkit 2 开发编程器 客户支持 Microchip 产品的用户可通过以下渠道获得帮助 : 代理商或代表 当地销售办事处 应用工程师 (FAE) 技术支持客户应联系其代理商 代表或应用工程师 (FAE) 寻求支持 当地销售办事处也可为客户提供帮助 本文档后附有销售办事处的联系方式 也可通过 获得网上技术支持 文档版本历史 版本 A (2007 年 10 月 ) 本文档的第一版 2008 Microchip Technology Inc. DS51686A_CN 第 5 页

10 注 : DS51686A_CN 第 6 页 2008 Microchip Technology Inc.

11 第 1 章语言相关信息 MPLAB C32 C 编译器用户指南 1.1 简介 本章讨论 MPLAB C32 C 编译器命令行的使用 属性 pragma 伪指令和数据表示 1.2 主要内容 本章讨论的内容包括 : 概述 文件命名约定 数据存储 预定义宏 属性和 Pragma 伪指令 命令行选项 通过命令行编译单个文件 通过命令行编译多个文件 1.3 概述 编译驱动程序 (pic32-gcc) 对 C 和汇编语言模块及库文件进行编译 汇编和链接 大多数编译器命令行选项对于 GCC 工具集的所有实现都是通用的 只有少数是专门针对 MPLAB C32 C 编译器的 编译器命令行的基本形式如下 : pic32-gcc [options] files 注 : 命令行选项和文件扩展名是区分大小写的 在第 1.8 节 命令行选项 中对可用的选项进行了描述 例如, 下面的命令行编译 汇编和链接 C 源文件 hello.c, 生成可执行文件 hello.out pic32-gcc -o hello.out hello.c 1.4 文件命名约定 编译驱动程序识别如下文件扩展名, 文件扩展名要区分大小写 表 1-1: 文件名 扩展名 定义 file.c 必须预处理的 C 源文件 file.h 头文件 ( 不对其进行编译或链接 ) file.i 已经过预处理的 C 源文件 file.o 目标文件 file.s 汇编语言源文件 2008 Microchip Technology Inc. DS51686A_CN 第 7 页

12 表 1-1: 文件名 ( 续 ) 扩展名 file.s 必须预处理的汇编语言源文件 其他 要传递给链接器的文件 定义 1.5 数据存储 存储尾数表示法 MPLAB C32 C 编译器以小尾数格式存储多字节值 即, 最低有效字节存储在最低地址 例如, 32 位值 0x 将从地址 0x100 处开始, 按如下形式存储 : 地址 0x100 0x101 0x102 0x103 数据 0x78 0x56 0x34 0x 整型表示 MPLAB C32 C 编译器中的整型值以 2 的补码形式表示, 长度为 8 到 64 位 这些值可在通过 limits.h 编译后的代码中使用 类型 位 最小值 最大值 char, signed char unsigned char short, signed short unsigned short int, signed int, long, signed long unsigned int, unsigned long long long, signed long long unsigned long long 有符号和无符号字符类型 默认情况下, 不带修饰符的 char 类型的值是有符号值 根据 C 标准, 这是由实现定义的操作, 有一些环境 1 将不带修饰符的 char 值定义为无符号值 对于给定的翻译单元, 可以使用命令行选项 -funsigned-char 将默认类型设置为无符号 浮点型表示 MPLAB C32 C 编译器使用 IEEE-754 浮点格式 float.h 中提供了对于翻译单元的实现限制的详细信息 类型 float 32 double 64 long double 64 位 指针 MPLAB C32 C 编译器中的指针长度均为 32 位 1. 特别是 PowerPC 和 ARM DS51686A_CN 第 8 页 2008 Microchip Technology Inc.

13 语言相关信息 limits.h limits.h 头文件定义了可以使用整型表示的值的范围 宏名 值 说明 CHAR_BIT 8 最小非位域对象的大小 ( 以位数表示 ) SCHAR_MIN -128 signed char 类型的对象可能具有的最小值 SCHAR_MAX 127 signed char 类型的对象可能具有的最大值 UCHAR_MAX 255 unsigned char 类型的对象可能具有的最大值 CHAR_MIN -128 ( 或 0, 参见有 char 类型的对象可能具有的最小值 符号和无符号字符类型 ) CHAR_MAX 127 ( 或 255, 参见 char 类型的对象可能具有的最大值 有符号和无符号字符类型 ) MB_LEN_MAX 16 任何语言环境中的多字节字符的最大长度 SHRT_MIN short int 类型的对象可能具有的最小值 SHRT_MAX short int 类型的对象可能具有的最大值 USHRT_MAX unsigned short int 类型的对象可能具有的最大值 INT_MIN int 类型的对象可能具有的最小值 INT_MAX int 类型的对象可能具有的最大值 UINT_MAX unsigned int 类型的对象可能具有的最大值 LONG_MIN long 类型的对象可能具有的最小值 LONG_MAX long 类型的对象可能具有的最大值 ULONG_MAX unsigned long 类型的对象可能具有的最大值 LLONG_MIN long long 类型的对象可能具有的最小值 LLONG_MAX long long 类型的对象可能具有的最大值 ULLONG_MAX unsigned long long 类型的对象可能具 有的最大值 2008 Microchip Technology Inc. DS51686A_CN 第 9 页

14 1.6 预定义宏 MPLAB C32 C 编译器宏 MPLAB C32 C 编译器定义了许多宏, 大多数都带有前缀 _MCHP_, 它们定义了各种目标特定选项 目标处理器和主机环境其他方面的特性 _MCHP_SZINT 32 或 64, 取决于设置整型大小的命令行选项 (-mint32 -mint64) _MCHP_SZLONG 32 或 64, 取决于设置整型大小的命令行选项 (-mlong32 -mlong64) _MCHP_SZPTR 始终为 32, 因为所有指针都是 32 位 mchp_no_float 如果指定了 -mno-float, 则定义该宏 NO_FLOAT 如果指定了 -mno-float, 则定义该宏 SOFT_FLOAT PIC pic PIC32MX PIC32MX PIC32MX LANGUAGE_ASSEMBLY LANGUAGE_ASSEMBLY LANGUAGE_ASSEMBLY LANGUAGE_ASSEMBLY LANGUAGE_C LANGUAGE_C LANGUAGE_C LANGUAGE_C processor SDE 兼容性宏 如果未指定 -mno-float, 则定义该宏 指示是否通过库调用浮点型 将翻译单元编译为位置无关的代码 始终定义该宏 如果未指定 -ansi, 则定义该宏 如果是编译经过预处理的汇编文件 (.s 文件 ), 则定义该宏 如果是编译经过预处理的汇编文件 (.s 文件 ), 并且未指定 -ansi, 则定义该宏 如果是编译 C 文件, 则定义该宏 如果是编译 C 文件, 并且未指定 -ansi, 则定义该宏 其中, processor 是传递给 -mprocessor 选项的参数的大写形式 例如, -mprocessor=32mx12f3456 将定义 32MX12F3456 MIPS SDE ( 软件开发环境 ) 定义了许多宏, 大多数带有前缀 _MIPS_, 它们定义了各种目标特定选项的特性, 其中一些由命令行选项决定 ( 例如, -mint64) 在适用时, 这些宏将由 MPLAB C32 C 编译器定义, 以方便将应用程序和中间件从 SDE 移植到 MPLAB C32 C 编译器 _MIPS_SZINT 32 或 64, 取决于设置整型大小的命令行选项 (-mint32 -mint64) _MIPS_SZLONG 32 或 64, 取决于设置整型大小的命令行选项 (-mlong32 -mlong64) _MIPS_SZPTR 始终为 32, 因为所有指针都是 32 位 mips_no_float 如果指定了 -mno-float, 则定义该宏 DS51686A_CN 第 10 页 2008 Microchip Technology Inc.

15 语言相关信息 mips mips _MIPS_ARCH_PIC32MX _MIPS_TUNE_PIC32MX _R3000 R3000 R3000 mips_soft_float MIPSEL MIPSEL MIPSEL R3000 MIPSEL 始终定义该宏 如果未指定 -ansi, 则定义该宏 _mips_fpr 定义为 32 mips16 mips16e 如果指定了 -mips16 或 -mips16e, 则定义该宏 mips 定义为 32 mips_isa_rev 定义为 2 _MIPS_ISA 定义为 _MIPS_ISA_MIPS32 mips_single_float 如果指定了 -msingle-float, 则定义该宏 1.7 属性和 PRAGMA 伪指令 函数属性 always_inline 如果函数声明为 inline, 则始终内联函数, 即使是未指定任何优化级别 longcall 始终通过以下方式调用函数 : 首先将其地址装入一个寄存器, 然后使用该寄存器的内容进行调用 这使得可以调用位于直接调用指令 28 位寻址范围之外的函数 far 在功能上等价于 longcall near 始终使用绝对调用指令来调用函数, 即使是指定了 -mlong-calls 命令行选项 mips16 以 MIPS16 指令集为函数生成代码 nomips16 始终以 MIPS32 指令集为函数生成代码, 即使是编译带有 -mips16 命令行选项的翻译单元 interrupt 为用作中断处理程序的函数生成序言 (prologue) 和尾声 (epilogue) 代码 请参见第 3 章 中断 和第 3.5 节 异常处理程序 vector 在所指示的异常向量 ( 其目标为一个函数 ) 处生成一条转移指令 请参见第 3 章 中断 和第 3.5 节 异常处理程序 2008 Microchip Technology Inc. DS51686A_CN 第 11 页

16 at_vector 将函数体放到所指示的异常向量地址处 请参见第 3 章 中断 和第 3.5 节 异常处理程序 naked 不为函数生成序言或尾声代码 section ( name ) 将函数放入由 name 指定的段 例如, void attribute ((section (.wilma ))) baz () {return;} 函数 baz 将被放入.wilma 段 -ffunction-sections 命令行选项对使用 section 属性定义的函数不起作用 unique_section 将函数放入唯一指定的段中, 就如同指定了 -ffunction-sections 如果函数还具有 section 属性, 那么将使用相应的段名作为前缀来生成唯一的段名 例如, void attribute ((section (.fred ), unique_section) foo (void) {return;} 函数 foo 将被放入.fred.foo 段 noreturn 向编译器指示, 函数将永不返回 在一些情况下, 这将使编译器可以在调用函数中生成效率更高的代码, 因为在执行优化时可以无需考虑函数确实会返回时的行为 声明为 noreturn 的函数的返回类型应始终为 void noinline 始终不考虑将函数内联 pure 如果某个函数除了对其返回值之外没有任何其他副面影响, 并且返回值仅依赖于参数和 / 或 ( 非易变 ) 全局变量, 那么对于该函数的调用, 编译器可以执行更积极的优化 此类函数可以使用 pure 属性指示 const 如果一个 pure 函数仅根据其参数决定其返回值 ( 即, 不检查任何全局变量 ), 那么可以将其声明为 const, 以允许更积极的优化 请注意, 对指针参数进行解引用的函数不属于 const, 因为指针解引用使用了不属于参数的值, 虽然指针本身是一个参数 format (type, format_index, first_to_check) format 属性指示函数采用 printf scanf strftime 或 strfmon 样式的格式字符串和参数, 编译器应当根据格式字符串对那些参数进行类型检查, 方法与针对标准库函数时一样 type 参数是 printf scanf strftime 或 strfmon 的其中之一 ( 可以选择在两端附加双下划线, 例如, printf ), 决定格式字符串的解释方式 format_index 参数指定哪个函数参数是格式字符串 函数参数从最左端的参数开始, 从 1 开始编号 DS51686A_CN 第 12 页 2008 Microchip Technology Inc.

17 语言相关信息 first_to_check 参数指定根据格式字符串检查的第一个参数的编号 如果 first_to_check 为 0, 那么不执行类型检查, 编译器仅检查格式字符串的一致性 ( 例如, vfprintf) format_arg (index) format_arg 属性指定函数处理 printf 样式的格式字符串, 编译器应检查格式字符串的一致性 用作格式字符串的函数属性使用 index 标识 nonnull (index,...) 向编译器指示, 传递给函数的一个或多个指针参数必须为非空指针 如果编译器确定有空指针作为值传递给非空参数, 并且指定了 -Wnonnull 命令行选项, 那么它会发出警告诊断信息 如果未为 nonnull 属性提供任何参数, 那么函数的所有指针参数均标记为非空 unused 向编译器指示, 函数可能不使用 如果该函数未被使用, 编译器将不会发出警告 used 向编译器指示, 将始终使用该函数, 即使编译器无法检查到对该函数的引用, 也必须为函数生成代码 例如, 行内汇编代码是到某个静态函数的唯一引用 deprecated 在使用指定为 deprecated 的函数时, 会产生警告 warn_unused_result 如果调用程序未使用所指示函数的返回值, 将会发出警告 weak weak 符号指示, 如果有另一个版本的相同符号可用, 那么应使用另一个版本 例如, 要使已实现的库函数可以由用户编写的函数覆盖, 可以使用该属性 malloc 所指示函数的任何非空指针返回值将不会赋给函数返回时有效的任何其他指针 这使编译器可以改善优化 alias ( symbol ) 指示函数是另一个符号的别名 例如, void foo (void) { /* stuff */ } void bar (void) attribute ((alias( foo ))); 符号 bar 被视为是符号 foo 的别名 变量属性 aligned (n) 具有该属性的变量将在下 n 字节边界处对齐 aligned 属性还可以用于结构成员 此类成员将在结构内对齐到所指示的边界处 如果省略了对齐值 n, 那么变量的对齐值设置为 8 ( 基本数据类型的最大对齐值 ) 2008 Microchip Technology Inc. DS51686A_CN 第 13 页

18 请注意, aligned 属性是用于增大变量的对齐值, 而不是减小它 要减小变量的对齐值, 请使用 packed 属性 cleanup (function) 指示当具有该属性的自动函数作用域变量超出作用域时要调用的函数 所指示的函数应只具有一个参数, 即指向与具有该属性的变量的类型兼容的指针, 返回类型应为 void deprecated 在使用指定为 deprecated 的变量时, 将会产生警告 packed 具有该属性的变量或结构成员将具有所可能的最小对齐值 即, 将不为声明分配任何对齐填充存储空间 与 aligned 属性联合使用时, packed 可以用于设置任意的对齐限制, 即大于或小于变量或结构成员的类型所具有的默认对齐值 section ( name ) 将函数放入由 name 指定的段 例如, unsigned int dan attribute ((section (.quixote ))) 变量 dan 将被放入.quixote 段 除非同时也指定了 unique_section, 否则 -fdata-sections 命令行选项对使用 section 属性定义的变量不起作用 unique_section 将变量放入唯一指定的段中, 就如同指定了 -fdata-sections 如果变量还具有 section 属性, 那么将使用相应的段名作为前缀来生成唯一的段名 例如, int tin attribute ((section (.ofcatfood ), unique_section) 变量 tin 将被放入.ofcatfood 段 transparent_union 如果联合类型的函数形参带有 transparent_union 属性, 那么传递相应的实参时, 它的类型视同为联合的第一个成员的类型 unused 向编译器指示, 变量可能不使用 如果该变量未被使用, 编译器将不会发出警告 weak weak 符号指示, 如果有另一个版本的相同符号可用, 那么应使用另一个版本 Pragma 伪指令 #pragma interrupt 将一个函数标记为中断处理程序 函数的序言或尾声代码将执行范围更广的现场保护 请参见第 3 章 中断 和第 3.5 节 异常处理程序 #pragma vector DS51686A_CN 第 14 页 2008 Microchip Technology Inc.

19 语言相关信息 在所指示的异常向量 ( 其目标为一个函数 ) 处生成一条转移指令 请参见第 3 章 中断 和第 3.5 节 异常处理程序 #pragma config #pragma config 伪指令指定要由应用程序使用的特定于处理器的配置设置 ( 即, 配置位 ) 请参见第 4 章 低级处理器控制 1.8 命令行选项 MPLAB C32 C 编译器提供了许多控制编译的选项, 它们都是区分大小写的 针对 PIC32MX 器件的选项 控制输出类型的选项 控制 C 语言的选项 控制警告与错误的选项 调试选项 控制优化的选项 控制预处理器的选项 汇编选项 链接选项 目录搜索选项 代码生成约定选项 针对 PIC32MX 器件的选项 表 1-2: 针对 PIC32MX 器件的选项 -mprocessor 选项 -mips16 -mno-mips16 -mno-float -msingle-float -mdouble-float -mlong64 定义 选择编译所针对的器件 ( 例如, -mprocessor=32mx360f512l) 生成 ( 不生成 ) MIPS16 代码 不使用浮点库 假定浮点协处理器仅支持单精度运算 假定浮点协处理器支持双精度运算 这是默认设置 强制 long 类型为 64 位宽 关于默认值和确定指针长度的方式的说明, 请参见 -mlong32 -mlong32 强制 long int 和 pointer 类型为 32 位宽 int long 和 pointer 的默认长度为 32 位 -G num 将长度小于等于 num 字节的全局和静态项放入小模式数据或 bss 段, 而不是放入一般数据或 bss 段 这使得可以使用单条指令对数据进行访问 所有模块应使用相同的 -G num 值编译 2008 Microchip Technology Inc. DS51686A_CN 第 15 页

20 表 1-2: 针对 PIC32MX 器件的选项 ( 续 ) 选项 -membedded-data -mno-embedded-data -muninit-const-in-rodata -mno-uninit-const-in-rodata -mcheck-zero-division -mno-check-zero-division -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls -mno-peripheral-libs 在可能的情况下, 首先将变量分配到只读数据段, 然后在可能的情况下, 接着将变量分配到小模式数据段, 否则分配到数据段中 这种情况下生成的代码会比默认情况下生成的代码略慢, 但可以减少在执行时所需的 RAM 量, 所以对于一些嵌入式系统可能是更好的选择 将非初始化 const 变量放入只读数据段 该选项只有在与 -membedded-data 联合使用时才有意义 整数被 0 除时产生 ( 不产生 ) 陷阱 默认设置为 -mcheck-zero-division 对于非平凡块移动强制 ( 不强制 ) 使用 memcpy() 默认设置是 -mno-memcpy, 这允许 GCC 内联大多数固定大小的拷贝 禁止 ( 不禁止 ) 使用 jal 指令 使用 jal 调用函数效率更高, 但要求调用程序和被调用程序处于同一个 256 MB 的段中 该选项对于 abicalls 代码不起作用 默认设置为 -mno-long-calls 链接时不使用标准外设库 定义 DS51686A_CN 第 16 页 2008 Microchip Technology Inc.

21 语言相关信息 控制输出类型的选项 下面的选项控制编译器的输出类型 表 1-3: 输出类型控制选项 选项 定义 -c 编译或汇编源文件, 但不链接 默认的文件扩展名为.o -E 在预处理过程之后, 即正常运行编译器之前停止 默认输出文件为 stdout -o file 将输出放在 file 中 -S 在正常编译之后, 即调用汇编器之前停止 默认输出文件扩展名为.s -v 在编译的每个阶段打印执行的命令 -x 可用 -x 选项显式地指定输入语言 : -x language 为后面的输入文件显式地指定语言 ( 而不是让编译器根据文件后缀名选择默认的语言 ) 该选项适用于其后直到下一个 -x 选项之前的所有输入文件 MPLAB C32 C 编译器支持下面的值 : c c-header cpp-output assembler assembler-with-cpp -x none 关闭所有语言指定, 随后的文件将按其后缀名处理 -x none 选项是默认的, 但如果已使用另一个 -x 选项, 则还必须明确使用 -x none 例如 : pic32-gcc -x assembler foo.asm bar.asm -x none main.c mabonga.s --help 没有 -x none 时, 编译器将假定所有输入文件都为汇编语言编写的程序 打印命令行选项的描述 2008 Microchip Technology Inc. DS51686A_CN 第 17 页

22 1.8.3 控制 C 语言的选项 下面的选项定义编译器使用的 C 语言类型 表 1-4: C 语言控制选项 选项 -ansi -aux-info filename -ffreestanding -fno-asm -fno-builtin -fno-builtin-function 定义 支持 ( 且仅支持 ) 所有 ANSI 标准的 C 程序 对于所有在翻译单元中声明和 / 或定义的函数, 包括头文件中的函数, 输出到给定文件名的原型声明中 除了 C, 该选项在其他语言中通常被忽略 除了声明以外, 文件在注释中指出了每个声明的来源 ( 源文件和行 ), 不论声明是隐含的 原型的, 还是非原型的 ( 在行号和冒号后面的第一个字符中, I N 代表新的, O 代表旧的 ), 也不论它来自声明还是定义 ( 在随后的字符中, 分别用 C 和 F 代表 ) 如果是函数定义, 在函数声明之后的注释中, 还提供 K&R 型参数列表, 后跟这些参数的声明 指明编译在独立环境中进行 这暗指 -fno-builtin 选项 独立的环境就是其中可能不存在标准库, 程序也不必在主函数中启动的环境 最显而易见的例子就是 OS 内核 这与 -fno-hosted 等价 不识别 asm inline 或 typeof 关键字, 因此代码可以将这些单词用作标识符 可以使用关键字 asm inline 和 typeof -ansi 暗指 -fno-asm 不识别不以 builtin_ 作为前缀开始的内建函数 -fsigned-char 使 char 型变量为有符号, 就像 signed char ( 这是默认设置 ) -fsigned-bitfields -funsigned-bitfields -fno-signed-bitfields -fno-unsigned-bitfields 如果声明时未使用 signed 或 unsigned, 这些选项用来控制位域是有符号还是无符号的 默认情况下, 这样的位域都是有符号的, 除非使用 -traditional, 它使位域总是无符号的 -funsigned-char 使 char 型变量为无符号, 就像 unsigned char -fwritable-strings 将字符串存储到可写的数据段中, 但不要使字符串唯一 DS51686A_CN 第 18 页 2008 Microchip Technology Inc.

23 语言相关信息 控制警告与错误的选项 警告是诊断消息, 它报告非本质错误 但有危险的语法结构, 或暗示可能存在错误 可以使用以 -W 开头的选项请求许多特定的警告, 例如, 使用 -Wimplicit 请求关于隐式声明的警告 这些特定的警告选项全部可以用以 -Wno- 开头的否定形式来关闭警告, 如 -Wno-implicit 本手册只列出了这两种形式中的一种, 这两种形式都不是默认的 下面的选项控制 MPLAB C32 C 编译器产生的警告的数量和种类 表 1-5: -WALL 隐含的警告与错误选项 选项 -fsyntax-only -pedantic 定义 检查代码的语法, 除此之外不做任何事情 发出严格 ANSI C 要求的所有警告 拒绝所有使用禁止扩展名的程序 -pedantic-errors 类似于 -pedantic, 只是发出错误而不是警告 -w 禁止所有警告消息 -Wall 使能本表中列出的所有 -W 选项 这将使能关于某些用户认为 有问题的, 及容易避免的 ( 或修改来禁止警告的 ) 语法结构 的所有警告, 即使是与宏一起 -Wchar-subscripts 如果数组下标具有 char 类型则警告 -Wcomment -Wcomments -Wdiv-by-zero -Wimplicit -Werror-implicitfunction-declaration -Wformat -Wimplicit-functiondeclaration -Wimplicit-int -Wmain -Wmissing-braces 当注释开始符号 /* 出现在 /* 注释中, 或反斜杠 - 换行出现在 // 注释中发出警告 编译时发现整数除以 0 则警告 要禁止这个警告消息, 可以使用 -Wno-div-by-zero 浮点数除以 0 不会警告, 因为它可以是获得无穷大和 NaN 的一种合法方法 ( 这是默认设置 ) 函数在声明前被使用将给出错误 检查对 printf 和 scanf 等函数的调用, 确保所提供参数的类型与指定的格式字符串相符合 等价于同时指定 -Wimplicit-int 和 -Wimplicit-function-declaration 函数在声明前被使用将给出警告 如果声明没有指定类型则警告 如果 main 的类型有问题则警告 main 应该是一个具有外部链接的函数, 它返回 int, 并带有正确类型的 0 2 或 3 个参数 如果一个聚集或联合的初始化中括号不全则警告 在下面的例子中, a 的初始化中括号不全, 而对 b 的初始化是正确的 int a[2][2] = { 0, 1, 2, 3 }; int b[2][2] = { { 0, 1 }, { 2, 3 } }; 2008 Microchip Technology Inc. DS51686A_CN 第 19 页

24 表 1-5: -WALL 隐含的警告与错误选项 ( 续 ) 选项 -Wmultichar -Wno-multichar 定义 使用多字符的 character 常量时警告 通常出现这样的常量是由于输入错误 由于这种常量具有实现定义的值, 不应将它们用在可移植代码中 下面举例说明了多字符 character 常量的使用 : char xx(void) { return('xx'); } -Wparentheses -Wreturn-type -Wsequence-point 在某些上下文中省略圆括号时警告, 如在需要真值的上下文中有一个赋值, 或者在运算符嵌套的运算中, 人们往往辨别不清运算的优先级 当函数定义为其返回值类型默认为 int 时发出警告 如果函数的返回值类型不是 void, 那么不带返回值的任何 return 语句都会导致产生警告 由于违背 C 标准中的顺序点规则而导致代码中有未定义的语义时发出警告 C 标准定义了 C 程序中根据顺序点对表达式求值的顺序, 顺序点代表程序各部分执行的局部顺序 : 在顺序点之前执行的部分和顺序点之后执行的部分 这些在一个完整表达式 ( 不是一个更大的表达式的一部分 ) 的求值之后, 在对第一个运算符 (&&?: 或, ( 逗号 ) 运算符 ) 求值之后, 在调用函数前 ( 但在对其参数和表示被调用函数的表达式求值后 ), 以及某些其他地方发生 除了顺序点规则指定的顺序外, 未指定表达式的子表达式的求值顺序 所有这些规则仅规定了局部的顺序, 而没有规定全局的顺序, 因为, 如在一个表达式中调用了两个函数, 而它们之间没有顺序点, 就没有指定函数调用的顺序 但是, 标准委员会规定函数调用不能重叠 没有指定在顺序点之间, 对对象的值的修改何时生效 操作依赖于这一点的程序有不确定的操作 ; C 标准规定, 在上一个顺序点和下一个顺序点之间, 对象所储存的值最多被表达式求值修改一次 而且, 前一个值是只读的以便确定将被储存的值 如果程序违反这些规则, 任何特定实现的结果都是完全不可预估的 具有未定义操作的代码示例有 a = a++; a[n] = b[n++] 及 a[i++] = i; 该选项不能诊断某些更复杂的情况, 并可能给出偶然错误的结果, 但通常在检测程序中的这类问题时, 该选项还是很有效的 DS51686A_CN 第 20 页 2008 Microchip Technology Inc.

25 语言相关信息 表 1-5: -WALL 隐含的警告与错误选项 ( 续 ) -Wswitch 每当 switch 语句中有一个枚举类型的索引, 并且这个枚举的一个或多个指定码缺少 case 时发出警告 ( 默认标号的存在禁止该警告 ) 当使用该选项时, 枚举范围之外的 case 标号也会引起警告 -Wsystem-headers 打印关于系统头文件中语法结构的警告消息 系统头文件的警告通常是被禁止的, 因为通常认为它们不会有真正的问题, 只会使编译器的输出可读性更差 使用这个命令行选项告知 MPLAB C32 C 编译器发出关于系统头文件的警告, 就像在用户代码中一样 但是, 注意将 -Wall 与该选项一起使用时不会对系统头文件中的未知 pragma 伪指令发出警告 这时, 必须同时使用 -Wunknown-pragmas -Wtrigraphs 遇到三字母组合时发出警告 ( 假定使能了三字母组合 ) -Wuninitialized -Wunknown-pragmas -Wunused 选项 -Wunused-function -Wunused-label 定义 使用自动变量而没有先对其初始化时发出警告 这些警告只有在允许优化时才出现, 因为它们需要只有优化时才计算的数据流信息 仅当将变量分配给寄存器时才产生这些警告 因此, 对于声明为 volatile 的变量, 或是变量地址被占用, 或者大小不是 或 8 字节的变量不会产生这些警告 同样对于结构 联合或数组, 即使它们在寄存器中, 也不会产生这些警告 注意, 当一个变量只是用于计算一个值而变量本身不会被使用时, 也不会产生警告, 因为在警告被打印前, 这样的计算就会被数据流分析删除 当遇到一个 MPLAB C32 C 编译器无法理解的 #pragma 伪指令时发出警告 如果使用该命令行选项, 甚至对系统头文件中的未知 pragma 伪指令也会发出警告 如果警告只能通过 -Wall 命令行选项来使能, 情况就不是这样了 每当变量除了其声明外未被使用过时, 每当函数声明为 static 但从未定义时, 每当声明了标号但未使用时, 每当一条语句的计算结果未被显式使用时, 发出警告 要获得未使用的函数参数的警告, 必须同时指定 -W 和 -Wunused 强制转换表达式类型可以避免禁止对表达式的这种警告 同样地, unused 属性可以禁止对未使用的变量 参数和标号的警告 每当声明了 static 函数但没有定义函数时, 或一个非内联 static 函数未使用时, 发出警告 声明了一个标号但未使用时发出警告 要禁止这种警告, 可以使用 unused 属性 2008 Microchip Technology Inc. DS51686A_CN 第 21 页

26 表 1-5: -WALL 隐含的警告与错误选项 ( 续 ) 选项 定义 -Wunused-parameter 当对函数参数进行了声明但从未使用时, 发出警告 要禁止这种警告, 可以使用 unused 属性 -Wunused-variable 当对局部变量或非常量的 static 变量进行了声明但从未使用时, 发出警告 要禁止这种警告, 可以使用 unused 属性 -Wunused-value 语句的计算结果未显式使用时发出警告 要禁止这种警告, 可以将表达式类型强制转换为 void DS51686A_CN 第 22 页 2008 Microchip Technology Inc.

27 语言相关信息 下面是不被 -Wall 隐含的 -W 选项 其中有些是关于用户通常认为不会有问题, 但有时希望检查一下的语法结构的警告 其他是在某些情况下必须或很难避免的语法结构的警告, 没有简单的方法来修改代码以禁止这些警告 表 1-6: -WALL 不隐含的警告与错误选项 选项定义 -W 为以下事件输出额外警告消息 : 非易变的自动变量可能会被对 longjmp 的调用改变 这些警告仅在优化编译时才会出现 编译器仅识别对 setjmp 的调用, 而不会知道将在何处调用 longjmp, 信号处理程序可以在代码中的任何地方调用 longjmp 因此, 即使当实际没有问题时也可能会产生警告, 因为实际上不能在会产生问题的地方调用 longjmp 函数可以通过 return value; 和 return; 退出 函数体结束时不传递任何返回值的语句视为 return; 表达式语句或者逗号表达式的左侧没有副作用 要禁止这种警告, 可以将未使用表达式的类型强制转换为 void 例如, 表达式 x[i,j] 会产生警告, 而表达式 x[(void)i,j] 不会产生警告 用 < 或 <= 将无符号值与 0 比较 出现了像 x<=y<=z 这样的不等式, 这等价于 (x<=y? 1 : 0) <= z, 这只是普通数学表示的不同解释罢了 存储类型修饰符如 static 在声明中没有放在最前面, 根据 C 标准, 这种用法已经过时了 如果还指定了 -Wall 或 -Wunused, 会出现关于未使用变量的警告 当将有符号值转换为无符号值时, 比较有符号值和无符号值会产生不正确的结果 ( 但是如果还指定了 -Wno-sign-compare 的话, 就不会产生警告 ) 聚集的初始化中括号不全 例如, 下面的代码由于在初始化 x.h 时漏掉了括号会产生警告 : struct s { int f, g; }; struct t { struct s h; int i; }; struct t x = { 1, 2, 3 }; 聚集的初始化中没有初始化所有成员 例如, 下面的代码由于 x.h 会被隐式初始化为零而会产生警告 : struct s { int f, g, h; }; struct s x = { 3, 4 }; -Waggregate-return 定义或调用了返回结构或联合的任何函数时产生警告 -Wbad-function-cast 当将函数调用强制转换为不匹配类型时产生警告 例如, 如果 int foof() 被强制转换为任何 * 指针类型会产生警告 2008 Microchip Technology Inc. DS51686A_CN 第 23 页

28 表 1-6: -WALL 不隐含的警告与错误选项 ( 续 ) -Wcast-align -Wcast-qual -Wconversion -Werror -Winline 选项 -Wlarger-than-len -Wlong-long -Wno-long-long -Wmissing-declarations -Wmissing-noreturn -Wmissing-prototypes -Wmissingformat-attribute -Wnested-externs -Wno-deprecateddeclarations -Wpadded -Wpointer-arith 当强制转换指针类型, 使目标所需分配的存储空间增加时产生警告 例如, 如果 char * 被强制转换为 int * 会产生警告 当强制转换指针类型, 从目标类型中去除类型限定符时产生警告 例如, 如果 const char * 被强制转换为不带修饰符的的 char * 会产生警告 如果一个原型导致一个参数的类型转换与没有原型时不同, 则发出警告 这包括定点型转换为浮点型或反之, 及改变定点参数符号或宽度的转换, 与默认的提升相同时除外 当负的整型常量表达式隐式转换为无符号类型时也发出警告 例如, 如果 x 为无符号类型, 赋值 x = -1 将产生警告 但是, 显式的强制类型转换, 如 (unsigned) -1, 不会产生警告 使所有警告变为错误 定义 一个函数已声明为内联, 或指定了 -finline-functions 选项时, 如果函数不能被内联, 将产生警告 当定义了大于 len 字节的对象时产生警告 使用 long long 类型时发出警告 这是默认设置 要禁止这个警告消息, 可以使用 -Wno-long-long 仅当使用 -pedantic 标志时, 才考虑标志 -Wlong-long 和 -Wno-long-long 如果全局函数在定义之前没有先对其进行声明会产生警告 即使定义本身提供了原型, 也要在定义全局函数之前先声明它 如果使能了 -Wformat, 可指定 format 属性的函数也会产生警告 注意这些函数仅是可指定这一属性的函数, 并不是已指定这一属性的函数 如果不使能 -Wformat, 该选项不起作用 对可指定 noreturn 属性的函数产生警告 这些函数仅是可指定这一属性的函数, 并不是已指定这一属性的函数 手工检验这些函数时要小心 实际上, 在添加 noreturn 属性之前也不要返回 ; 否则可能会引入微小的代码生成错误 如果全局函数在定义之前没有先声明原型会产生警告 即使定义本身提供了原型也会发出这个警告 ( 该选项可用于检测不在头文件中声明的全局函数 ) 如果在函数内部遇到了 extern 声明, 发出警告 不要对使用通过 deprecated 属性指定为 deprecated 的函数 变量和类型发出警告 如果一个结构中包含了填充, 不管是为了对齐结构的一个元素, 还是为了对齐整个结构, 都发出警告 对于与函数类型或 void 的长度有关的任何类型发出警告 为方便使用 void * 指针和指向函数的指针计算, MPLAB C32 C 编译器将这些类型的长度分配为 1 DS51686A_CN 第 24 页 2008 Microchip Technology Inc.

29 语言相关信息 表 1-6: -WALL 不隐含的警告与错误选项 ( 续 ) 选项 -Wredundant-decls -Wshadow -Wsign-compare -Wno-sign-compare -Wstrict-prototypes -Wtraditional -Wundef -Wunreachable-code -Wwrite-strings 定义 如果在同一个作用域内多次声明了任何符号则发出警告, 即使多个声明都有效且没有改变任何符号 当一个局部变量屏蔽另一个局部变量时发出警告 当将有符号值转换为无符号值, 比较有符号值和无符号值产生不正确的结果时, 发出警告 该警告也可通过 -W 来使能 要获得 -W 的其他警告, 而不获得这个警告, 可以使用 -W -Wno-sign-compare 如果对一个函数的定义或声明没有指定参数类型则发出警告 ( 如果函数定义或声明前有指定函数参数类型的声明, 则允许旧式函数定义而不发出警告 ) 如果某些语法结构在传统 C 和 ANSI C 中操作不同, 产生警告 宏参数出现在宏体中的字符串常量中 在传统 C 中, 这些宏参数将替代参数, 但在 ANSI C 中是常量的一部分 在一个块中声明为 external 的函数, 在块结束后被使用 switch 语句有 long 类型的操作数 非静态函数声明后跟一个静态函数声明 某些传统 C 编译器不接受这种语法结构 如果在 #if 伪指令中对一个未定义的标识符求值会产生警告 如果编译器检测到代码将永远不会被执行到则发出警告 即使在有些情况下, 受影响的代码行的一部分能被执行到, 该选项也可能产生警告, 因此在删除明显执行不到的代码时要小心 例如, 函数被内联时, 警告可能表明仅在函数的一个内联拷贝中, 该行执行不到 字符串常量类型为 const char[length] 时, 将一个字符串常量的地址复制到一个非常量 char * 指针会产生警告 这些警告有助于在编译时查找试图写字符串常量的代码, 但仅是在声明和原型中使用 const 时非常小心的前提下 否则, 这是不安全的, 这也是 -Wall 为什么不要求这些警告的原因 2008 Microchip Technology Inc. DS51686A_CN 第 25 页

30 1.8.5 调试选项 下面列出了一些用于调试的选项 表 1-7: 选项 调试选项 定义 -g 产生调试信息 MPLAB C32 C 编译器支持同时使用 -g 和 -O, 因此可以调试优化的代码 调试优化代码的缺点是有时可能产生异常结果 : 某些声明的变量可能根本不存在 ; 控制流程可能短暂异常转移 ; 某些语句可能由于计算常量结果或已经获得其值而不执行 ; 某些语句可能由于被移出循环在不同的地方执行 尽管如此, 证明还是可以调试优化输出的 这使优化可能有错误的程序变得合理 -Q 使编译器输出它在编译的每个函数名, 并在结束时输出关于每遍编译的一些统计信息 -save-temps 不要删除中间文件 将中间文件放在当前目录中, 并根据源文件命名它们 因此, 用 -c -save-temps 编译 foo.c 将生成下面的文件 : foo.i ( 预处理文件 ) foo.s ( 汇编语言文件 ) foo.o ( 目标文件 ) DS51686A_CN 第 26 页 2008 Microchip Technology Inc.

31 语言相关信息 控制优化的选项 下面列出了一些用于控制编译器优化的选项 表 1-8: 一般优化选项 选项 定义 -O0 不要优化 ( 这是默认设置 ) 不指定 -O 选项, 编译器的目标是降低编译成本, 使调试产生期望的结果 语句是独立的 : 如果在语句中插入断点暂停程序, 然后可以给任何一个变量赋一个新值或将程序计数器更改到指向函数中的任何其他语句, 得到希望从源代码得到的结果 编译器仅将声明为 register 的变量分配到寄存器中 -O -O1 优化级别 1 优化编译需要花费更多的时间, 且对于较大的函数, 需要占用更多的存储空间 指定 -O 选项时, 编译器试图减小代码长度并缩短执行时间 指定 -O 选项时, 编译器启用 -fthread-jumps 和 -fdefer-pop, 并启用 -fomit-frame-pointer -O2 优化级别 2 MPLAB C32 C 编译器几乎执行所有支持的优化, 而不进行空间和速度的权衡 -O2 启用除循环展开 (-funroll-loops) 函数内联 (-finline-functions) 及严格别名优化 (-fstrict-aliasing) 外的所有可选优化 该选项还启用强制复制存储器操作数 (-fforce-mem) 和帧指针删除 (-fomit-frame-pointer) 与 -O 相比, 该选项增加了编译时间, 但提高了生成代码的性能 -O3 优化级别 3 -O3 启用所有 -O2 指定的优化并启用内联函数选项 -Os 优化代码长度 -Os 使能一般不增加代码长度的所有 -O2 优化 同时执行用于减小代码长度的其他优化 下面的选项用于控制特定的优化 -O2 选项启用这些优化中除 -funroll-loops -funroll-all-loops 和 -fstrict-aliasing 外的所有优化选项 2008 Microchip Technology Inc. DS51686A_CN 第 27 页

32 在少数情况下, 当需要进行 微调 优化时, 可以使用下面的选项 表 1-9: 特定优化选项 选项 -falign-functions -falign-functions=n -falign-labels -falign-labels=n -falign-loops -falign-loops=n -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks -fexpensiveoptimizations -ffunction-sections -fdata-sections -fgcse 定义 当函数的开头对齐到下一个大于 n 的 2 的次幂, 最多跳过 n 字节 例如, -falign-functions=32 将函数对齐到下一个 32 字节边界, 但是 -falign-functions=24 仅在可以通过跳过等于或小于 23 字节能对齐到下一个 32 字节边界的情况下, 才将函数对齐到下一个 32 字节边界 -fno-align-functions 和 -falign-functions=1 是等价的, 表明函数不会被对齐 汇编器仅当 n 为 2 的次幂时, 才支持这个标志 ; 因此 n 是向上舍入的 如果不指定 n, 则使用由机器决定的默认设置 将所有分支的目标地址对齐到 2 的次幂边界, 像 -falign-functions 一样, 最多跳过 n 字节 该选项可能容易使代码速度变慢, 因为当以代码的通常流程到达分支的目标地址时, 它必须插入空操作 如果 -falign-loops 或 -falign-jumps 可用, 并且大于这个值, 则使用它们的值 如果不指定 n, 则使用由机器决定的默认设置, 很可能是 1, 表明不对齐 将循环对齐到 2 的次幂边界, 像 -falign-functions 一样, 最多跳过 n 字节 希望循环能执行许多次, 从而补偿执行的任何空操作 如果不指定 n, 则使用由机器决定的默认设置 通过在函数调用前后发出其他指令来保护和恢复寄存器, 使能将值分配到会被函数调用破坏的寄存器中 仅当这种分配能生成更好的代码时才进行这种分配 在公共子表达式消除中, 当任何其他路径都不到达跳转的目标地址时, 浏览跳转指令 例如, 当 CSE 遇到一条带有 else 子句的 if 语句时, 当条件检测为假时, CSE 将跟随跳转 这与 -fcse-follow-jumps 类似, 但使 CSE 跟随根据条件跳过块的跳转 当 CSE 遇到一个没有 else 子句的简单 if 语句时, -fcse-skip-blocks 使 CSE 跟随 if 前后的跳转 执行许多成本较高的次要优化 将每个函数或数据项放到输出文件中其自己的段 函数名或数据项名决定输出文件中的段名 仅当使用这些选项有明显的好处时, 才使用这些选项 当指定这些选项时, 汇编器和链接器可能生成较大的目标文件和可执行文件, 且速度较慢 执行全局公共子表达式消除 这会同时执行全局常量和复制传播 DS51686A_CN 第 28 页 2008 Microchip Technology Inc.

33 语言相关信息 表 1-9: 特定优化选项 ( 续 ) -fgcse-lm -fgcse-sm 选项 -fmove-all-movables -fno-defer-pop -fno-peephole -fno-peephole2 -foptimizeregister-move -fregmove -freduce-all-givs -frename-registers -frerun-cse-afterloop -frerun-loop-opt -fschedule-insns -fschedule-insns2 -fstrength-reduce 使能 -fgcse-lm 时, 全局公共子表达式消除将试图移动仅能被向其中存储破坏的装载 这允许将包含装载 / 存储序列的循环改变为循环外的装载, 以及循环内的复制 / 装载 使能 -fgcse-sm 时, 将在公共子表达式消除后运行存储移动 这试图将存储移出循环 当将该选项与 -fgcse-lm 一起使用时, 包含装载 / 存储序列的循环可改变为循环前的装载和循环后的存储 强制将循环内所有不可变的计算移出循环 每次函数调用时, 总是在函数一返回时就弹出函数的参数 编译器通常允许几个函数调用的参数累积在堆栈中, 并将所有参数一次弹出堆栈 禁止特定于机器的窥孔 (peephole) 优化 窥孔优化发生在编译过程中的不同点 -fno-peephole 禁止对机器指令进行窥孔优化, 而 -fno-peephole2 禁止高级窥孔优化 要完全禁止窥孔优化, 要同时使用这两个选项 试图重新分配 move 指令中的寄存器编号, 并作为其他简单指令的操作数来增加关联的寄存器数量 -fregmove 和 -foptimize-register-moves 是相同的优化 强制循环中的所有一般归纳变量降低强度 这些选项可能生成更好或更差的代码 其结果在很大程度上取决于源代码中循环的结构 试图通过使用寄存器分配后余下的寄存器来避免经过调度的代码中的假相关性 这种优化对于有许多寄存器的处理器比较有用 但它可能使调试无法进行, 因为变量将不会存储在固定的寄存器中 在执行循环优化后, 重新运行公共子表达式消除 运行循环优化两次 定义 试图对指令重新排序, 以消除由于所需的数据不可用而导致的指令停顿 类似于 -fschedule-insns, 但要求在进行寄存器分配后再执行一次指令调度 执行降低循环强度和删除迭代变量的优化 2008 Microchip Technology Inc. DS51686A_CN 第 29 页

34 表 1-9: 特定优化选项 ( 续 ) 选项 -fstrict-aliasing 定义 允许编译器采用适用于被编译语言的最严格别名规则 对于 C, 这根据表达式的类型进行优化 尤其是, 假定一种类型的对象不会和另一种类型的对象存放在同一地址, 除非类型几乎相同 例如, unsigned int 可引用 int, 但不能引用 void* 或 double 字符类型可引用任何其他类型 特别要注意下面的代码 : union a_union { int i; double d; }; -fthread-jumps -funroll-loops -funroll-all-loops int f() { union a_union t; t.d = 3.0; return t.i; } 不读最后写入的联合成员, 而读其他联合成员 ( 称为 type-punning ) 比较常见 即使对于 -fstrict-aliasing, 如果通过联合类型访问存储器, type-punning 也是允许的 因此上面的代码可得到期望的结果 但下面的代码可能得不到期望的结果 : int f() { a_union t; int* ip; t.d = 3.0; ip = &t.i; return *ip; } 执行优化, 检测一个转移的目标语句是否包含另一个条件判断 如果是这样, 第一个转移改变为指向第二个转移的目标语句, 或紧随其后的语句, 这取决于条件是真还是假 执行循环展开优化 仅对在编译时或运行时其迭代次数可以确定的循环进行这种优化 -funroll-loops 隐含了 -fstrength-reduce 和 -frerun-cse-after-loop 执行循环展开优化 对于所有的循环执行这种优化, 通常这种优化会使程序运行较慢 -funroll-all-loops 隐含了 -fstrength-reduce 和 -frerun-cse-after-loop DS51686A_CN 第 30 页 2008 Microchip Technology Inc.

35 语言相关信息 -fflag 形式的选项指定独立于机器的标志 大多数标志都有正的形式和负的形式 -ffoo 负的形式为 -fno-foo 在下表中, 仅列出了一种形式 ( 非默认的形式 ) 表 1-10: 独立于机器的优化选项 选项 -fforce-mem -finline-functions -finline-limit=n 定义 在对存储器操作数进行算术运算之前, 强制将存储器操作数复制到寄存器中 这样通过使所有存储器引用可能的公共子表达式, 可生成更好的代码 当它们不是公共子表达式时, 指令组合应该删除单独的寄存器装载 -O2 选项启用该选项 将所有简单的函数合并到其调用函数中 编译器直观地决定哪些函数足够简单值得这样合并 如果合并了对某个给定函数的所有调用, 且函数声明为 static, 则通常该函数本身不作为汇编代码输出 默认情况下, MPLAB C32 C 编译器限制可内联的函数的大小 该选项允许控制显式声明为 inline 的函数 ( 即用 inline 关键字标记的函数 ) 的这一限制 n 是可内联的函数的大小, 以虚拟指令的条数为单位 ( 参数处理不包括在内 ) n 的默认值为 增加这个值可能导致被内联的代码更多, 并可能增加编译时间和存储器开销 减小这个值通常使编译更快, 更少的代码被内联 ( 可能程序执行速度变慢 ) 该选项对于使用内联的程序尤其有用 -fkeep-inline-functions -fkeep-static-consts -fno-function-cse 注 : 在这里, 虚拟指令代表函数大小的抽象测量 它不代表汇编指令条数, 同样对于不同版本的汇编器, 它的确切含义可能会有所不同 即使合并了对一个给定函数的所有调用, 且函数声明为 static, 也会输出函数的一个独立的运行时可调用形式 该选项不影响 extern 内联函数 当没有启用优化时, 发出声明为 static const 的变量, 即使变量没有被引用 MPLAB C32 C 编译器默认使能该选项 如果需要强制编译器检查是否引用了这个变量, 而不管是否启用了优化, 可以使用 -fno-keep-static-consts 选项 不要将函数的地址存放在寄存器中 使调用 constant 函数的每条指令显式包含函数的地址 该选项导致生成的代码效率不高, 但对于某些企图修改程序的人来说, 会对不使用该选项而生成的优化程序感到束手无策 2008 Microchip Technology Inc. DS51686A_CN 第 31 页

36 表 1-10: 独立于机器的优化选项 ( 续 ) 选项 -fno-inline -fomit-frame-pointer -foptimize-sibling-calls 不要理会 inline 关键字 该选项通常用于使编译器不要展开任何内联函数 如果不使能优化, 不会展开任何内联函数 对于不需要帧指针的函数, 不要将帧指针存放在寄存器中 这可以避免指令保护 设置和恢复帧指针 它还使一个额外的寄存器可用于许多函数 优化同属和尾递归调用 定义 控制预处理器的选项 下面列出了一些用于控制编译器预处理器的选项 表 1-11: 预处理器选项 选项 -Aquestion (answer) 定义 断言问题 question 的答案 answer, 以防用预处理条件, 如 #if #question(answer) 来测试问题 -A- 禁止通常描述目标机器的标准断言 例如, main 的函数原型可声明如下 : #if #environ(freestanding) int main(void); #else int main(int argc, char *argv[]); #endif -A 命令行选项可用于在两个原型之间进行选择 例如, 为选择二者中的第一个, 可使用下面的命令行选项 : -Aenviron(freestanding) -A -predicate =answer 取消带谓词 predicate 和答案 answer 的断言 -A predicate =answer 进行带谓词 predicate 和答案 answer 的断言 这个形式比 仍然支持的老形式 -A predicate(answer) 好, 因为这个形 式不使用 shell 特殊字符 -C 告知预处理器不要舍弃注释 与 -E 选项一起使用 -dd 告知预处理器不要按照正确的顺序将宏定义移动到输出中 -Dmacro 将字符串 1 作为宏定义来定义宏 macro -Dmacro=defn 将宏 macro 定义为 defn 在任何 -U 选项之前处理命令行中的 所有 -D 选项 -dm 告知预处理器仅输出实际上处于预处理结尾的一系列宏定义 与 -E 选项一起使用 -dn 与 -dd 类似, 不同之处在于宏参数和内容被忽略 输出中仅包 括 #define name -fno-show-column 不要在诊断中打印列号 如果诊断被不理解列号的程序 ( 如 dejagnu) 浏览, 这可能是必要的 -H 打印使用的每个头文件的名称以及其他正常活动 DS51686A_CN 第 32 页 2008 Microchip Technology Inc.

37 语言相关信息 表 1-11: 预处理器选项 ( 续 ) 选项定义 -I- 仅对于 #include "file", 才搜索在 -I- 选项之前 -I 选项指定的任何目录 对于 #include <file>, 则不搜索这些目录 如果在 -I- 之后用 -I 选项指定了另外的目录, 则对于所有 #include 伪指令, 都搜索这些目录 ( 一般情况下以这种方式使用所有 -I 目录 ) 另外, -I- 选项禁止将当前目录 ( 即当前输入文件所在的目录 ) 作为 #include "file" 的第一个搜索目录 无法覆盖 -I- 的这个作用 通过 -I, 可以指定搜索调用编译器时为当前目录的目录 这与预处理器在默认情况下的操作不完全相同, 但一般情况下都可以这样做 -I- 并不禁止使用头文件的标准系统目录 因此, -I- 和 -nostdinc 是独立的 -Idir 将目录 dir 添加到要在其中搜索头文件的目录列表的开头 这可用于覆盖系统头文件, 替代为您自己的版本, 因为在搜索系统头文件目录之前搜索这些目录 如果使用多个 -I 选项, 则以自左向右的顺序浏览目录, 最后搜索标准系统目录 -idirafter dir 将目录 dir 添加到辅助包含路径中 当一个头文件在主包含路径 (-I 添加的路径 ) 的任何目录中都找不到时, 搜索辅助包含路径的目录 -imacros file 在处理常规输入文件之前, 将文件处理为输入, 舍弃生成的输出 由于舍弃了由文件生成的输出, -imacros file 的唯一作用是使文件中定义的宏可用在主输入中 命令行中的任何 -D 和 -U 选项始终在 -imacros file 之前处理, 而与写这些选项的顺序无关 所有 -include 和 -imacros 选项以写这些选项时的顺序处理 -include file 在处理常规输入文件之前, 将文件处理为输入 实际上, 首先编译文件的内容 命令行中的任何 -D 和 -U 选项始终在 -include file 之前处理, 而与写这些选项的顺序无关 所有 -include 和 -imacros 选项以写这些选项时的顺序处理 -iprefix prefix 指定 prefix 作为后面 -iwithprefix 选项的前缀 -isystem dir 将一个目录添加到辅助包含路径的开头, 将其标记为系统目录, 因此可以像处理标准系统目录一样处理这个目录 -iwithprefix dir 将一个目录添加到辅助包含路径中 目录名由前缀和 dir 组成, 其中前缀由前面的 -iprefix 指定 如果没有指定前缀, 将使用包含编译器安装路径的目录作为默认目录 -iwithprefixbefore dir 将一个目录添加到主包含路径中 目录名由前缀和 dir 组成, 这与 -iwithprefix 相同 2008 Microchip Technology Inc. DS51686A_CN 第 33 页

38 表 1-11: 预处理器选项 ( 续 ) 选项 定义 -M 告知预处理器输出适合于描述每个目标文件的相关性的 make 的规则 对于每个源文件, 预处理器输出目标为该源文件目标文件名且其相关性为它使用的所有 #include 头文件的 make 规则 该规则可以为单行或者太长时可用 \-newline 来继续 规则列表打印在标准输出中, 而不是打印在预处理的 C 程序中 -M 隐含 -E ( 见第 节 控制输出类型的选项 ) -MD 与 -M 类似, 但将相关性信息写到一个文件, 编译继续进行 包含相关性信息的文件的名称与带.d 扩展名的源文件名称相同 -MF file 当与 -M 或 -MM 一起使用时, 指定在其中写入相关性信息的文件 如果不给定 -MF 开关, 预处理器将发送规则到预处理器输出发送到的地方 当与驱动程序选项 -MD 或 -MMD 一起使用时, -MF 覆盖默认的相关性输出文件 -MG 将缺少的头文件视为生成的文件, 并假定它们位于源文件所在的目录中 如果指定了 -MG, 那么必须也指定 -M 或 -MM -MD 或 -MMD 不支持 -MG -MM 类似于 -M, 但输出仅涉及到用 #include file 包含的用户头文件 用 #include <file> 包含的系统头文件被忽略 -MMD 类似于 -MD, 但仅涉及到用户头文件, 不涉及到系统头文件 -MP 该选项指示 CPP 除主文件外, 还要为每个相关性添加假目标, 使每个不依赖于任何其他 如果删除头文件时不更新 make-file 来匹配, 这些假规则将避开 make 发出的错误 下面是典型的输出 : test.o: test.c test.h test.h: -MQ 与 -MT 相同, 但它将特定于 make 的任何字符用引号括起来 -MQ '$(objpfx)foo.o' 得到 $$(objpfx)foo.o: foo.c 默认的目标自动被引号括起来, 就像指定了 -MQ 一样 -MT target 改变相关性生成发出的规则的目标 默认情况下, CPP 采用主输入文件的名称, 包含任何路径, 删除任何文件后缀 ( 如.c), 并添加平台的通常目标后缀 结果就是目标 -MT 选项将目标设置为您指定的字符串 如果需要多个目标, 可将它们指定为 -MT 的一个参数, 或使用多个 -MT 选项 例如 : -MT '$(objpfx)foo.o' 可能得到 $(objpfx)foo.o: foo.c DS51686A_CN 第 34 页 2008 Microchip Technology Inc.

39 语言相关信息 表 1-11: 预处理器选项 ( 续 ) 选项 -nostdinc 不要在标准系统目录中搜索头文件 仅搜索用 -I 选项指定的目录 ( 及当前目录, 如果需要的话 ) ( 关于 -I 的信息, 请参见第 节 目录搜索选项 ) 通过同时使用 -nostdinc 和 -I-, 可将头文件搜索路径限制为仅包括显式指定的目录 -P 告知预处理器不要产生 #line 伪指令 与 -E 选项一起使用 ( 见第 节 控制输出类型的选项 ) -trigraphs 支持 ANSI C 三字母组合 -ansi 选项也有这个作用 -Umacro 取消宏 macro. 定义 -U 选项在所有 -D 选项之后, 但在任何 -include 和 -imacros 选项之前起作用 -undef 不要预定义任何非标准宏 ( 包括结构标志 ) 汇编选项 下面列出了一些用于控制汇编器操作的选项 定义 表 1-12: 选项 -Wa,option 汇编选项 定义 将 option 作为一个选项传递给汇编器 如果 option 中包含逗号, 说明有多个选项通过逗号分隔开 2008 Microchip Technology Inc. DS51686A_CN 第 35 页

40 1.8.9 链接选项 如果使用了 -c -S 或 -E 选项中的任何一个, 则链接器不会运行, 且不应将目标文件名用作参数 表 1-13: 链接选项 选项 -Ldir -llibrary 定义 将目录 dir 添加到命令行选项 -l 指定的在其中搜索库的目录列表中 链接时搜索名为 ibrary 的库 链接器在标准目录列表中搜索库, 实际上是一个名为 liblibrary.a 的文件 链接器随后对这个文件的使用, 就好像已经通过文件名精确指定了这个文件一样 在命令中的何处写该选项是有所不同的, 链接器按照指定库文件和目标文件的顺序来处理这些文件 因此, foo.o -lz bar.o 先搜索 foo.o, 再搜索库 z, 最后搜索 bar.o 如果 bar.o 引用 libz.a 中的函数, 则可能不装载这些函数 搜索的目录包括几个标准系统目录和使用 -L 指定的任何目录 通常采用这种方法找到的文件是库文件 ( 其成员为目标文件的归档文件 ) 链接器通过浏览归档文件查找定义目前引用过但未定义的符号的成员来处理归档文件 但如果找到的文件是一个普通的目标文件, 则以通常的方式链接这个文件 使用 -l 选项 ( 如 -lmylib) 和指定文件名 ( 如 libmylib.a) 的唯一不同之处在于, -l 按照指定搜索几个目录 默认情况下, 链接器被指示在 <install-path>\lib 中搜索 -l 选项指定的库 对于安装到默认路径的编译器, 这个目录为 : c:\program Files\Microchip\MPLAB C32\lib 可使用环境变量覆盖这个操作 -nodefaultlibs 链接时不要使用标准系统库文件 仅指定的库文件会被传递给链接器 编译器可能产生对 memcmp memset 和 memcpy 的调用 这些入口通常由标准编译器库中的入口解析 当指定该选项时, 应通过其他某个机制来提供这些入口点 -nostdlib 链接时不要使用标准系统启动文件或库文件 没有启动文件, 仅指定的库文件会被传递给链接器 编译器可能产生对 memcmp memset 和 memcpy 的调用 这些入口通常由标准编译器库中的入口解析 当指定该选项时, 应通过其他某个机制来提供这些入口点 -s 从可执行文件删除所有符号表和重定位信息 -u symbol 假定 symbol 未定义, 强制链接库模块来定义这个符号 可对不同的符号多次使用 -u 来强制装载其他库模块, 这样做是合法的 -Wl,option 将 option 作为一个选项传递给链接器 如果 option 中包含逗号, 说明有多个选项通过逗号分隔开 -Xlinker option 将 option 作为一个选项传递给链接器 可使用该选项提供 MPLAB C32 C 编译器不知如何识别的特定系统链接器选项 DS51686A_CN 第 36 页 2008 Microchip Technology Inc.

41 语言相关信息 目录搜索选项 下面列出的选项指定编译器到哪里查找要搜索的目录和文件 表 1-14: 目录搜索选项 选项 -Bprefix -specs=file 定义 该选项指定在哪里查找可执行文件 库文件 头文件和编译器本身的数据文件 编译器驱动程序运行子程序 pic32-cpp pic32-cc1 pic32-as 和 pic32-ld 中的一个或多个子程序 它将其运行的每个程序加上 prefix 作为前缀 对于要运行的每个子程序, 编译器驱动程序首先使用 -B 前缀 ( 如果存在的话 ) 最后, 驱动程序在当前的 PATH 环境变量中搜索子程序 有效指定目录名的 -B 前缀也适用于链接器中的库, 因为编译器将这些选项翻译为链接器的 -L 选项 它们也适用于预处理器中的头文件, 因为编译器将这些选项翻译为预处理器的 -isystem 选项 在这种情况下, 编译器在前缀上附加 include 为覆盖当确定哪些开关传递给 pic32-cc1 pic32-as 和 pic32-ld 等时, pic32-gcc 驱动程序使用的默认设置, 在编译器读入标准 specs 文件后处理文件 可在命令行中指定多个 -specs=file, 以自左向右的顺序处理这些文件 2008 Microchip Technology Inc. DS51686A_CN 第 37 页

42 代码生成约定选项 -fflag 形式的选项指定独立于机器的标志 大多数标志都有正的形式和负的形式 -ffoo 负的形式为 -fno-foo 在下表中, 仅列出了一种形式 ( 非默认的形式 ) 表 1-15: 代码生成约定选项 选项 -fargument-alias -fargument-noalias -fargumentnoalias-global -fcall-saved-reg -fcall-used-reg -ffixed-reg 定义 指定参数之间以及参数和全局数据之间的可能关系 -fargument-alias 指定实参 ( 形参 ) 可互相引用, 并可引用全局存储 -fargument-noalias 指定实参不能互相引用, 但可引用全局存储 -fargument-noalias-global 指定实参不能互相引用, 也不能引用全局存储 每种语言都自动使用语言标准所要求的选项 不需要自己使用这些选项 将名为 reg 的寄存器视为函数保存的可分配寄存器 甚至可在其中分配临时变量或跨调用有效的变量 如果函数使用了寄存器 reg, 那么采用这种方式编译的函数将保护和恢复这个寄存器 对帧指针或堆栈指针使用这个选项是错误的 将这个选项用于在机器执行模型中有固定重要作用的其他寄存器, 将产生灾难性结果 将这个标志用于保存函数返回值的寄存器将产生另一种灾难性结果 所有模块中对这个标志的使用应该一致 将名为 reg 的寄存器视为被函数调用破坏的可分配寄存器 可将这个寄存器分配给临时变量或跨调用无效的变量 采用该选项编译的函数不会保护和恢复寄存器 reg 对帧指针或堆栈指针使用这个选项是错误的 将这个选项用于在机器执行模型中有固定重要作用的其他寄存器, 将产生灾难性结果 所有模块中对这个选项的使用应该一致 将名为 reg 的寄存器视为固定寄存器 生成的代码绝对不能引用它 ( 除非作为堆栈指针 帧指针或某个其他固定的功能 ) reg 必须为寄存器的名称, 如 -ffixed-$0 DS51686A_CN 第 38 页 2008 Microchip Technology Inc.

43 语言相关信息 表 1-15: 代码生成约定选项 ( 续 ) 选项 -fno-ident -fpack-struct -finstrumentfunctions -fpcc-structreturn -fno-short-double -fshort-enums -fverbose-asm -fno-verbose-asm 编译时在函数的入口和出口生成 instrumentation 调用 在函数入口之后和函数出口之前, 将通过当前函数的地址及其调用地址来调用下面的 profiling 函数 void cyg_profile_func_enter (void *this_fn, void *call_site); void cyg_profile_func_exit (void *this_fn, void *call_site); 第一个参数是当前函数的起始地址, 可在符号表中查找到 profiling 函数应由用户提供 函数 instrumentation 要求使用帧指针 某些优化级别禁止使用帧指针 使用 -fno-omit-frame-pointer 将禁止这一点 instrumentation 也可用于在其他函数中扩展内联的函数 profiling 调用表明从概念上来讲在哪里进入和退出内联函数 这意味着这种函数必须具有可寻址形式 如果对一个函数的所有使用都扩展内联, 这会额外增加代码长度 如果要在 C 代码中使用 extern inline, 必须提供这种函数的可寻址形式 可对函数指定属性 no_instrument_function, 在这种情况下不会进行 instrumentation 忽略 #ident 伪指令 定义 将所有结构成员无缝地压缩在一起 通常不希望使用该选项, 因为它使代码不是最优化的, 且结构成员的偏移量与系统库不相符 像长值一样, 将短 struct 和 union 值返回到存储器中, 而不是返回到寄存器中 这样做效率不高, 但其优点是可以使 MPLAB C32 编译的文件与其他编译器编译的文件兼容 短结构和联合指长度和对齐都与整型匹配的结构和联合 默认情况下, 编译器使用与 float 等价的 double 型 该选项使得 double 与 long double 等价 如果模块通过参数传递直接或通过共享缓冲空间间接共用 double 数据, 跨模块混合使用该选项可能会产生异常结果 无论使用哪个开关设置, 随产品提供的库都可正常工作 按照 enum 类型声明的可能值范围的需要, 为其分配字节 具体来说, enum 类型等价于有足够空间的最小整型 在生成的汇编代码中加入额外的注释信息以增强可读性 默认设置为 -fno-verbose-asm, 将给出额外的信息, 当比较两个汇编文件时有用 -fvolatile 将通过指针进行的所有存储器引用视为 volatile ( 易变 ) -fvolatile-global 将对外部和全局数据项的所有存储器引用视为 volatile 使用这个 开关对于 static 数据没有影响 -fvolatile-static 将对 static 数据的所有存储器引用视为 volatile 2008 Microchip Technology Inc. DS51686A_CN 第 39 页

44 1.9 通过命令行编译单个文件 本节说明如何编译和链接单个文件 为便于讨论, 假定编译器安装在 c: 驱动器的 Program Files\Microchip\MPLAB C32 目录中 因此就有下面的目录 : c:\program Files\Microchip\MPLAB C32\pic32mx\include 包含标准 C 头文件的目录 c:\program Files\Microchip\MPLAB C32\pic32mx\include\proc 包含针对 PIC32MX 器件的头文件的目录 c:\program Files\Microchip\MPLAB C32\pic32mx\lib 存放标准库文件和启动文件的库目录结构 c:\program Files\Microchip\MPLAB C32\pic32mx\include\peripheral 包含 PIC32MX 外设库头文件的目录 c:\program Files\Microchip\MPLAB C32\pic32mx\lib\proc 可查找到特定器件链接描述文件片段 寄存器定义文件和配置数据的目录 c:\program Files\Microchip\MPLAB C32\bin 顶层工具可执行文件所在的目录 PATH 环境变量包含该目录 下面是一个两数相加的简单 C 程序 使用任何文本编辑器创建下面的程序并保存为 ex1.c #include <p32xxxx.h> unsigned int x, y, z; unsigned int add(unsigned int a, unsigned int b) { return(a+b); } int main(void) { x = 2; y = 5; z = add(x,y); return 0; } 程序的第一行包含了头文件 p32xxxx.h, 这个头文件提供了该器件的所有特殊功能寄存器的定义 关于处理器头文件的更多信息, 请参见第 4 章 低级处理器控制 在 DOS 提示符下输入如下命令行来编译该程序 : C:\> pic32-gcc -o ex1.out ex1.c 命令行选项 -o ex1.out 命名输出可执行文件 ( 如果未指定 -o 选项, 则输出文件名为 a.out) 可执行文件可加载到 MPLAB IDE 中 如果需要 hex 文件, 例如要装入器件编程器中, 可以使用下面的命令 : C:\> pic32-bin2hex ex1.out 这样就生成了一个名为 ex1.hex 的 Intel hex 文件 DS51686A_CN 第 40 页 2008 Microchip Technology Inc.

45 语言相关信息 1.10 通过命令行编译多个文件 将 Add() 函数移到名为 add.c 的文件中来说明在一个应用程序中多个文件的使用 即 : 文件 1 /* ex1.c */ #include <p32xxxx.h> int main(void); unsigned int add(unsigned int a, unsigned int b); unsigned int x, y, z; int main(void) { x = 2; y = 5; z = Add(x,y); return 0; } 文件 2 /* add.c */ #include <p32xxxx.h> unsigned int add(unsigned int a, unsigned int b) { return(a+b); } 在 DOS 提示符下输入如下命令行来编译这两个文件 : C:\> pic32-gcc -o ex1.out ex1.c add.c 这个命令编译模块 ex1.c 和 add.c 编译的模块和编译器库文件链接, 并生成可执行文件 ex1.out 2008 Microchip Technology Inc. DS51686A_CN 第 41 页

46 注 : DS51686A_CN 第 42 页 2008 Microchip Technology Inc.

47 第 2 章库环境 MPLAB C32 C 编译器用户指南 2.1 简介 本章讨论 MPLAB C32 C 库的使用 2.2 主要内容 本章讨论的内容包括 : 标准 I/O 弱函数 Helper 头文件 Multilib 2.3 标准 I/O 2.4 弱函数 标准输入 / 输出库函数支持两种操作模式 : 简单和完全 简单模式通过用于 stdout stdin 和 stderr 的单字符设备上的双函数接口来支持 I/O 完全模式支持所有标准 I/O 函数 如果应用程序调用 fopen, 那么库将使用完全模式, 否则将使用简单模式 简单模式使用 4 个函数 _mon_puts _mon_write _mon_getc 和 _mon_putc 来执行 I/O, 即执行原始设备 I/O _mon_getc 的默认实现始终返回失败 ( 即, 默认情况下, 字符输入不可用 ) _mon_putc 的默认实现会向 UART2 写一个字符 它假定应用程序已经对 UART 执行了所有必要的初始化 _mon_puts 和 _mon_write 的默认实现都是简单地迭代调用 _mon_putc 所有 4 个函数都定义为弱 (weak) 函数, 所以如果需要不同的功能, 用户应用程序可以覆盖它们 关于这些函数的详细信息, 请参见 MPLAB C32 C Compiler Libraries 使用完全模式的应用程序必须提供标准的低级 POSIX I/O 函数 open read write lseek 和 close 未提供任何默认实现 关于这些函数的详细信息, 请参见 MPLAB C32 C Compiler Libraries (DS51685A) 标准库提供了低级接口的一些弱函数实现 使用该功能的用户应用程序通常会实现这些函数的更完整版本 关于特定函数的详细信息, 请参见 MPLAB C32 C Compiler Libraries ( DS51685A) 如上所述, 标准 I/O 库函数使用一组弱函数进行简单输出 :_mon_write _mon_putc _mon_puts 和 _mon_getc 标准启动代码 ( 见第 5.7 节 启动和初始化 ) 会直接调用如下一些弱函数, 并提供弱处理程序来处理引导异常和一般异常 :_on_reset _nmi_handler _bootstrap_exception_handler _general_exception_handler 和 _on_bootstrap 2008 Microchip Technology Inc. DS51686A_CN 第 43 页

48 标准库函数 exit 在返回之前会调用弱函数 _exit 用于信号的标准库函数 signal 和 raise 实现为弱函数, 它们始终返回失败 用于语言环境的标准库函数 setlocale 和 localeconv 实现为弱函数, 不执行任何操作 用于访问环境变量的标准库函数 getenv 实现为弱函数, 始终返回 NULL 2.5 HELPER 头文件 sys/attribs.h 对于许多常用属性, 提供了一些宏, 以便提高用户代码可读性 section (s) unique_section ramfunc longramfunc longcall ISR(v,ipl) ISR_AT_VECTOR(v,ipl) 应用具有段名 s 的 section 属性 应用 unique_section 属性 将具有该属性的函数定位到 RAM 函数代码段中 将具有该属性的函数定位到 RAM 函数代码段中, 并应用 longcall 属性 应用 longcall 属性 应用优先级为 ipl 的 interrupt 属性和向量号为 v 的 vector 属性 应用优先级为 ipl 的 interrupt 属性和向量号为 v 的 at_vector 属性 sys/kmem.h 系统代码可能需要在虚拟和物理地址之间, 以及在内核段地址之间转换 提供了一些宏, 帮助更方便地进行这些转换和确定地址所处的段 KVA_TO_PA(v) 将内核虚拟地址转换为物理地址 PA_TO_KVA0(pa) 将物理地址转换为 KSEG0 虚拟地址 PA_TO_KVA1(pa) 将物理地址转换为 KSEG1 虚拟地址 KVA0_TO_KVA1(v) 将 KSEG0 虚拟地址转换为 KSEG1 虚拟地址 KVA1_TO_KVA0(v) 将 KSEG1 虚拟地址转换为 KSEG0 虚拟地址 IS_KVA(v) 如果地址是内核段虚拟地址, 则值为 1, 否则值为 0 IS_KVA0(v) 如果地址是 KSEG0 虚拟地址, 则值为 1, 否则值为 0 IS_KVA1(v) 如果地址是 KSEG1 虚拟地址, 则值为 1, 否则值为 0 IS_KVA01(v) 如果地址是 KSEG0 或 KSEG1 虚拟地址, 则值为 1, 否则值为 MULTILIB 什么是 Multilib? 使用 multilib, 目标库将使用一组置换选项构建多次 Multilib 是使用这些选项进行构建所产生的一组目标库 当调用编译器 shell 来编译并链接应用程序时, shell 会选择使用相同选项构建的目标库的版本 DS51686A_CN 第 44 页 2008 Microchip Technology Inc.

49 库环境 有哪些 Multilib 可供 MPLAB C32 语言工具使用? 随 MPLAB C32 C 编译器分配的目标库使用以下选项进行构建 : 长度与速度 (-Os 与 -O3) 16 位与 32 位 (-mips16 与 -mno-mips16) 软件浮点与无浮点支持 (-msoft-float 与 -mno-float) 默认情况下, MPLAB C32 语言工具使用 -O0 -mno-mips16 和 -msoft-float 进行编译 因此, 需要关心的选项为 -Os 或 -O3 -mips16 和 -mno-float 提供了使用以下命令行选项构建的库 : 1. 默认命令行选项 2. -Os 3. -O3 4. -mips mno-float 6. -mips16 -mno-float 7. -Os -mips Os -mno-float 9. -Os -mips16 -mno-float 10. -O3 -mips O3 -mno-float 12. -O3 -mips16 -mno-float Multilib 目录的位置? 默认情况下, MPLAB C32 语言工具使用目录 <install-directory>/lib/gcc/ 来存储特定库, 使用目录 <install-directory>/<pic32mx>/lib 来存储特定于目标的库 这两个目录结构中均包含了针对以上指定的每个 multilib 组合的子目录 这些子目录分别如下 : /size 3../speed 4../mips16 5../no-float 6../mips16/no-float 7../size/mips16 8../size/no-float 9../size/mips16/no-float 10../speed/mips /speed/no-float 12../speed/mips16/no-float 2008 Microchip Technology Inc. DS51686A_CN 第 45 页

50 2.6.4 选择哪一个 Multilib 目录? 本节提供了一些示例, 以及关于选择哪一个 multilib 子目录的详细信息 1. pic32-gcc foo.c 对于该示例, 未指定任何命令行选项 ( 即, 使用默认的命令行选项 ) 这种情况下, 将使用. 子目录 2. pic32-gcc -Os foo.c 对于该示例, 指定了用于优化大小的命令行选项 ( 即, 使用了 -Os) 这种情况下, 将使用./size 子目录 3. pic32-gcc -O2 foo.c 对于该示例, 指定了进行优化的命令行选项, 但是, 该命令行选项既不优化大小也不优化空间 ( 即, 使用了 -O2) 这种情况下, 将使用. 子目录 4. pic32-gcc -Os -mips16 foo.c 对于该示例, 指定了优化大小和 MIPS16 代码的命令行选项 ( 即, 使用了 -Os 和 -mips16) 这种情况下, 将使用./size/mips16 子目录 DS51686A_CN 第 46 页 2008 Microchip Technology Inc.

51 第 3 章中断 MPLAB C32 C 编译器用户指南 3.1 简介 3.2 主要内容 中断处理对于大多数单片机应用来说都是很重要的一个方面 中断用来使软件操作与实时发生的事件同步 当发生中断时, 软件的正常执行流程被打断, 调用专门的函数来处理事件 当中断处理结束时, 恢复先前的现场信息并继续正常执行流程 PIC32MX 器件支持多个内部和外部中断源 另外, 允许高优先级中断中断任何正在处理的低优先级中断 MPLAB C32 C 编译器完全支持在 C 或行内汇编代码中进行中断处理 本章将对中断处理做一个概括介绍 本章讨论的内容包括 : 指定中断处理程序函数 将中断处理程序函数与异常向量相关联 异常处理程序 3.3 指定中断处理函数 中断处理函数用于实现现场保护和恢复, 以确保从中断返回时, 程序现场恢复进入中断前的状态 处理程序函数现场保护 C 函数的标准调用约定始终会保留 zero s0-s7 gp sp 和 fp k0 和 k1 供编译器访问和保留非 GPR 现场, 但对它们的存取始终是以原子方式进行的 ( 即, 在禁止全局中断的序列中 ), 所以不需要主动保存它们 除了标准寄存器之外, 处理程序函数还会主动保存 a0-a3 t0-t9 v0 v1 和 ra 寄存器 中断处理函数还会主动保存和恢复处理程序函数所使用的处理器状态寄存器 特别是, EPC SR hi 和 lo 寄存器会被保留为现场 优先级指定为 7 ( 最高优先级 ) 的处理程序函数将使用影子寄存器组来保留通用寄存器, 使得进入处理程序函数的应用程序代码的延时可以较短 将一个函数标记为中断处理程序 函数通过 interrupt 属性或中断 pragma 1 伪指令标记为处理程序函数 每种方法在功能上是彼此等价的 中断可以指定为具有特定优先级的处理中断, 也可以指定为在单向量模式下工作 1. 请注意, 预处理器宏在 pragma 伪指令中不会展开 2008 Microchip Technology Inc. DS51686A_CN 第 47 页

52 # pragma interrupt function-name ipln [vector [, vector-number-list]] # pragma interrupt function-name single [vector [@] 0 其中, n 处于范围 0..7 内 ( 且包括 0 和 7) iplx 说明符可以全为大写或全为小写 使用中断 pragma 伪指令指示的处理程序函数的函数定义必须紧跟在 pragma 伪指令之后且与其位于同一个翻译单元中 interrupt 属性也指示函数定义是中断处理程序 它在功能上等价于中断 pragma 伪指令 例如, 以下两个 foo 定义均指示它是优先级为 4 的中断处理函数 #pragma interrupt foo ipl4 void foo (void) 在功能上等价于 void attribute ((interrupt(ipl4))) foo (void) 3.4 将中断处理函数与异常向量相关联 共有 64 个异常向量, 编号为 0 至 63 每个中断源都按器件数据手册中的规定映射到一个异常向量 默认情况下, 在每个向量地址处会保留 4 个字的空间, 用于将中断分派给该异常源的处理程序函数 中断处理函数可以通过以下方式与中断向量相关联 : 指定为位于异常向量地址处的分派函数的目标, 或者直接定位到异常向量地址处 单个处理程序函数可以作为多个分派函数的目标 处理程序函数与一个或多个异常向量地址之间的关联可以通过中断 pragma 伪指令的子句 单独的向量 pragma 伪指令或函数声明中的向量属性指定 中断 Pragma 子句 中断 pragma 伪指令具有可选的 vector 子句, 跟随在优先级说明符之后 # pragma interrupt function-name ipl-specifier [vector [@]vector-number [, vector-number-list]] 目标为指定处理程序函数的分派函数将创建在指定向量号的异常向量地址处 符号, 那么处理程序函数本身将直接定位到该位置 例如, 以下 pragma 伪指令指定函数 foo 将创建为优先级为 4 的中断处理函数 foo 将定位到异常向量 54 的地址处 目标为 foo 的分派函数将创建在异常向量 34 的地址处 #pragma interrupt foo ipl4 34 以下 pragma 伪指令指定函数 bar 将创建为优先级为 5 的中断处理函数 bar 将定位到通用程序存储区 (.text 段 ) 中 在异常向量 23 所在的地址处将创建目标为 bar 的分派函数 #pragma interrupt bar ipl5 vector 23 DS51686A_CN 第 48 页 2008 Microchip Technology Inc.

53 中断 3.5 异常处理程序 Vector Pragma vector pragma 用于创建一个或多个目标为所指示函数的分派函数 对于使用 interrupt pragma 指定的目标函数, 它的作用就如同是使用了 vector 子句 vector pragma 的目标函数可以是任意函数, 包括以汇编或其他方式实现的外部函数 # pragma vector function-name vector vector-number [, vector-number-list] 以下 pragma 伪指令定义了一个分派函数, 它的目标是处于异常向量 54 所在的地址处的函数 foo #pragma vector foo Vector 属性 处理程序函数可以通过属性与一个或多个异常向量地址相关联 at_vector 属性指示应将处理程序函数本身放在异常向量地址处 vector 属性指示应在异常向量地址处创建分派函数 例如, 以下声明指定函数 foo 将创建为优先级为 4 的中断程序函数 foo 将定位到异常向量 54 的地址处 void attribute ((interrupt(ipl4))) attribute ((at_vector(54))) foo (void) 以下声明指定函数 foo 将创建为优先级为 4 的中断处理函数 并在异常向量 52 和 53 所在的地址处定义目标为 foo 的分派函数 void attribute ((interrupt(ipl4))) attribute ((vector(53, 52))) foo (void) PIC32MX 器件还有两个用于非中断异常的异常向量 这些异常归类为引导异常和一般异常 引导异常 复位异常是在引导代码运行时 (Status BEV =1) 发生的任何异常 所有复位异常的向量地址都是 0xBFC00380 在该地址单元, MPLAB C32 工具链会放置一条转移指令, 其目标为名为 _bootstrap_exception_handler() 的函数 在标准库中, 提供了该函数的默认弱版本, 它只是进入一个无限循环 如果用户应用程序提供了 _bootstrap_exception_handler() 的实现, 那么将改为使用该实现版本 一般异常 一般异常是引导代码之外的程序执行期间 (Status BEV =0) 发生的任何非中断异常 一般异常向量的地址对于 EBase 的偏移量为 0x Microchip Technology Inc. DS51686A_CN 第 49 页

54 在该地址单元, MPLAB C32 工具链会放置一条转移指令, 其目标为名为 _general_exception_context() 的函数 所提供的该函数的实现版本会保存现场 调用应用程序处理程序函数 恢复现场, 以及执行从异常返回的指令 所保存的现场是 hi 和 lo 寄存器, 以及除 s0-s8 之外的所有通用寄存器, s0-s8 定义为由所有被调用函数进行保留, 所以不需要在此处再次主动保存 Cause 和 Status 寄存器的值会被传递给应用程序处理函数 (_general_exception_handler()) 如果用户应用程序提供了 _general_exception_context() 的实现, 那么将改为使用该实现版本 void _general_exception_handler (unsigned cause, unsigned status); 标准库中提供了 _general_exception_handler() 弱版本的默认实现, 该实现只是进入一个无限循环 如果用户应用程序提供了 _general_exception_handler() 的实现, 那么将改为使用该实现版本 DS51686A_CN 第 50 页 2008 Microchip Technology Inc.

55 第 4 章低级处理器控制 MPLAB C32 C 编译器用户指南 4.1 简介 本章讨论 PIC32MX 器件的低级寄存器和配置的访问 4.2 主要内容 4.3 通用处理器头文件 4.4 处理器支持头文件 本章讨论的内容包括 : 通用处理器头文件 处理器支持头文件 外设库函数 特殊功能寄存器访问 CP0 寄存器访问 配置位访问 通用处理器头文件是 C 文件, 它根据使用 -mprocessor 命令行选项指定的处理器而包含正确的特定于处理器的头文件 通用处理器头文件位于 c:\program Files\Microchip\MPLAB C32\pic32mx\include ; 其中, c:\program Files\Microchip\MPLAB C32 是 MPLAB C32 工具链的安装目录 除了包含正确的特定于处理器的头文件之外, 通用处理器头文件还提供了 #define 伪指令, 使得可以使用来自汇编语言文件的约定寄存器名称 要包含通用处理器头文件, 请在源代码中使用以下语句 : #include <p32xxxx.h> 包含通用处理器头文件使得可以为 MPLAB C32 工具链所支持的任意处理器编译源代码, 而无需更改要包含的文件 特定于处理器的头文件是一些包含了在 C 或汇编语言中使用的特殊功能寄存器 (Special Function Register, SFR) 的外部声明的文件 依照约定, 每个 SFR 都使用数据手册中的相同名称进行命名 例如, WDTCON 代表看门狗定时器控制寄存器 如果寄存器含有可能关注的一些个别位, 那么还会有一个为该 SFR 定义的结构 typedef ; 其中, 结构 typedef 的名称是附加了 bits_t 的寄存器的名称 例如, WDTCONbits_t 这些个别位 ( 或位域 ) 在结构中使用数据手册中的名称进行命名 例如, 在 PIC32MX360F512L 的特定于处理器的头文件中, 供 C 使用的 WDTCON 寄存器声明为 : 2008 Microchip Technology Inc. DS51686A_CN 第 51 页

56 extern volatile unsigned int WDTCON attribute ((section("sfrs"))); typedef union { struct { unsigned WDTCLR:1; unsigned :1; unsigned SWDTPS0:1; unsigned SWDTPS1:1; unsigned SWDTPS2:1; unsigned SWDTPS3:1; unsigned SWDTPS4:1; unsigned :8; unsigned ON:1; }; struct { unsigned :2; unsigned WDTPSTA:5; unsigned :1; unsigned PWRTPSTA:3; }; struct { unsigned w:32; }; } WDTCONbits_t; extern volatile WDTCONbits_t WDTCONbits asm ("WDTCON") attribute ((section("sfrs"))); 注 : 符号 WDTCON 和 WDTCONbits 指代相同的寄存器, 解析为相同的地址, 这从 WDTCONbits 的声明就可以看出 4.5 外设库函数 用于汇编语言时, WDTCON 寄存器声明为 :.extern WDTCON 特定于处理器的头文件位于 c:\program Files\Microchip\MPLAB C32\pic32mx\include\proc; 其中, c:\program Files\Microchip\MPLAB C32 是 MPLAB C32 工具链的安装目录 要包含特定于处理器的头文件, 建议您包含通用处理器头文件 ( 见第 4.3 节 通用处理器头文件 ); 但是, 如果您希望特别调用特定于处理器的头文件, 请在源文件中使用以下语句 ( 示例假定是为 PIC32MX360F512L 包含特定于处理器的头文件 ): #include <proc/p32mx360f512l.h> 随编译器工具提供的外设库函数支持 PIC32MX 器件的许多外设 关于所提供的函数的详细信息, 请参见 MPLAB C32 C 编译器函数库 (DS51685A_CN) DS51686A_CN 第 52 页 2008 Microchip Technology Inc.

untitled

untitled C 8051 MCU SPI EEPROM Alexandru Valeanu Microchip Technology Inc. Microchip Technology 25XXX EEPROM SPI 25XXX EEPROM SO 25XXX EEPROM 3MHz 20 MHz SPI HOLD 25XXX EEPROM EEPROM MCU HOLD 25XXX EEPROM SPI EEPROM

More information

00872a.book

00872a.book 从 MCP2510 升 级 至 MCP2515 作 者 : 介 绍 Pat Richards Microchip Technology Inc. 开 发 MCP2510 独 立 CAN 控 制 器 的 初 衷 是 赋 予 CAN 系 统 和 模 块 设 计 人 员 更 多 的 灵 活 性, 允 许 他 们 为 自 己 的 应 用 选 择 最 好 的 处 理 器 使 用 MCP2510 不 会 使 设

More information

61146A.book

61146A.book PIC32 2008 Microchip Technology Inc. DS61146A_CN Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Digital Millennium Copyright Act Microchip

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

01262B.book

01262B.book 使用 C30 编译器实现单片机与片外串行 SRAM 的通信 作者 : 引言 Martin Bowman Microchip Technology Inc. 适用于 Microchip 的 dspic DSC 和 PIC24 系列单片机的 C30 编译器为寻址外部存储器提供了一个解决方案 该编译器支持这样的功能, 即允许用户按照访问 MCU 的片内存储器的方式来访问外部存储器 本应用笔记主要介绍如何使用

More information

MCP47x6_DaughterBoard.book

MCP47x6_DaughterBoard.book MCP47X6 PICtail Plus 子 板 用 户 指 南 DS51932B_CN 请 注 意 以 下 有 关 Microchip 器 件 代 码 保 护 功 能 的 要 点 : Microchip 的 产 品 均 达 到 Microchip 数 据 手 册 中 所 述 的 技 术 指 标 Microchip 确 信 : 在 正 常 使 用 的 情 况 下, Microchip 系 列 产 品

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

华恒家庭网关方案

华恒家庭网关方案 LINUX V1.5 1 2 1 2 LINUX WINDOWS PC VC LINUX WINDOWS LINUX 90% GUI LINUX C 3 REDHAT 9 LINUX PC TFTP/NFS http://www.hhcn.com/chinese/embedlinux-res.html minicom NFS mount C HHARM9-EDU 1 LINUX HHARM9-EDU

More information

EK-STM32F

EK-STM32F STMEVKIT-STM32F10xx8 软 件 开 发 入 门 指 南 目 录 1 EWARM 安 装... 1 1.1 第 一 步 : 在 线 注 册... 1 1.2 第 二 步 : 下 载 软 件... 2 1.3 第 三 步 : 安 装 EWARM... 3 2 基 于 STMEVKIT-STM32F10xx8 的 示 例 代 码 运 行... 6 2.1 GPIO Demo... 6 2.2

More information

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63> 第三章 Q3 1 1. 省略了 I/O 操作的复杂逻辑, 易实现, 耗费低 ; 2. 可以利用丰富的内存寻址模式实现灵活的 I/O 操作 Q3 2 假设存储单元 ds1 处寄存器地址为 0x2000, 代码如下 #define ds1 0x2000 while ( *ds1 == 0 ) ; Q3 3 假设设备 (dev1) 中有两个寄存器 ds1 和 dd1,dev1 的地址为 0x1000,ds1

More information

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 C C trio@seu.edu.cn C C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 Week3 C Week5 Week5 Memory & Pointer

More information

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式] 函数 Function 如何重用代码 How to reuse code 3 4 = 3*3*3*3 3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code) 3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad! 使用函数 (with a function) 使用函数 (with a function) 使用函数 (with a function)

More information

51284E.book

51284E.book MPLAB C30 C 编译器用户指南 2006 Microchip Technology Inc. DS51284E_CN 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一 目前, 仍存在着恶意

More information

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha CYPOK CYPOK 1 UltraEdit Project-->Install Language Tool: Language Suite----->hi-tech picc Tool Name ---->PICC Compiler Executable ---->c:hi-picinpicc.exe ( Command-line Project-->New Project-->File Name--->myc

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

untitled

untitled MCP3421 DS51683A_CN Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Digital Millennium Copyright Act Microchip Microchip Technology Inc. Microchip

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

ICD ICD ICD ICD ICD

ICD ICD ICD ICD ICD MPLAB ICD2 MPLAB ICD2 PIC MPLAB-IDE V6.0 ICD2 usb PC RS232 MPLAB IDE PC PC 2.0 5.5V LED EEDATA MPLAB ICD2 Microchip MPLAB-IDE v6.0 Windows 95/98 Windows NT Windows 2000 www.elc-mcu.com 1 ICD2...4 1.1 ICD2...4

More information

_汪_文前新ok[3.1].doc

_汪_文前新ok[3.1].doc 普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向

More information

51 C 51 isp 10 C PCB C C C C KEIL

51 C 51 isp 10   C   PCB C C C C KEIL http://wwwispdowncom 51 C " + + " 51 AT89S51 In-System-Programming ISP 10 io 244 CPLD ATMEL PIC CPLD/FPGA ARM9 ISP http://wwwispdowncom/showoneproductasp?productid=15 51 C C C C C ispdown http://wwwispdowncom

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

CTMU Temperature Measurement AN.book

CTMU Temperature Measurement AN.book 利用 PIC MCU 中的 CTMU 测量温度 TB3016 作者 : 最新一代 PIC24F 和 PIC18F 器件包含的充电时间测量单元 (Charge Time Measurement Unit,CTMU) 使用恒流源来计算电容值的变化以及事件的间隔时间 运用半导体物理学的基本原理, 同样的电流源也可用来测量温度 这允许使用普通而廉价的二极管来取代相对昂贵的热敏电阻和温度传感器 本技术简介描述了使用

More information

封面.PDF

封面.PDF Microsoft C Writing Clean Code Microsoft Techniques for Developing Bug-free C Programs Steve Maguire 1 1 2 8 3 31 4 53 5 60 6 75 7 98 8 115 129 A 130 B 133 C 140 160 Beth Joseph Julia Maguire lint

More information

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 pnzwzw@163.com C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

More information

C语言的应用.PDF

C语言的应用.PDF AVR C 9 1 AVR C IAR C, *.HEX, C,,! C, > 9.1 AVR C MCU,, AVR?! IAR AVR / IAR 32 ALU 1KBytes - 8MBytes (SPM ) 16 MBytes C C *var1, *var2; *var1++ = *--var2; AVR C 9 2 LD R16,-X ST Z+,R16 Auto (local

More information

21928a.book

21928a.book PS080, PowerTool 800 开发软件用户指南 2005 Microchip Technology Inc. DS21928A_CN 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

51284F.book

51284F.book MPLAB C30 C 编译器用户指南 2007 Microchip Technology Inc. DS51284F_CN 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一 目前, 仍存在着恶意

More information

untitled

untitled A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (

More information

21999a_cn.book

21999a_cn.book 1.5A 低 电 压 低 静 态 电 流 LDO 稳 压 器 MCP1727 特 性 输 出 电 流 能 力 为 1.5A 输 入 工 作 电 压 范 围 :2.3V 至 6.0V 可 调 输 出 电 压 范 围 :0.8V 至 5.0V 标 准 固 定 输 入 电 压 : - 0.8V 1.2V 1.8V 2.5V 3.0V 3.3V 和 5.0V 可 根 据 需 要 提 供 其 他 固 定 输

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

61127c_cn.book

61127c_cn.book 1 第 1 章 简 介 简 介 目 录 本 章 包 括 下 列 主 题 : 1.1 简 介... 1-2 1.2 本 手 册 的 目 标... 1-2 1.3 器 件 结 构... 1-2 1.4 开 发 支 持... 1-4 1.5 样 式 和 符 号 约 定... 1-4 1.6 相 关 文 档... 1-6 1.7 版 本 历 史... 1-7 2010 Microchip Technology

More information

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor 1 4.1.1.1 (Load) 14 1.1 1 4.1.1.2 (Save) 14 1.1.1 1 4.1.2 (Buffer) 16 1.1.2 1 4.1.3 (Device) 16 1.1.3 1 4.1.3.1 (Select Device) 16 2 4.1.3.2 (Device Info) 16 2.1 2 4.1.3.3 (Adapter) 17 2.1.1 CD-ROM 2 4.1.4

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

51284H.book

51284H.book 用于 PIC24 MCU 和 dspic DSC 的 MPLAB C 编译器用户指南 2008 Microchip Technology Inc. DS51284H_CN 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一

More information

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; Memory & Pointer trio@seu.edu.cn 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,

More information

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023) ( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.

More information

第5章:汇编语言程序设计

第5章:汇编语言程序设计 第 5 章 : 汇编语言程序设计 程 汇编语言指令格式 系统伪指令 存储器选择方式 常用子程序 1 汇编语言程序设计 PIC 指令系统 语言系统 指 CPU 编 器语言 器语言 器语言 设计 用 语言 设计 语言 汇编语言 2 汇编语言指令格式 汇编语言指令格式 ( 指令 ) label opcode operand comment 指令 用 存 指令 指令语 3 汇编语言指令格式 1 指令 用 指令

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC LCD PIC 单片机解决方案 集成 LCD 驱动器模块的 PIC 单片机 www.microchip.com/lcd ,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC,

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

目 录

目 录 1 Quick51...1 1.1 SmartSOPC Quick51...1 1.2 Quick51...1 1.3 Quick51...2 2 Keil C51 Quick51...4 2.1 Keil C51...4 2.2 Keil C51...4 2.3 1 Keil C51...4 2.4 Flash Magic...9 2.5 ISP...9 2.6...10 2.7 Keil C51...12

More information

TB3109 PIC32MX 器件中与 USB 模块相关的更改 USB 模块中断位 ( 即 USBIF USBIE USBIP 和 USBIS 位 ) 的位置变化会影响 PIC32MX 器件上的 USB 协议栈操作 表 1 给出了所列 PIC32MX 器件系列中 USBIF USBIE USBIP

TB3109 PIC32MX 器件中与 USB 模块相关的更改 USB 模块中断位 ( 即 USBIF USBIE USBIP 和 USBIS 位 ) 的位置变化会影响 PIC32MX 器件上的 USB 协议栈操作 表 1 给出了所列 PIC32MX 器件系列中 USBIF USBIE USBIP 在 v2013-06-15 MLA USB 设备和主机协议栈中更新 PIC32MX 支持 TB3109 简介 我们提供适合 PIC32MX MCU 的 Microchip 应用程序库 (Microchip Libraries for Applications,MLA), 但未计划向 MLA 添加新功能 v2013-06-15 MLA USB 协议栈本质上支持所有适用的 PIC32MX MCU 器件

More information

0507A_Auto Tech_Microchip

0507A_Auto Tech_Microchip 汽 车 无 线 安 全 接 入 技 术 解 决 方 案 Youbok Lee 主 任 工 程 师 Willie Fitzgerald 产 品 营 销 总 监 Microchip Technology Inc. 引 言 全 球 汽 车 半 导 体 面 临 极 大 的 市 场 机 会, 而 汽 车 设 计 工 程 师 正 在 应 对 高 性 价 比 的 性 能 增 强 功 耗 小 尺 寸 和 安 全 性

More information

PIC32 Starter Kit User’s Guide

PIC32 Starter Kit User’s Guide PIC32 入门工具包用户指南 2010 Microchip Technology Inc. DS61159B_CN 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一 目前, 仍存在着恶意

More information

Prepare.ppt [兼容模式]

Prepare.ppt [兼容模式] 课前实验 Linux 操作系统的安装 C 语言编程环境的设置 TinyOS 开发环境的设置 一 实验目的 1 学会在计算机或虚拟机环境中安装 Linux 操作系统 2 学会在 Linux 下进行 C 语言编程 3 掌握交叉编译开发, 学会在 Linux 下设置 TinyOS 开发环 境, 能够完成基于 NesC 的 TinyOS 应用程序开发 二 Linux 操作系统的安装 14.04.4-desktop-amd64.iso

More information

33023A.book(31001A_cn.fm)

33023A.book(31001A_cn.fm) 1 第 1 章 简 介 简 介 目 录 本 章 包 括 下 面 一 些 主 要 内 容 : 1.1 简 介...1-2 1.2 本 手 册 的 宗 旨... 1-3 1.3 器 件 结 构... 1-4 1.4 开 发 支 持... 1-6 1.5 器 件 种 类... 1-7 1.6 格 式 和 符 号 的 约 定... 1-12 1.7 相 关 文 档... 1-14 1.8 相 关 应 用 笔

More information

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un Linux C July 27, 2016 Contents 1 Linux IDE 1 2 GCC 3 2.1 hello.c hello.exe........................... 5 2.2............................... 9 2.2.1 -Wall................................ 9 2.2.2 -E..................................

More information

C++ 程式設計

C++ 程式設計 C C 料, 數, - 列 串 理 列 main 數串列 什 pointer) 數, 數, 數 數 省 不 不, 數 (1) 數, 不 數 * 料 * 數 int *int_ptr; char *ch_ptr; float *float_ptr; double *double_ptr; 數 (2) int i=3; int *ptr; ptr=&i; 1000 1012 ptr 數, 數 1004

More information

untitled

untitled 不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int

More information

untitled

untitled 2006 6 Geoframe Geoframe 4.0.3 Geoframe 1.2 1 Project Manager Project Management Create a new project Create a new project ( ) OK storage setting OK (Create charisma project extension) NO OK 2 Edit project

More information

c_cpp

c_cpp C C++ C C++ C++ (object oriented) C C++.cpp C C++ C C++ : for (int i=0;i

More information

PIC18F65J90/85J90 Product Brief

PIC18F65J90/85J90 Product Brief 采用纳瓦技术内置 LCD 驱动器的 64/80 引脚高性能单片机 单片机的特殊性能 : 闪存程序存储器可承受 1000 次擦写 ( 典型值 ) 闪存数据保存时间为 20 年 ( 典型值 ) 软件控制下可自编程 中断具有优先级 8 x 8 单周期硬件乘法器 扩展的看门狗定时器 (Watchdog Timer, WDT): - 周期从 4 ms 到 131s, 可编程设定 通过两个引脚可进行在线串行编程

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

Converting image (bmp/jpg) file into binary format

Converting image (bmp/jpg) file into binary format RAiO Image Tool 操作说明 Version 1.0 July 26, 2016 RAiO Technology Inc. Copyright RAiO Technology Inc. 2013 RAiO TECHNOLOGY INC. www.raio.com.tw Revise History Version Date Description 0.1 September 01, 2014

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

ebook8-30

ebook8-30 3 0 C C C C C C++ C + + C++ GNU C/C++ GNU egcs UNIX shell s h e l l g a w k P e r l U N I X I / O UNIX shell awk P e r l U N I X C C C C C C U N I X 30.1 C C U N I X 70 C C U N I X U N I X U N I X C Dennis

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

科学计算的语言-FORTRAN95

科学计算的语言-FORTRAN95 科 学 计 算 的 语 言 -FORTRAN95 目 录 第 一 篇 闲 话 第 1 章 目 的 是 计 算 第 2 章 FORTRAN95 如 何 描 述 计 算 第 3 章 FORTRAN 的 编 译 系 统 第 二 篇 计 算 的 叙 述 第 4 章 FORTRAN95 语 言 的 形 貌 第 5 章 准 备 数 据 第 6 章 构 造 数 据 第 7 章 声 明 数 据 第 8 章 构 造

More information

21498c_cn.book

21498c_cn.book 精密温度 - 电压转换器 特性 工作电压范围 : - TC147:2.7V 至 4.4V - TC147A:2.5V 至 5.5V 宽温度测量范围 : - -4 C 至 +125 C 温度转换精度高 : - 在 25 C 时为 ±2 C ( 最大值 ) 线性温度斜率 :1 mv/ C ( 典型值 ) 提供 3 引脚 SOT-23B 封装 低工作电流 : - 35 µa 典型值 应用 移动电话 电源过热关断控制

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

Andes Technology PPT Temp

Andes Technology PPT Temp 晶心科技線上技術研討會 AndesCore 便捷的全 C 嵌入式编程 晶心科技市場及技術服務部毛礼杰軟件經理 WWW.ANDESTECH.COM 大纲 系统初始化介绍 异常和中断说明 全 C 语法例子说明 总结 2 CPU 相关特性 1: 中断向量表 系统初始化 (1) 2: 系统寄存器 通常需要用 assembly( 汇编 / 组合 ) 语言来操作 AndesCore 全 C 嵌入式编程 C 扩展语法

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc 2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V 正式版本

第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V 正式版本 V3s 项目 CamDroid 编译第三方程序 / V1.0 第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V1.0 2014-04-23 正式版本 第 2 页共 9 页 目录 1. 交叉编译环境... 3 2. 第三方库的 Makefile 示例... 4 3. 第三方应用 Makefile 示例... 5 4. 第三方应用 CamLinux.mk 示例... 6 5. 常见错误...

More information

文件名

文件名 MICROCHIP PIC10F200/202/204/206 6 8 FLASH PIC10F200 PIC10F202 PIC10F204 PIC10F206 RISC CPU 33 12 8 8 4MHz 1 s 4MHz 1% TM ICSP TM ICD POR DRT WDT RC MCLR I/O /CMOS < 350 A @ 2V 4 MHz 100 na @ 2V FLASH 10000

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

MSP430µ¥Æ¬»úCÓïÑԺͻã±àÓïÑÔ»ìºÏ±à³Ì.doc

MSP430µ¥Æ¬»úCÓïÑԺͻã±àÓïÑÔ»ìºÏ±à³Ì.doc MSP430 单片机 C 语言和汇编语言混合编程 Mixing C and Assembler With the MSP430 刘玉宏 Liu,Yuhong 摘要 : 为了发挥 C 语言和汇编语言各自的优点, 二者需要相互调用函数 本文首先介绍了 MSP430 单片机的 C 语言函数的参数传递规则, 然后对 C 语言和汇编语言的混合编程进行了详细描述, 最后给出应用实例 关键字 :MSP430 单片机

More information

工作原理 脉冲血氧仪基于氧合血红蛋白 (HbO 2 ) 和脱氧血红蛋白 (Hb) 的红光 ( 波长为 nm) 和红外光 ( 波长为 nm) 吸收特性来监测人体血液的氧饱和度 (SpO 2 ) 脉冲血氧仪会交替地闪烁红光和红外光, 光线穿过手指到达光电二极管 HbO

工作原理 脉冲血氧仪基于氧合血红蛋白 (HbO 2 ) 和脱氧血红蛋白 (Hb) 的红光 ( 波长为 nm) 和红外光 ( 波长为 nm) 吸收特性来监测人体血液的氧饱和度 (SpO 2 ) 脉冲血氧仪会交替地闪烁红光和红外光, 光线穿过手指到达光电二极管 HbO 使用 Microchip 的 dspic 数字信号控制器 (DSC) 和模拟器件实现脉冲血氧仪设计 作者 : Zhang Feng Microchip Technology Inc. 简介 脉冲血氧仪是一种用于监测患者血氧饱和度和心率的非侵入式医疗设备 本应用笔记演示了如何使用 Microchip 的 dspic 数字信号控制器 (Digital Signal Controller, DSC) 和模拟器件来实现高精度脉冲血氧仪

More information

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO Car DVD New GUI IR Flow User Manual V0.1 Jan 25, 2008 19, Innovation First Road Science Park Hsin-Chu Taiwan 300 R.O.C. Tel: 886-3-578-6005 Fax: 886-3-578-4418 Web: www.sunplus.com Important Notice SUNPLUS

More information

untitled

untitled MODBUS 1 MODBUS...1 1...4 1.1...4 1.2...4 1.3...4 1.4... 2...5 2.1...5 2.2...5 3...6 3.1 OPENSERIAL...6 3.2 CLOSESERIAL...8 3.3 RDMULTIBIT...8 3.4 RDMULTIWORD...9 3.5 WRTONEBIT...11 3.6 WRTONEWORD...12

More information

01277A_cn.book

01277A_cn.book 使用 C32 编译器进行串行 SRAM 器件与 PIC32 MCU 的接口设计 作者 : 引言 Pinakin K Makwana Microchip Technology Inc. Microchip 的串行 SRAM 产品线提供了向应用添加附加 RAM 的一种新方法 这些器件采用 8 引脚小型封装以及 SPI 接口, 使设计人员提升系统的灵活性 Microchip Technology 的 23XXXX

More information

00686A.Book

00686A.Book 理解和使用监控电路 AN686 概要 本应用笔记讨论了什么是单片机监控器件, 为什么需要这些器件以及在选择这些器件时需要考虑的一些因素 监控器件属于一个很广的范畴, 它涵盖了上电复位 (Power on Reset,POR) 器件 欠压检测 (Brown-Out Detect,BOD) 器件和看门狗定时器器件 本应用笔记将仅讨论具有 POR 和 BOD 功能的监控器件 监控电路的工作 监控电路可用于几种不同的应用,

More information

41632B.book

41632B.book 互 补 波 形 发 生 器 (CWG) 可 配 置 逻 辑 单 元 (CLC) 和 数 控 振 荡 器 (NCO) 外 设 技 巧 与 诀 窍 简 介 Microchip 致 力 于 不 断 向 客 户 提 供 体 积 更 小 速 度 更 快 使 用 更 简 便 与 运 行 更 可 靠 的 创 新 产 品 我 们 的 闪 存 PIC MCU 已 广 泛 应 用 于 日 常 生 活 中 从 烟 雾 探

More information

70641A.book

70641A.book AN1299 调整指南 1.1 配置双电流检测电阻模式 本文档介绍了 AN1299 PMSM 无传感器 FOC 的单电流检测电阻三相电流重构算法 (DS01299A_CN) 中所述算法调整所需的步骤和设置 1. 第一步, 用户需完成 AN1078 中的调整过程, 其中介绍了在具体电机和硬件上运行滑模控制器 (Slide Mode Controller, SMC) 所需的全部步骤 2. 应用运行后,

More information

F515_CS_Book.book

F515_CS_Book.book /USB , ( ) / L R 1 > > > 2, / 3 L 1 > > > 2 + - 3, 4 L 1 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 ( ) GSM 手机已连接到 GSM 网络 指示条越多, 接收质量越好 2 ...........................4.............................. 4 Micro SD (

More information

ebook15-2

ebook15-2 2 U N I X 2.1 U N I X C U N I X U N I X 80 U N I X ( ) U N I X 2.2 UNIX 2.2.1 ANSI C 1989 C A N S I X 3. 159-1989 ANSI 1989 ISO/IEC 9899:1990 A N S I ( I S O ) ANSI C C UN I X C ANSI 1989 4 Plauger 1992;Kernighan

More information

39697b.book

39697b.book 第 9 章看门狗定时器 (WDT) 目录 本章包括下列主题 : 9.1 简介...9-2 9.2 WDT 工作原理... 9-3 9.3 寄存器映射... 9-7 9.4 设计技巧... 9-8 9.5 相关应用笔记... 9-9 9.6 版本历史... 9-10 9 看门狗定时器 (WDT) 2010 Microchip Technology Inc. DS39697B_CN 第 9-1 页 PIC24F

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

01018A.book

01018A.book 使用 C18 编译器进行 SPI 串行 EEPROM 与 PIC18 单片机的接口设计 作者 : 引言 Chris Parris Microchip Technology Inc. Microchip Technology 生产的 25XXX 系列串行 EEPROM 兼容 SPI 通信标准, 最大时钟频率范围从 3MHz 到 20 MHz 许多时候, 在设计利用串行 EEPROM 器件的应用时, 使用非专用

More information

00966A.book

00966A.book SPI 串行 EEPROM 与 PICmicro 单片机的接口设计 作者 : 引言 Martin Kvasnicka Microchip Technology Inc. 目前市场上有许多种单片机用在嵌入式控制系统设计中, 这些嵌入式控制系统中的很大一部分都要用到非易失性存储器 由于串行 EEPROM 具有封装尺寸小, 存储容量灵活, 对 I/O 引脚要求低, 和低功耗低成本等特点, 已成为非易失性存储器的首选

More information

目 录(目录名)

目  录(目录名) 目录 目录...1-1 1.1 域名解析配置命令... 1-1 1.1.1 display dns domain... 1-1 1.1.2 display dns dynamic-host... 1-1 1.1.3 display dns server... 1-2 1.1.4 display ip host... 1-3 1.1.5 dns domain... 1-4 1.1.6 dns resolve...

More information

PIC32 USB Starter Kit II User’s Guide

PIC32 USB Starter Kit II User’s Guide PIC32 USB 入门工具包 II 用户指南 DS61158B_CN 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一 目前, 仍存在着恶意 甚至是非法破坏代码保护功能的行为 就我们所知,

More information

ebook140-9

ebook140-9 9 VPN VPN Novell BorderManager Windows NT PPTP V P N L A V P N V N P I n t e r n e t V P N 9.1 V P N Windows 98 Windows PPTP VPN Novell BorderManager T M I P s e c Wi n d o w s I n t e r n e t I S P I

More information

言1.PDF

言1.PDF MSP430 WINDOWS WORKBENCH MSP430 Flash Green MCU Flash Flash MCU MSP430 16 RISC 27 125ns 1.8V~3.6V A/D 6 s MSP430 10 ESD MSP430 MSP430 10 MSP430 2001 MSP430 Windows Workbench Interface Guide Windows Workbench

More information

Microsoft PowerPoint - 10 模板 Template.pptx

Microsoft PowerPoint - 10 模板 Template.pptx 模板 Tempalte 泛型编程的需要 Why Templates? 设想你对整数类型实现了一个排序算法 : void sort(int *is,int n); 用该函数可以对实 复数或工资单排序吗? 模板可以复用源代码 - 泛型编程. inline void Swap( int &x, int &y){ int t = x; x = y; y =t; inline void Swap(double

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

FPGAs in Next Generation Wireless Networks WPChinese

FPGAs in Next Generation Wireless Networks WPChinese FPGA 2010 3 Lattice Semiconductor 5555 Northeast Moore Ct. Hillsboro, Oregon 97124 USA Telephone: (503) 268-8000 www.latticesemi.com 1 FPGAs in Next Generation Wireless Networks GSM GSM-EDGE 384kbps CDMA2000

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc 2 5 8 11 0 1. 13 2. 15 3. 18 1 1. 22 2. 25 3. 27 2 1. 35 2. 38 3. 41 4. 43 5. 48 6. 50 3 1. 56 2. 59 3. 63 4. 65 5. 69 13 22 35 56 6. 74 7. 82 8. 84 9. 87 10. 97 11. 102 12. 107 13. 111 4 114 1. 114 2.

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63>

<4D F736F F D20CAB5D1E BACDBBE3B1E0D3EFD1D4B5C4BBECBACFB1E0B3CCCAB5D1E92E646F63> 1 实验目的 实验 2 C 和汇编语言的混合编程实验 学习在 C 程序中使用嵌入式汇编编写程序 了解嵌入式汇编的格式 语言特点 2 实验设备 S3C2410 开发板 ADS1.2 集成开发环境,JTAG 调试器 串口连接线 3 实验原理 在 ARM 的应用开发中,C 语言功能强大且容易编写程序, 但是汇编程序在底层的操作仍然具有 C 程序无法替代的功能, 有时候我们需要在 C 程序中嵌入汇编程序来完成一些直接对底层的诸如寄存器的操作

More information

学习MSP430单片机推荐参考书

学习MSP430单片机推荐参考书 MSP430 16 MSP430 C MSP430 C MSP430 FLASH 16 1 CPU 16 ALU 16 PC SP SR R4~R15 2 3 00-FFH 100-1FFH 4 5 1 2 51 24 27 6 1 2 3 4 5 6 4 12 SR SP SR CPU SR CPU C Z N GIE CPUOff CPU OscOff SCG0 SCG1 CPU EXIT SP

More information

WinMDI 28

WinMDI 28 WinMDI WinMDI 2 Region Gate Marker Quadrant Excel FACScan IBM-PC MO WinMDI WinMDI IBM-PC Dr. Joseph Trotter the Scripps Research Institute WinMDI HP PC WinMDI WinMDI PC MS WORD, PowerPoint, Excel, LOTUS

More information

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式] 用户定义类型 User-defined Datatypes classes and structs 几何向量 (Geometry Vector) 二维平面上的向量由起点和终点构成 每个点包含两个坐标 (x, y), 因此一个向量需要四个实数表示 Start= (0.9,1.5) Start= (0.4,0.8) int main() { double xstart = 0.4; double xend

More information

目录 简介 概念 解决方案 / 实现 相关资源... 7 Microchip 网站... 8 变更通知客户服务... 8 客户支持... 8 Microchip 器件代码保护功能... 8 法律声明... 9 商标... 9 DNV 认证的质量管理体系

目录 简介 概念 解决方案 / 实现 相关资源... 7 Microchip 网站... 8 变更通知客户服务... 8 客户支持... 8 Microchip 器件代码保护功能... 8 法律声明... 9 商标... 9 DNV 认证的质量管理体系 什么是 ICM? 如何将 ICM 用于加密 简介 完整性检查监控器 (Integrity Check Monitor,ICM) 是一个 DMA 控制器, 可使用 Cortex M7 MCU 内存 (ICM 描述符区 ) 中的传输描述符在多个存储区上执行哈希计算 ICM 集成了用于哈希的安全哈希算法 (Secure Hash Algorithm,SHA) 引擎 基于 SHA 的哈希适合用于密码验证 质询哈希身份验证

More information

Microsoft Word - AN3259C

Microsoft Word - AN3259C www.maxim-ic.com.cn 应用笔记 3259 DS31256 Envoy - 寄存器转储列程 概述本应用笔记提供了将 DS31256 的寄存器 排队程序 描述符和 FIFO RAM 的内容转储到一个文件的程序代码 这些数据在 DS31256 无法正常工作时非常关键, 为进一步的研究和调试提供了重要信息 例如, 寄存器数据经过转储后可以显示每个 DS31256 寄存器的设置 为了保证正确地设置器件,

More information