51284F.book

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "51284F.book"

Transcription

1 MPLAB C30 C 编译器用户指南 2007 Microchip Technology Inc. DS51284F_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 徽标 microid MPLAB PIC PICmicro PICSTART PRO MATE rfpic 和 SmartShunt 均为 Microchip Technology Inc. 在美国和其他国家或地区的注册商标 AmpLab FilterLab Linear Active Thermistor Migratable Memory 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 FlexROM fuzzylab In-Circuit Serial Programming ICSP ICEPIC Mindi MiWi MPASM MPLAB Certified 徽标 MPLIB MPLINK PICkit PICDEM PICDEM.net PICLAB PICtail PowerCal PowerInfo PowerMate PowerTool REAL ICE rflab Select Mode Smart Serial SmartTel Total Endurance UNI/O WiperLock 和 ZENA 均为 Microchip Technology Inc. 在美国和其他国家或地区的商标 SQTP 是 Microchip Technology Inc. 在美国的服务标记 在此提及的所有其他商标均为各持有公司所有 2007, Microchip Technology Inc. 版权所有 Microchip 位于美国亚利桑那州 Chandler 和 Tempe 与位于俄勒冈州 Gresham 的全球总部 设计和晶圆生产厂及位于美国加利福尼亚州和印度的设计中心均通过了 ISO/TS-16949:2002 认证 公司在 PIC MCU 与 dspic DSC KEELOQ 跳码器件 串行 EEPROM 单片机外设 非易失性存储器和模拟产品方面的质量体系流程均符合 ISO/TS :2002 此外, Microchip 在开发系统的设计和生产方面的质量体系也已通过了 ISO 9001:2000 认证 DS51284F_CN 第 ii 页 2007 Microchip Technology Inc.

3 MPLAB C30 用户指南 目录 前言... 1 第 1 章编译器概述 1.1 简介 主要内容 MPLAB C30 介绍 MPLAB C30 及其他开发工具 MPLAB C30 的功能... 9 第 2 章 MPLAB C30 与 ANSI C 的差别 2.1 简介 主要内容 关键字差别 语句差别 表达式差别 第 3 章使用 MPLAB C30 C 编译器 3.1 简介 主要内容 概述 文件命名约定 选项 环境变量 预定义常量 通过命令行编译单个文件 通过命令行编译多个文件 Microchip Technology Inc. DS51284F_CN 第 iii 页

4 MPLAB C30 用户指南 第 4 章 MPLAB C30 C 编译器运行时环境 4.1 简介 主要内容 地址空间 代码段和数据段 启动和初始化 存储空间 存储模型 定位代码和数据 软件堆栈 C 堆栈使用 C 堆使用 函数调用约定 寄存器约定 位反转寻址和模寻址 程序空间可视性 (PSV) 的使用 第 5 章数据类型 5.1 简介 主要内容 数据表示 整型 浮点型 指针 第 6 章器件支持文件 6.1 简介 主要内容 处理器头文件 寄存器定义文件 使用特殊功能寄存器 使用宏 从 C 代码访问 EEDATA 仅适用于 dspic30f dsc 第 7 章中断 7.1 简介 主要内容 编写中断服务程序 写中断向量 中断服务程序现场保护 中断响应时间 中断嵌套 允许 / 禁止中断 中断服务程序和主程序代码共用存储空间 中断服务程序中 PSV 的使用 DS51284F_CN 第 iv 页 2007 Microchip Technology Inc.

5 目录 第 8 章汇编语言和 C 模块混合编程 8.1 简介 主要内容 在汇编语言中使用 C 变量和 C 函数 使用行内汇编 附录 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 流和文件 A.19 tmpfile A.20 errno A.21 存储器 A.22 abort A.23 exit A.24 getenv A.25 系统 A.26 strerror 附录 B MPLAB C30 内建函数 B.1 简介 B.2 内建函数列表 附录 C MPLAB C30 C 编译器诊断 C.1 简介 C.2 错误 C.3 警告 Microchip Technology Inc. DS51284F_CN 第 v 页

6 MPLAB C30 用户指南 附录 D MPLAB C18 与 MPLAB C30 C 编译器 D.1 简介 D.2 主要内容 D.3 数据格式 D.4 指针 D.5 存储类别 D.6 堆栈使用 D.7 存储限定符 D.8 预定义宏名 D.9 整型的提升 D.10 字符串常量 D.11 快速操作存储区 D.12 行内汇编 D.13 Pragma 伪指令 D.14 存储模型 D.15 调用约定 D.16 启动代码 D.17 编译器管理的资源 D.18 优化 D.19 目标模块格式 D.20 实现定义的操作 D.21 位域 附录 E 不赞成使用的特性 E.1 简介 E.2 主要内容 E.3 预定义常量 附录 F ASCII 字符集附录 G GNU 自由文档许可证 G.1 前言 G.2 适用性和定义 G.3 逐字复制 G.4 大量复制 G.5 修改 G.6 合并文档 G.7 文档的合集 G.8 独立作品的聚合体 G.9 翻译 G.10 终止 G.11 本许可证的未来修订版本 术语表 索引 全球销售及服务网点 DS51284F_CN 第 vi 页 2007 Microchip Technology Inc.

7 MPLAB C30 用户指南 前言 客户须知 所有文档均会过时, 本文档也不例外 Microchip 的工具和文档将不断演变以满足客户的需求, 因此实际使用中有些对话框和 / 或工具说明可能与本文档所述之内容有所不同 请访问我们的网站 ( 获取最新文档 文档均标记有 DS 编号 该编号出现在每页底部的页码之前 DS 编号的命名约定为 DSXXXXXA, 其中 XXXXX 为文档编号, A 为文档版本 欲了解开发工具的最新信息, 请参考 MPLAB IDE 在线帮助 从 Help ( 帮助 ) 菜单选择 Topics ( 主题 ), 打开现有在线帮助文件列表 简介 本章包含在使用 MPLAB C30 之前需要了解的一般信息 本章讨论内容包括 : 文档编排 推荐读物 Microchip 网站 开发系统变更通知客户服务 客户支持 2007 Microchip Technology Inc. DS51284F_CN 第 1 页

8 MPLAB C30 用户指南 文档编排 本文档介绍如何使用 GNU 语言工具为 16 位应用编写代码 内容安排如下 : 第 1 章 : 编译器概述 介绍 MPLAB C30 开发工具和功能 第 2 章 : MPLAB C30 与 ANSI C 的差别 描述 MPLAB C30 语法支持的 C 语言和标准 ANSI-89 C 之间的差别 第 3 章 : 使用 MPLAB C30 介绍怎样通过命令行使用 MPLAB C30 第 4 章 : MPLAB C30 运行时环境 介绍 MPLAB C30 运行时模型, 包括段信息 初始化 存储模型和软件堆栈等 第 5 章 : 数据类型 介绍 MPLAB C30 整型 浮点型和指针型数据类型 第 6 章 : 器件支持文件 介绍 MPLAB C30 的头文件和寄存器定义文件, 以及怎样使用特殊功能寄存器 第 7 章 : 中断 介绍怎样使用中断 第 8 章 : C 语言与汇编语言的混合编程 为混合使用 MPLAB C30 与 MPLAB ASM30 汇编语言模块提供指导 附录 A: 实现定义的操作 详细描述 ANSI 标准中描述为实现定义的 特定于 MPLAB C30 的参数 附录 B: MPLAB C30 内建函数 列出了 C 编译器 MPLAB C30 的内建函数 附录 C:MPLAB C30 诊断信息 列出由 MPLAB C30 产生的错误和警告消息 附录 D:MPLAB C18 和 MPLAB C30 的差别 介绍 PIC18XXXXX 编译器 (MPLAB C18) 和 dspic DSC 编译器 (MPLAB C30) 的主要区别 附录 E: 不赞成使用的特性 详述视为过时的特性 附录 F:ASCII 字符集 介绍 ASCII 字符集 附录 G:GNU 自由文档许可证 Free Software Foundation 的使用许可证 DS51284F_CN 第 2 页 2007 Microchip Technology Inc.

9 前言 本文档中使用的约定 本手册使用如下文档约定 : 文档约定 说明 涵义 示例 Arial 字体 : 斜体字 参考书目 MPLAB IDE User's Guide 需强调的文字... 仅有的编译器... 首字母大写 窗口 Output 窗口 对话框 Settings 对话框 菜单选项 选择 Enable Programmer 引用 窗口或对话框中的字段名 Save project before build 带右尖括号且有下划线的斜体 菜单路径 File>Save 文字 粗体字 对话框按钮 单击 OK 选项卡 单击 Power 选项卡 bnnnn 二进制数, n 是一个数字 b00100, b10 尖括号 < > 括起的文字 键盘上的按键 按 <Enter>, <F1> Courier New 字体 : 常规 Courier 源代码示例 #define START 文件名 autoexec.bat 文件路径 c:\mcc18\h 关键字 _asm, _endasm, static 命令行选项 -Opa+, -Opa- 位值 0, 1 常数 0xFF, A 斜体 Courier New 可变参数 file.o, 其中 file 可以是任一有效文件名 0xnnnn 十六进制数, n 是一个十六进 0xFFFF,0x007A 制数字 方括号 [ ] 可选参数 mcc18 [options] file [options] 花括号和竖线 :{ } 选择互斥参数 ; 或 选择 errorlevel {0 1} 省略号... 代替重复文字 var_name [, var_name...] 图标 仅完全版软件支持的功能 并非所有的器件都支持此功能 所支持器件将在标题或正文中列出 2007 Microchip Technology Inc. DS51284F_CN 第 3 页

10 MPLAB C30 用户指南 推荐读物 本文档介绍如何使用 MPLAB C30 编译器 下面列出了其他有用的文档 Microchip 提供了如下文档, 推荐将这些文档作为补充参考资料 Readme 文件关于 Microchip 工具的最新信息, 请阅读软件附带的相关 Readme 文件 (HTML 文本文件 ) 16 位语言工具入门 (DS70094C_CN) 关于安装和使用 Microchip 16 位器件语言工具 (MPLAB ASM30 MPLAB LINK30 和 MPLAB C30) 的指南 同时提供了使用 16 位软件模拟器 SIM30 (MPLAB SIM 的一个组件 ) 的示例 MPLAB ASM30 MPLAB LINK30 和实用程序用户指南 (DS51317F_CN) 指导如何使用 16 位汇编器 MPLAB ASM30 目标链接器 MPLAB LINK30 和各种实用程序, 包括 MPLAB LIB30 归档程序 / 库管理器 16 位语言工具函数库 (DS51456D_CN) 对 Microchip 16 位器件的各函数库进行了描述, 包括 DSP 函数库 标准函数库 ( 其中包括数学函数库 ) 以及 MPLAB C30 内建函数 16 位外设函数库在随每个外设函数库类型提供的 Readme 文件中描述 针对器件的文档 Microchip 网站上提供了许多描述 16 位器件功能和特性的文档, 其中包含 : 具体器件以及器件系列的数据手册 器件系列的参考手册 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 程序在多种计算机系统上的可移植性 可靠性 可维护性及执行效率 DS51284F_CN 第 4 页 2007 Microchip Technology Inc.

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

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

13 MPLAB C30 用户指南 第 1 章编译器概述 1.1 简介 1.2 主要内容 dspic 数字信号控制器 (Digital Signal Controller, DSC) 系列将 DSP 应用所需的高性能和嵌入式应用所需的标准单片机功能融合在一起 也可以将不带 DSP 功能的其他高性能单片机 (MCU) 用于其他应用 所有这些器件得到了一套完整的软件开发工具的充分支持, 包括一个优化的 C 编译器 一个汇编器 一个链接器和一个归档程序 / 库管理器 本章总体介绍了这些工具以及优化的 C 编译器的功能, 包括 C 编译器如何与 MPLAB ASM30 汇编器和 MPLAB LINK30 链接器配合工作 汇编器和链接器在 MPLAB ASM30 MPLAB LINK30 和实用程序用户指南 (DS51317F_CN) 中有详细介绍 本章将介绍如下内容 : MPLAB C30 介绍 MPLAB C30 及其他开发工具 MPLAB C30 的功能 1.3 MPLAB C30 介绍 MPLAB C30 是一个遵循 ANSI x 标准的优化 C 编译器, 它包括针对 dspic DSC 嵌入式控制应用的语言扩展 这个编译器是基于 Windows 操作系统的应用程序, 它为开发 C 代码提供了一个平台 它属于 Free Software Foundation 定义的 GCC 编译器 1.4 MPLAB C30 及其他开发工具 MPLAB C30 对 C 源文件进行编译, 生成汇编语言文件 由编译器生成的文件与其他目标文件和库文件进行汇编和链接以产生最终的应用程序, 应用程序格式为 COFF 或 ELF 文件格式 COFF 或 ELF 文件可以载入 MPLAB IDE 中进行测试和调试, 或使用转换实用程序将 COFF 或 ELF 文件转换为 Intel hex 格式, 以便载入命令行模拟器或器件编程器 图 1-1 概括了软件开发的数据流图 2007 Microchip Technology Inc. DS51284F_CN 第 7 页

14 MPLAB C30 用户指南 图 1-1: 软件开发工具数据流图 C 源文件 (*.c) C 编译器 编译器驱动程序 源文件 (*.s) 汇编源文件 (*.s) 汇编器 归档程序 ( 库管理器 ) COFF/ELF 目标文件 (*.o) 目标文件库 (*.a) 链接器 可执行文件 (*.exe) MPLAB IDE 调试工具命令行模拟器 DS51284F_CN 第 8 页 2007 Microchip Technology Inc.

15 编译器概述 1.5 MPLAB C30 的功能 MPLAB C30 C 编译器是一个全功能的优化编译器, 可将标准的 ANSI C 程序翻译为 dspic DSC 汇编语言源代码 同时它还支持许多命令行选项和语言扩展, 可以充分地利用 dspic DSC 器件的硬件功能, 以便更好地控制代码的生成 这一节介绍了编译器的主要功能 ANSI C 标准 MPLAB C30 编译器是一个完全经过验证的编译器, 符合 ANSI C 标准, 该标准由 ANSI 规范定义并在 Kernighan 和 Ritchie 的 C Programming Language ( 第二版 ) 中有详细说明 ANSI 标准包括对原始 C 定义的扩展, 这些扩展现在成为 C 语言的标准功能 这些扩展增强了 C 语言的可移植性, 同时增强了功能 优化 编译器使用一套采用多种先进技术的高级优化, 将 C 源代码编译为高效而紧凑的代码 优化包括适用于所有 C 代码的高级优化, 以及利用 dspic DSC 架构特征专门针对 dspic DSC 器件的优化 ANSI 标准函数库支持 MPLAB C30 带有一个完整的 ANSI 标准函数库 所有这些库函数都经过验证并遵循 ANSI C 库标准 这个函数库包括字符串处理 动态存储器分配 数据转换 计时和数学函数 ( 三角 指数和双曲线函数 ) 还包括用于文件处理的标准 I/O 函数, 支持通过命令行模拟器对主机文件系统进行完全的访问 同时还提供低级文件 I/O 函数的完整功能性源代码, 这可以作为需要这些功能的应用的一个起点 灵活的存储器模型 编译器可同时支持大小两种代码和数据模型 小代码模型利用调用和转移指令的更有效形式, 而小数据模型支持使用压缩指令对 SFR 空间的数据进行访问 编译器支持两种模型来访问常量 constants in data 模型使用数据存储器, 由运行时库初始化 constants in code 模型使用程序存储器, 通过程序空间可视性 (Program Space Visibility, PSV) 窗口访问 编译器驱动程序 MPLAB C30 包括一个强大的命令行驱动程序 通过这个驱动程序, 应用程序的编译 汇编和链接可以一步完成 ( 参见图 1-1) 2007 Microchip Technology Inc. DS51284F_CN 第 9 页

16 MPLAB C30 用户指南 注 : DS51284F_CN 第 10 页 2007 Microchip Technology Inc.

17 第 2 章 MPLAB C30 与 ANSI C 的差别 MPLAB C30 用户指南 2.1 简介 2.2 主要内容 本章讨论 MPLAB C30 语法支持的 C 语言和 1989 年标准 ANSI C 之间的差别 本章包括以下主要内容 : 关键字差别 语句差别 表达式差别 2.3 关键字差别 本节说明 ANSI C 和 MPLAB C30 所接受 C 在关键字方面的差别 新关键字是基本 GCC 实现的一部分, 本节的讨论基于标准的 GCC 文档, 选择 GCC MPLAB C30 部分的特定语法和语义来讲述 指定变量的属性 指定函数的属性 内联函数 指定寄存器中的变量 复数 双字整型 用 typeof 引用类型 2007 Microchip Technology Inc. DS51284F_CN 第 11 页

18 MPLAB C30 用户指南 指定变量的属性 MPLAB C30 的关键字 attribute 用来指定变量或结构位域的特殊属性 关键字后的双括弧中的内容是属性说明 下面是目前支持的变量属性 : address (addr) aligned (alignment) boot deprecated far mode (mode) near noload packed persistent reverse (alignment) section ("section-name") secure sfr (address) space (space) transparent_union unordered unused weak weak 也可以通过在关键字前后使用 ( 双下划线 ) 来指定属性 ( 例如, 用 aligned 代替 aligned) 这样将使你在头文件中使用它们时不必考虑会出现与宏同名的情况 要指定多个属性, 可在双括弧内用逗号将属性分隔开, 例如 : attribute ((aligned (16), packed)) 注 : 一个项目中对变量属性的使用要一致, 这很重要 例如, 如果在文件 A 中用 far 属性定义了一个变量, 在文件 B 中将其声明为 extern 而不带 far, 就可能导致链接错误 address (addr) address 属性为变量指定绝对地址 这一属性可与 section 属性同时使用, 这可用于从特定地址开始定义一组变量 : int foo attribute ((section("mysection"),address(0x900))); int bar attribute ((section("mysection"))); int baz attribute ((section("mysection"))); 带 address 属性的变量不能存放到 auto_psv 空间 ( 参见 space() 属性或 -mconst-in-code 选项 ); 这样做会产生警告, 且编译器将此变量存放到 PSV 空间 如果要将变量存放到 PSV 段, 地址应为程序存储器地址 int var attribute ((address(0x800))); DS51284F_CN 第 12 页 2007 Microchip Technology Inc.

19 MPLAB C30 与 ANSI C 的差别 aligned (alignment) 该属性为变量指定最小的对齐方式, 用字节表示 对齐方式必须是 2 的次幂 例如, 下面的声明 : int x attribute ((aligned (16))) = 0; 使编译器按照 16 字节分配全局变量 x 对于 dspic DSC 器件, 这可以与访问需要对齐的操作数的 DSP 指令和寻址模式的 asm 语句配合使用 在前面的例子中, 我们可以显式地指定我们希望编译器对给定变量使用的对齐方式 ( 用字节表示 ) 或者, 我们可以省略对齐方式, 而要求编译器为变量使用 dspic DSC 器件的最大有用对齐 例如, 我们可以这样写 : short array[3] attribute ((aligned)); 当省略了对齐属性说明中的对齐方式时, 编译器会自动将已声明变量的对齐方式设置为目标单片机任何数据类型所使用的最大对齐方式 在 dspic DSC 器件中, 为双字节 (1 个字 ) aligned 属性只能增大对齐 ; 但可以通过指定 packed 属性来减小对齐 ( 见下文 ) aligned 属性与 reverse 属性冲突, 同时指定两者会产生错误 aligned 属性可与 section 属性一起使用, 这允许对指定段使用对齐 默认情况下, 当未指定段时, 编译器将为变量生成一个独特的段 这样, 链接器不必使用内部填充 ( 如果其他定义出现在同一个对齐的段中, 可能会使用内部填充 ) 就可以满足对齐的限制 boot 这一属性可用于在引导段 (Boot Segment, BS) RAM 中定义受保护的变量 : int attribute ((boot)) boot_dat[16]; 定义到 BS RAM 中的变量在启动时不被初始化, 因此必须使用主代码来初始化 BS RAM 中的所有变量 如果为 boot 变量指定初始值将会报告诊断消息 下面是初始化的一个示例 : int attribute ((boot)) time = 0; /* not supported */ int attribute ((boot)) time2; void attribute ((boot)) foo() { time2 = 55; /* initial value must be assigned explicitly */ } deprecated deprecated 属性使得包含这一属性的声明能被编译器特别识别到 当使用 deprecated 函数或变量时, 编译器会发出警告 deprecated 定义仍将被编译器执行, 并被反映到目标文件中 例如, 编译以下程序 : int attribute (( deprecated )) i; int main() { return i; } 将产生警告 : 2007 Microchip Technology Inc. DS51284F_CN 第 13 页

20 MPLAB C30 用户指南 deprecated.c:4: warning: `i' is deprecated (declared at deprecated.c:1) 在生成的目标文件中, 仍以通常的方式定义了 i far far 属性告知编译器不必将变量分配到 near( 前 8 KB) 数据空间中 ( 即变量可以分配到数据存储器中的任何地址 ) mode (mode) 在变量声明中使用该属性来指定与模式 mode 对应的数据类型 实际上就是允许根据变量的宽度指定整数或浮点数类型 mode 的有效值见下表 : 这一属性对于编写可在所有 MPLAB C30 支持的目标单片机之间移植的代码很有用 例如, 如下函数将两个 32 位有符号整数相加, 并返回一个 32 位有符号整数结果 : typedef int attribute (( mode (SI))) int32; int32 add32(int32 a, int32 b) { return(a+b); } 可以指定 byte 或 byte 模式指明模式对应于单字节整数, word 或 word 模式对应于单字整数, pointer 或 pointer 模式用于表示指针 near near 属性告知编译器将变量分配到 near 数据空间 ( 数据存储器的前 8 KB) 对这种变量的访问有时比访问未分配 ( 或不知已分配 ) 到 near 数据空间的变量效率高 int num attribute ((near)); noload 模式 宽度 MPLAB C30 数据类型 QI 8 位 char HI 16 位 int SI 32 位 long DI 64 位 long long SF 32 位 float DF 64 位 long double noload 属性指明应该为变量分配空间, 但不应为变量装入初值 这一属性对于设计在运行时将变量装入存储器 ( 如从串行 EEPROM) 的应用程序可能有用 int table1[50] attribute ((noload)) = { 0 }; DS51284F_CN 第 14 页 2007 Microchip Technology Inc.

21 MPLAB C30 与 ANSI C 的差别 packed packed 属性指定变量或结构位域采用最小的可能对齐方式 变量占一个字节, 位域占一位, 除非用 aligned 属性指定了一个更大的值 下面的结构中位域 x 被压缩, 所以它紧接在 a 之后 : struct foo { char a; int x[2] attribute ((packed)); }; 注 : 器件架构要求字按偶数字节边界对齐, 因此在使用 packed 属性时要特别小心, 避免运行时寻址错误 persistent persistent 属性指定在启动时变量不应被初始化或清零 具有 persistent 属性的变量可用于存储器件复位后仍保持有效的状态信息 int last_mode attribute ((persistent)); persistent 数据通常不被 C 运行时初始化 但是, 冷启动时, persistent 数据可能不具有任何有意义的值 下面的代码示例说明了如何安全地初始化这种数据 : #include "p24fxxxx.h" int last_mode attribute ((persistent)); int main() { if ((RCONbits.POR == 0) && (RCONbits.BOR == 0)) { /* last_mode is valid */ } else { /* initialize persistent data */ last_mode = 0; } } reverse (alignment) reverse 属性为变量的结束地址加 1 指定最小对齐 对齐以字节指定, 必须是 2 的次幂 反向对齐的变量可用于递减 dspic DSC 汇编语言中的模缓冲区 如果应用程序需要在 C 中定义的变量可从汇编语言访问, 这一属性可能有用 int buf1[128] attribute ((reverse(256))); reverse 属性与 aligned 和 section 属性冲突 试图为反向对齐的变量指定一个段将被忽略, 并发出警告 为同一个变量同时指定 reverse 和 aligned 会产生错误 带有 reverse 属性的变量不能存放到 auto_psv 空间 ( 参见 space 属性或 -mconst-in-code 选项 ); 试图这样做将导致警告, 且编译器会将变量存放到 PSV 空间 2007 Microchip Technology Inc. DS51284F_CN 第 15 页

22 MPLAB C30 用户指南 section ("section-name") 默认情况下, 编译器将其生成的目标代码存放在.data 和.bss 段中 section 属性允许指定变量 ( 或函数 ) 存放到特定的段中 struct array {int i[32];} struct array buf attribute ((section("userdata"))) = {0}; section 属性与 address 和 reverse 属性冲突 在这两种冲突情形下, 段名将被忽略, 并发出警告 这一属性还可能会与 space 属性冲突 更多信息, 参见关于 space 属性的说明 secure 这一属性可用于在安全段 (Secure Segment, SS) RAM 中定义被保护的变量 : int attribute ((secure)) secure_dat[16]; 定义到 SS RAM 中的变量在启动时不被初始化 因此 SS RAM 中的所有变量必须使用内联代码来初始化 如果对 secure 变量指定初始值, 将报告警告消息 可使用内联代码将字符串常量赋值给 secure 变量, 但需要编译器进行额外处理 例如 : char *msg attribute ((secure)) = "Hello!\n"; /* not supported */ char *msg2 attribute ((secure)); void attribute ((secure)) foo2() { *msg2 = "Goodbye..\n"; /* value assigned explicitly */ } 在这种情况下, 必须将字符串常量分配到使用此变量的函数可访问的存储空间中 编译器将把字符串分配到为安全段指定的 psv 常量段中 DS51284F_CN 第 16 页 2007 Microchip Technology Inc.

23 MPLAB C30 与 ANSI C 的差别 sfr (address) sfr 属性告知编译器变量是一个特殊功能寄存器 (SFR), 同时使用 address 参数指定变量的运行时地址 extern volatile int attribute ((sfr(0x200)))u1mod; 为避免产生错误, 需要使用 extern 说明符 注 : 按照约定, 仅在处理器头文件中使用 sfr 属性 为将一个普通变量定义到指定的地址, 要使用 address 属性, 且用 near 或 far 来指定正确的寻址模式 space (space) 一般来说, 编译器在一般数据空间内分配变量 可使用 space 属性来指示编译器将变量分配到特定存储空间 关于存储空间的更多论述参见第 4.6 节 存储空间 space 属性接受如下参数 : data 将变量分配到一般数据空间 可使用一般的 C 语句访问一般数据空间中的变量 这是默认的分配 xmemory 仅适用于 dspic30f/33f DSC 将变量分配到 X 数据空间 可使用一般的 C 语句访问 X 数据空间中的变量 xmemory 空间分配举例如下 : int x[32] attribute ((space(xmemory))); ymemory 仅适用于 dspic30f/33f DSC 将变量分配到 Y 数据空间 可使用一般的 C 语句访问 Y 数据空间中的变量 ymemory 空间分配举例如下 : int y[32] attribute ((space(ymemory))); prog 将变量分配到程序空间中为可执行代码指定的段 程序空间中的变量不能使用一般的 C 语句访问, 它们必须由编程人员通过专门的方法访问, 通常通过表访问行内汇编指令, 或使用程序空间可视性窗口访问 auto_psv 将变量分配到程序空间中为自动程序空间可视性窗口访问指定的编译器管理段 auto_psv 空间中的变量可使用一般的 C 语句来读 ( 但不能写 ), 且变量的分配空间最大为 32K 当指定 space(auto_psv) 时, 不能使用 section 属性指定段名 ; 任何段名将被忽略并产生警告 auto_psv 空间中的变量不能存放到特定地址或反对齐 注 : 在启动时分配到 auto_psv 段中的变量不装入数据存储器 这一属性对于减少 RAM 使用可能有用 2007 Microchip Technology Inc. DS51284F_CN 第 17 页

24 MPLAB C30 用户指南 dma 仅适用于 PIC24H MCU 和 dspic33f DSC 将变量分配到 DMA 存储区 可以通过一般的 C 语句和 DMA 外设访问 DMA 存储区中的变量 可使用 builtin_dmaoffset() ( 参见 dspic 语言工具库 (DS51456B_CN)) 来得到用于配置 DMA 外设的正确偏移量 psv 将变量分配到程序空间中为程序空间可视性窗口访问指定的段 链接器将定位段, 因此可以通过 PSVPAG 寄存器的设置来访问整个变量 PSV 空间中的变量不是由编译器管理的, 不能使用一般的 C 语句访问 这些变量必须由编程人员显式访问, 通常使用表访问行内汇编指令, 或使用程序空间可视性窗口访问 eedata 仅适用于 dspic30f DSC 将变量分配到 EEData 空间 EEData 空间中的变量不能使用一般的 C 语句访问 这些变量必须由编程人员显式访问, 通常使用表访问行内汇编指令, 或使用程序空间可视性窗口访问 transparent_union 这是属于 union 型函数参数的属性, 即相应的参数可以是任何联合成员的类型, 但以第一个联合成员的类型传递参数 使用 transparent 联合的第一个成员的调用约定将参数传递给函数, 而不是使用联合本身的调用约定 联合的所有成员必须具有相同的机器码表示, 这对于保证参数传递正常进行是必需的 unordered unordered 属性表明变量存放的地址可以相对于所在 C 源文件中其他变量的位置而改变 const int attribute ((unordered)) i; unused 这一变量属性表明变量可能不被使用 MPLAB C30 不会为这种变量产生未使用变量警告 weak weak 属性声明 weak 符号 weak 符号可能被全局定义取代 当对外部符号的引用使用 weak 时, 则链接时不需要该符号 例如 : extern int attribute (( weak )) s; int foo() { if (&s) return s; return 0; /* possibly some other value */ } 在上面的程序中, 如果 s 没有被其他模块定义, 程序仍会链接, 但不会给 s 分配地址 若条件验证 s 已被定义, 就返回它的值 ( 如果它有值的话 ) 否则将返回 0 值 这个特征很有用, 主要用于提供与任意库链接的通用代码 DS51284F_CN 第 18 页 2007 Microchip Technology Inc.

25 MPLAB C30 与 ANSI C 的差别 weak 属性可以应用于函数和变量 : extern int attribute (( weak )) compress_data(void *buf); int process(void *buf) { if (compress_data) { if (compress_data(buf) == -1) /* error */ } /* process buf */ } 在上述代码中, 函数 compress_data 只有在与其他模块链接时才使用 是否使用该特性是由链接时决定的, 而不是由编译时决定的 weak 属性对定义的影响更为复杂, 需要多个文件加以说明 : /* weak1.c */ int attribute (( weak )) i; void foo() { } i = 1; /* weak2.c */ int i; extern void foo(void); void bar() { i = 2; } main() { foo(); bar(); } 在 weak2.c 中对 i 的定义使符号成为强定义 链接时不会出现错误, 两个 i 指向同一个存储位置 为 weak1.c 中的 i 分配存储空间, 但这个空间不可访问 不能保证两个程序里的 i 具有相同的类型, 如果将 weak2.c 中的 i 改为 float 型, 仍然允许链接, 但是函数 foo 的操作将无法预料 foo 将向 32 位浮点值的最低有效部分写入一个值 相反, 在 weak1.c 中把 i 的 weak 定义改为 float 型, 将导致灾难性结果 这样会把一个 32 位的浮点值写到 16 位的整型地址中, 覆盖掉紧接 i 之后存储的任何变量 在只存在 weak 定义的情况下, 链接器才选择为第一个这种定义分配存储空间 其他定义是不可访问的 无论符号属于什么类型, 操作是相同的 ; 函数和变量具有相同的操作 2007 Microchip Technology Inc. DS51284F_CN 第 19 页

26 MPLAB C30 用户指南 指定函数的属性 在 MPLAB C30 中, 可以对程序中调用的函数进行某些声明, 帮助编译器优化函数调用, 且更准确地检查代码 关键字 _attribute_ 允许在声明时指定特殊的属性 关键字后面紧跟双括弧中的属性说明 目前支持函数的下列属性 : address (addr) alias ("target") auto_psv, no_auto_psv boot const deprecated far format (archetype, string-index, first-to-check) format_arg (string-index) interrupt [ ( [ save(list) ] [, irq(irqid) ] [, altirq(altirqid)] [, preprologue(asm) ] ) ] near no_instrument_function noload noreturn section ("section-name") secure shadow unused weak 我们也可以通过在关键字前后使用 ( 双下划线 ) 来指定属性 ( 例如, 用 shadow 代替 shadow) 这样使得在头文件中使用它们时不必考虑会出现与宏同名的情况 我们要想在声明中指定多个属性, 可以在双括弧内使用逗号将属性分隔开, 或者在一个属性声明后紧跟另一个属性声明 address (addr) address 属性为函数指定绝对地址 这个属性不能与 section 属性同时使用 ; address 属性优先 void foo() attribute ((address(0x100))) {... } alias ("target") alias 属性为另一个符号声明一个别名, 必须指定这个符号 使用这一属性会产生对对象的外部引用, 必须在链接时解析该引用 DS51284F_CN 第 20 页 2007 Microchip Technology Inc.

27 MPLAB C30 与 ANSI C 的差别 auto_psv, no_auto_psv auto_psv 属性与 interrupt 属性一起使用时, 将使编译器在函数 prologue 中生成额外的代码, 以将 PSVPAG SFR 设置为用于访问 space(auto_psv) 变量 ( 或 constants-in-code 存储模型中的常量 ) 的正确的值 当使用 24 位指针时, 或在产生中断时 PSVPAG 已被修改以及中断服务程序或中断服务程序调用的一个函数使用一个 auto_psv 变量的情况下, 使用这个选项 将这个选项与 no_auto_psv 比较 如果没有为中断服务程序指定 auto_psv 选项, 也没有指定 no_auto_psv 选项, 编译器将发出警告并选择这个选项 (auto_psv 选项 ) no_auto_psv 属性与 interrupt 属性一起使用时, 将使编译器不在函数 prologue 中生成额外的代码来访问 space(auto_psv) 变量 ( 或 constants-in-code 存储模型中的常量 ) 如果 auto_psv 下的所有条件都不为真的话, 使用这个选项 如果没有为中断服务程序指定 auto_psv 选项, 也没有指定 no_auto_psv 选项, 编译器将发出警告并选择 auto_psv 选项 boot 这一属性指示编译器将一个函数分配到程序闪存的 boot 段中 例如, 声明一个被保护的函数 : void attribute ((boot)) func(); 可使用一个可选参数来在 boot 段中指定一个被保护的访问进入点 该参数可以为 0 至 31 范围内的整型立即数 (16 除外 ) 或字 unused 整型参数对应段快速存储区中的 32 个指令入口点, 段快速存储区占用每个安全段中的最低地址范围 值 16 排除在外的原因是访问进入 16 保留给了安全段中断向量 值 unused 用于为快速存储区中所有未使用的入口点指定函数 访问进入点有利于生成不同供应商的应用段, 不同供应商的应用段在运行时组合在一起 可以为外部函数以及局部定义的函数指定访问进入点 例如 : /* an external function that we wish to call */ extern void attribute ((boot(3))) boot_service3(); /* local function callable from other segments */ void attribute ((secure(4))) secure_service4() { boot_service3(); } 指定一个安全中断服务程序, 要配合 interrupt 属性使用 boot 属性 : void attribute ((boot,interrupt)) boot_interrupts(); 当为外部安全函数指定了一个访问进入点时, 为成功进行链接不需要将该函数包含到项目中 对该函数的所有引用都将被解析为闪存中的一个固定地址, 这取决于在链接时选择的安全模型 当为一个局部定义的函数指定了一个访问进入点时, 链接器将向安全段快速存储区中插入一条转移指令 例外情况是访问进入 16, 它被表示为一个向量 ( 即指令地址 ) 而非指令 实际的函数定义将位于快速存储区之外, 因此快速存储区将包含一个跳转表, 通过这个跳转表, 可将控制从另一个安全段转移到定义了进入点的函数 2007 Microchip Technology Inc. DS51284F_CN 第 21 页

28 MPLAB C30 用户指南 Auto 变量自动变量 ( 在函数中定义的变量 ) 与文件作用域变量相比受到更多不同规则的限制 自动变量由使用它的函数所有, 不需要 boot 或 secure 属性 可以为自动变量赋初始值, 如下所示 : void attribute ((boot)) chuck_cookies() { int hurl; int them = 55; char *where = "far"; splat(where); /*... */ } 要注意, where 的初始值基于分配到 PSV 常量段.boot_const 中的字符串常量 进入函数时编译器将 PSVPAG 设置为正确的值 如果需要, 编译器在调用 splat() 之后也将恢复 PSVPAG 的值 const 许多函数除了检查自身的参数外不会检查任何其他值, 只会影响其返回值 可像算术运算符一样, 对这种函数进行公共子表达式删除和循环优化 这些函数应该用属性 const 来声明 例如 : int square (int) attribute ((const int)); 也就是说, 上述假设的 square 函数的实际被调用次数即使比程序指定的次数少一些也是安全的 应该注意, 如果函数有指针参数, 且检查指针指向的数据, 那么这种函数一定不能用 const 声明 同样, 调用非 const 函数的函数通常也不能声明为 const 具有 void 返回值类型的 const 函数没有什么意义 deprecated 关于 deprecated 属性的信息, 请参阅第 节 指定变量的属性 far far 属性告知编译器不应该用更有效的调用指令形式来调用该函数 format (archetype, string-index, first-to-check) format 属性指定一个函数具有 printf scanf 或 strftime 类型参数, 要根据格式字符串检查这些参数的类型 例如, 考虑以下声明 : extern int my_printf (void *my_object, const char *my_format,...) attribute ((format (printf, 2, 3))); 以上语句使编译器检查对 my_printf 调用中的参数, 确定是否与 printf 类型的格式字符串参数 my_format 一致 参数 archetype 确定如何解释格式字符串, 应该为 printf scanf 或 strftime 之一 参数 string-index 指定哪个参数是格式字符串参数 ( 参数从左至右编号, 从 1 开始 ), first-to-check 指定根据格式字符串检查的第一个参数的编号 对于不能检查参数的函数 ( 如 vprintf), 指定第三个参数为 0 这种情况下, 编译器仅检查格式字符串的一致性 DS51284F_CN 第 22 页 2007 Microchip Technology Inc.

29 MPLAB C30 与 ANSI C 的差别 在上面的例子中, 格式字符串 (my_format) 是函数 my_print 的第二个参数, 从第三个参数开始检查, 所以 format 属性的正确参数是 2 和 3 format 属性允许识别以格式字符串作为参数的用户自定义函数, 所以 MPLAB C30 可以检查对这些函数的调用有无错误 每当要求这种警告 ( 使用 -Wformat) 时, 编译器总会检查 ANSI 库函数 printf fprintf sprintf scanf fscanf sscanf strftime vprintf vfprintf 和 vsprintf 的格式, 所以不必修改头文件 stdio.h format_arg (string-index) format_arg 属性指定一个函数具有 printf 或者 scanf 类型的参数, 修改这个函数 ( 如将它翻译为另外一种语言 ), 并把函数的结果传递给 printf 或 scanf 类型的函数 例如, 考虑以下声明 : extern char * my_dgettext (char *my_domain, const char *my_format) attribute ((format_arg (2))); 上述语句使编译器检查对函数 my_dgettext 的调用中的参数, 该函数的结果传递给 printf scanf 或 strftime 类型函数, 确定是否与 printf 类型的格式字符串参数 my_format 一致 参数 string-index 指定哪个参数是格式字符串参数 ( 从 1 开始 ) format-arg 属性允许识别修改格式字符串的用户定义函数, 所以 MPLAB C30 可以检查对 printf scanf 或 strftime 函数的调用, 这些函数的操作数是对用户定义函数的调用 interrupt [ ( [ save(list) ] [, irq(irqid) ] [, altirq(altirqid)] [, preprologue(asm) ] ) ] 使用这个选项来指明指定的函数是中断服务程序 当指定这个属性时, 编译器将生成适用于中断服务程序的函数 prologue 和 epilogue 序列 可选的参数 save 指定函数 prologue 和 epilogue 中分别保存和恢复的变量列表 可选参数 irq 和 altirq 指定要使用的中断向量表 ID 可选参数 preprologue 指定要在编译器生成的 prologue 代码前生成的汇编代码 完整的说明和示例, 请参阅第 7 章 中断 当使用 interrupt 属性时, 请指定 auto_psv 或 no_auto_psv 如果这两个选项都未指定, 将发出警告且使用 auto_psv 选项 near near 属性告知编译器可以使用 call 指令的更有效形式调用函数 no_instrument_function 如果指定命令行选项 -finstrument-functions, 那么几乎所有用户函数的入口和出口处在编译时都会被插入 profiling 函数 而函数被指定此选项时将不执行上述操作 2007 Microchip Technology Inc. DS51284F_CN 第 23 页

30 MPLAB C30 用户指南 noload noload 属性指明应该为函数分配空间, 但不应把实际代码装入存储器 如果应用程序设计为在运行时将函数装入存储器 ( 如从串行 EEPROM), 这一属性很有用 void bar() attribute ((noload)) {... } noreturn 一些标准库函数是不能返回的, 例如 abort 和 exit MPLAB C30 本来就清楚这种情况 有些程序自定义了不会返回的函数, 我们可以将这些函数声明为 noreturn 来告知编译器这种情况 void fatal (int i) attribute ((noreturn)); void fatal (int i) { /* Print error message. */ exit (1); } noreturn 关键字告知编译器 fatal 不会返回 这可以优化代码, 而不必考虑如果 fatal 返回会怎样 这可以在某种程度上优化代码 而且这样有助于避免未初始化变量的假警告 对于 noreturn 函数, 非 void 的返回值类型并没有什么意义 section ("section-name") 通常, 编译器将生成的代码存放在.text 段中 但有时可能需要其他的段, 或者需要将某些函数存放在特殊的段中 Section 属性指定将一个函数存放在特定的段中 例如下面的声明 : extern void foobar (void) attribute ((section (".libtext"))); 上述语句将函数 foobar 存放在.libtext 段中 section 属性与 address 属性有冲突 忽略段名会导致警告 secure 这个属性指示编译器将一个函数分配到程序闪存的 secure 段中 例如, 声明一个被保护的函数 : void attribute ((secure)) func(); 可使用一个可选参数来在 secure 段中指定一个被保护的访问进入点 该参数可以为 0 至 31 范围内的整型立即数 (16 除外 ) 或字 unused 整型参数对应段快速存储区中的 32 个指令时隙, 段快速存储区占用每个安全段中的最低地址范围 值 16 排除在外的原因是访问进入 16 保留给了安全段中断向量 值 unused 用于为快速存储区中所有未使用的时隙指定函数 DS51284F_CN 第 24 页 2007 Microchip Technology Inc.

31 MPLAB C30 与 ANSI C 的差别 访问进入点有利于生成不同供应商的应用段, 不同供应商的应用段在运行时组合在一起 可以为外部函数以及局部定义的函数指定访问进入点 例如 : /* an external function that we wish to call */ extern void attribute ((boot(3))) boot_service3(); /* local function callable from other segments */ void attribute ((secure(4))) secure_service4() { boot_service3(); } 指定一个安全中断服务程序, 要配合 interrupt 属性使用 secure 属性 : void attribute ((secure,interrupt)) secure_interrupts(); 当为外部安全函数指定了一个访问进入点时, 为成功进行链接不需要将该函数包含到项目中 对该函数的所有引用都将被解析为闪存中的一个固定地址, 这取决于在链接时选择的安全模型 当为一个局部定义的函数指定了一个访问进入点时, 链接器将向安全段快速存储区中插入一条转移指令 例外情况是访问进入 16, 它被表示为一个向量 ( 即指令地址 ) 而非指令 实际的函数定义将位于快速存储区之外, 因此快速存储区将包含一个跳转表, 通过这个跳转表, 可将控制从另一个安全段转移到定义了进入点的函数 Auto 变量自动变量 ( 在函数中定义的变量 ) 与文件作用域变量相比受到更多不同规则的限制 自动变量由使用它的函数所有, 不需要 boot 或 secure 属性 可以为自动变量赋初始值, 如下所示 : void attribute ((boot)) chuck_cookies() { int hurl; int them = 55; char *where = "far"; splat(where); /*... */ } 要注意, where 的初始值基于分配到 PSV 常量段.boot_const 中的字符串常量 进入函数时编译器将 PSVPAG 设置为正确的值 如果需要, 编译器也将在调用 splat() 之后恢复 PSVPAG 的值 shadow shadow 属性使编译器使用影子寄存器而不是软件堆栈来保存寄存器 该属性通常与 interrupt 属性同时使用 void attribute ((interrupt, shadow)) _T1Interrupt (void) unused 这个函数属性, 表明函数可能不会被使用 MPLAB C30 不会为这种函数发出未使用函数的警告 2007 Microchip Technology Inc. DS51284F_CN 第 25 页

32 MPLAB C30 用户指南 weak 关于 weak 属性, 参见第 节 指定变量的属性 内联函数 通过声明一个函数为 inline, 可以指示 MPLAB C30 将这个函数的代码集成到调用函数的代码中 通常这样可避免函数调用的开销, 使代码执行速度更快 另外, 若任何实际的参数值为常数, 它们的已知值可允许在编译时进行简化, 这样不用包含所有的内联函数代码 对代码量的影响是不容易预估的 使用内联函数, 机器代码量视具体情况可能更大也有可能更小 注 : 仅当函数定义可见 ( 不只是有函数原型 ) 时, 才能使用函数内联 为将一个函数内联到多个源文件中, 可将函数定义放在每个源文件包含的头文件中 为将函数声明为内联, 在其声明中使用 inline 关键字, 例如 : inline int inc (int *a) { (*a)++; } ( 如果使用 -traditional 选项或 -ansi 选项, 用 _inline_ 代替 inline ) 还可以通过使用命令行选项 -finline-functions 将所有 足够简单 的函数内联 编译器可以根据对函数大小的估计, 直观地决定哪些函数足够简单, 可以这样集成 注 : 仅当使能 -finline 或优化时才识别 inline 关键字 函数定义中的某些用法可能使函数不适合于内联替代 这些用法包括 :varargs 的使用 alloca 的使用, 长度可变数据的使用, 以及相对 goto 和非局部 goto 的使用 如果使用了命令行选项 -winline, 当标识为 inline 的函数不能被替代时, 会发出警告, 并给出失败原因 在 MPLAB C30 语法中, 关键字 inline 不会影响函数的链接 当一个函数同时为 inline 和 static 时, 如果对该函数的所有调用都集成到调用函数中, 且从不使用该函数的地址, 那么该函数自身的汇编程序代码从不会被引用 在这种情况下, MPLAB C30 实际上并不输出该函数的汇编代码, 除非指定命令行选项 -fkeep-inline-functions 有些调用由于各种原因不能被集成 ( 特别是在函数定义之前的调用不能被集成, 定义内的递归调用也不能被集成 ) 如果存在非集成的调用, 那么会以通常方式将函数编译成汇编代码 如果程序引用函数的地址, 也必须以通常的方式编译函数, 因为它不能被内联 仅在内联函数被声明为 static, 且函数定义在函数使用之前的情况下, 编译器才会删除内联函数 DS51284F_CN 第 26 页 2007 Microchip Technology Inc.

33 MPLAB C30 与 ANSI C 的差别 当 inline 函数不是 static 时, 编译器必须假定其他源文件可能调用这个函数 因为全局符号只能在所有程序中定义一次, 不能在其他源文件中定义该函数, 所以其他源文件中的调用不能被集成 因此, 非 static 的内联函数总是以通常的方式编译 如果我们在函数定义中同时指定 inline 和 extern, 这样定义的函数就只能用来内联 不能以通常的方式编译函数, 即使显式地引用其地址 这种地址变成了一个外部引用, 如同我们只是声明了函数却没有定义它 同时使用 inline 和 extern 对于宏有类似的影响 使用这些关键字将一个函数的定义放在头文件中, 并且将定义的另外一份拷贝 ( 不带 inline 和 extern) 放在库文件中 头文件中的定义使得对于该函数的大多数调用被内联 如果还有任何使用该函数的地方, 将引用库文件中的拷贝 指定寄存器中的变量 MPLAB C30 允许把几个全局变量存放到指定的硬件寄存器中 注 : 使用太多的寄存器, 尤其是寄存器 W0, 可能影响 MPLAB C30 的编译能力 我们也可以指定在其中存放普通寄存器变量的寄存器 全局寄存器变量在整个程序执行过程中保留寄存器的值 这在程序中可能很有用, 如编程语言解释程序, 带有几个经常被访问的全局变量 特定寄存器中的局部寄存器变量并不保留寄存器的值 编译器的数据流分析可以确定何时指定寄存器包含有效的值, 何时可将指定寄存器用于其他用途 局部寄存器变量不使用时其中存储的值可被删除 对局部寄存器变量的引用可以被删除 移动或简化 如果要将汇编指令的一个输出直接写到某个特定的寄存器, 这些局部变量有时便于扩展行内汇编使用 ( 参见第 8 章 汇编语言和 C 模块混合编程 ) ( 只要指定的寄存器符合为行内汇编语句中的操作数指定的约束就可以 ) 定义全局寄存器变量在 MPLAB C30 中, 可通过以下语句来定义一个全局寄存器变量 : register int *foo asm ("w8"); 其中, w8 是要使用的寄存器名 选择一个可被函数调用正常保存和恢复的寄存器 (W8-W13), 这样库函数就不会破坏它的值 将一个全局寄存器变量定义到某个寄存器中, 可完全保留该寄存器的值, 至少在当前的编译中 在当前的编译中, 寄存器不会被分配给函数中的任何其他用途 寄存器不会被这些函数保存和恢复 即使该寄存器的内容不被使用, 也不会被删除, 但是对该寄存器的引用可被删除 移动或简化 从信号处理程序或者从多个控制线程访问全局寄存器变量是不安全的, 因为系统库函数可能临时使用寄存器做别的工作 ( 除非你特别为待处理任务重新编译它们 ) 2007 Microchip Technology Inc. DS51284F_CN 第 27 页

34 MPLAB C30 用户指南 同样不安全的是, 使用一个全局寄存器变量的函数, 通过函数 lose 来调用另外一个这样的函数 foo, 而编译函数 lose 时未知该全局变量 ( 即在未声明该变量的源文件中 ) 这是因为 lose 可能会将其他某个值保存到该寄存器中 例如, 不能在比较函数中使用传递给 qsort 的全局寄存器变量, 因为 qsort 可能已经把其他值存放到该寄存器中了 用相同的全局寄存器变量定义来重新编译 qsort, 可以避免此问题 如果想重新编译实际上没有使用该全局寄存器变量的 qsort 或其他源文件, 因此这些源文件不会将该寄存器用于其他用途, 那么指定编译器命令行选项 -ffixed-reg 就足够了 这种情况下实际上不需要在其源代码中加一个全局寄存器声明 一个函数若可能改变一个全局寄存器变量的值, 它就不能在不保存和恢复该变量的情况下安全地被函数调用, 因为这可能破坏调用函数返回时期望找到的值 因此, 若一个程序片段使用了全局寄存器变量, 作为该程序片段入口的函数必须显式地保存和恢复属于其调用函数的值 库函数 longjmp 将恢复每个全局寄存器变量在 setjmp 时的值 所有全局寄存器变量的声明必须在所有函数定义之前 如果这种声明在函数定义之后, 寄存器可能被声明之前的函数用于其他用途 全局寄存器变量不能有初值, 因为可执行文件不能为一个寄存器提供初值 为局部变量指定寄存器可以通过以下语句用一个指定的寄存器定义局部寄存器变量 : register int *foo asm ("w8"); 其中, w8 是使用的寄存器名 应该注意这与定义全局寄存器变量的语法相同, 但是对于局部变量, 这种定义应该出现在一个函数中 定义这种寄存器不保留寄存器的值, 流控制确定变量的值无效时, 其他用途仍可使用这种寄存器 使用这一功能, 可能使编译某些函数时可用寄存器太少 该选项并不能保证 MPLAB C30 生成的代码始终将这一变量存放在指定的寄存器中 不可以在 asm 语句中, 编写对该寄存器的显式引用, 并假定它总是引用这个变量 局部寄存器变量不使用时其分配可被删除 对局部寄存器变量的引用可以被删除 移动或简化 复数 MPLAB C30 支持复数数据类型 我们可以用关键字 complex 来声明整型复数和浮点型复数 例如, complex float x; 定义 x 为实部和虚部都是浮点型的变量 complex short int y; 定义 y 的实部和虚部都是 short int 型的 要写一个复数数据类型的常量, 使用后缀 i 或 j ( 两者之一, 两者是等同的 ) 例如, 2.5fi 是 complex float 型的, 3i 是 complex int 型的 这种常量只有虚部值, 但是我们可以通过将其与实常数相加来形成任何复数值 DS51284F_CN 第 28 页 2007 Microchip Technology Inc.

35 MPLAB C30 与 ANSI C 的差别 要提取复数值符号 exp 的实部, 写 real exp 类似地, 用 imag 来提取虚部 例如 : complex float z; float r; float i; r = real z; i = imag z; 当对复数型值使用算子 ~ 时, 执行复数的共扼 MPLAB C30 可以采用非邻近的方式分配复数自动变量, 甚至可以将实部分配到寄存器中, 而将虚部分配到堆栈中, 反之亦然 调试信息格式无法表示这种非邻近的分配, 所以 MPLAB C30 把非邻近的复数变量描述为两个独立的非复数类型变量 如果实际变量名是 foo, 那么两个假设变量命名为 foo$real 和 foo$imag 双字整型 MPLAB C30 支持长度为 long int 两倍的整型数据类型 对于有符号整型, 写 long long int, 而对于无符号整型, 使用 unsigned long long int 可以通过在整型上添加后缀 LL 得到 long long int 类型的整型常量, 在整数上添加后缀 ULL 得到 unsigned long long int 类型的整型常量 可以在算术运算中像使用其他整型一样使用这些类型 这些数据类型的加 减和位逻辑布尔运算是开放源代码的, 但是, 这些数据类型的除法与移位不是开放源代码的 这些不开放源代码的运算要使用 MPLAB C30 自带的特殊库函数 用 typeof 引用类型 引用表达式类型的另一种方法是使用 typeof 关键字 使用这个关键字的语法与 sizeof 相似, 但是其结构在语义上类似于用 typedef 定义的类型名 有两种方法写 typeof 的参数 : 使用表达式或者使用类型 以下为使用表达式的例子 : typeof (x[0](1)) 这里假设 x 是函数数组, 描述的类型就是函数值的类型 以下为使用类型名作为参数的例子 : typeof (int *) 这里, 描述的类型是指向 int 的指针 如果写一个包含在 ANSI C 程序中时必须有效的头文件, 要使用 typeof, 而不要使用 typeof 2007 Microchip Technology Inc. DS51284F_CN 第 29 页

36 MPLAB C30 用户指南 2.4 语句差别 typeof 结构可用于可使用 typedef 名的任何地方 例如, 可以在声明和强制类型转换中, 或者 sizeof 或 typeof 的内部使用它 用 x 指向的类型声明 y: typeof (*x) y; 将 y 声明为这种值的数组 : typeof (*x) y[4]; 将 y 声明为指向字符的指针数组 : typeof (typeof (char *)[4]) y; 它等同于如下的传统 C 声明 : char *y[4]; 为了弄清楚 typeof 声明的含义, 以及为什么是有用的方法, 我们用以下宏改写它 : #define pointer(t) typeof(t *) #define array(t, N) typeof(t [N]) 现在声明可以这样改写 : array (pointer (char), 4) y; 这样, array (pointer (char), 4) 是指向 char 的四个指针的数组类型 本节讲述普通 ANSI C 与 MPLAB C30 所接受 C 之间的语句差别 语句差别是基本 GCC 实现的一部分, 本节讨论的内容基于标准 GCC 文档, 选择了 GCC 中 MPLAB C30 部分的特定语法和语义来讲述 将标号作为值 省略操作数的条件表达式 case 范围 将标号作为值 可以用单目运算符 && 获得在当前函数 ( 或包含函数 ) 中定义的标号的地址 值的类型为 void * 这个值为常量, 并可在这种类型的常量有效的任何地方使用这个值 例如 : void *ptr;... ptr = &&foo; 为使用这些值, 需要能跳转到值 这通过计算 goto 语句 goto *exp; 来实现 例如 : goto *ptr; 可使用 void * 类型的任何表达式 这些常量的一个用途是用于初始化用作跳转表的静态数组 : static void *array[] = { &&foo, &&bar, &&hack }; 然后就可以通过索引来这样选择标号 : goto *array[i]; 注 : 这并不检查下标是否超出范围 (C 中的数组索引从不这样做 ) DS51284F_CN 第 30 页 2007 Microchip Technology Inc.

37 MPLAB C30 与 ANSI C 的差别 2.5 表达式差别 这种标号值数组的用途与 switch 语句很类似 switch 语句更整齐, 比数组更好 标号值的另外一个用途是在线程代码的解释程序中 解释程序函数中的标号可存储在线程代码中用于快速调度 这种机制可能被错误使用, 而跳转到其他函数的代码中 编译器不能阻止这种现象的发生, 因此必须小心, 确保目标地址对于当前函数有效 省略操作数的条件表达式 条件表达式的中间操作数可以被省略 如果第一个操作数非零, 它的值就是条件表达式的值 因此, 对于表达式 : x? : y 如果 x 的值非零, 表达式的值就是 x 的值 ; 否则, 就是 y 的值 这个例子完全等价于 : x? x : y 在这个简单的例子中, 省略中间操作数并不是特别有用 当第一个操作数存在或者可能存在 ( 如果它是一个宏参数 ) 副作用时, 省略中间操作数就变得特别有用 那么重复中间操作数将产生副作用两次 省略中间操作数使用了已经计算过的值, 而不会因为重新计算而产生不希望的影响 case 范围 可以如下在单个 case 标号中指定一个连续值的范围 : case low... high: 这与各个 case 标号的适当数字有相同的作用, 每个数字对应从 low 到 high 中的每个整数值 这一功能对于 ASCII 字符码范围特别有用 : case 'A'... 'Z': 注意 : 在... 两边要写空格, 否则它和整数一起使用时可能出现解析错误 例如要这样写 : case : 而不要这样写 : case 1...5: 本节讨论普通 ANSI C 和 MPLAB C30 所接受的 C 之间的表达式差别 二进制常量 前面有 0b 或 0B 的一串二进制数字 ( 数字 0 后跟字母 b 或 B ) 视为二进制整型 二进制数字由数字 0 和 1 组成 例如, 十进制数字 255 可用二进制表示为 0b 像其他整型常量一样, 二进制常量可以以字母 u 或 U 为后缀来指定为无符号型 二进制常量也可以以字母 l 或 L 为后缀, 指定为长整型 类似地, 后缀 ll 或 LL 表示双字整型的二进制常量 2007 Microchip Technology Inc. DS51284F_CN 第 31 页

38 MPLAB C30 用户指南 注 : DS51284F_CN 第 32 页 2007 Microchip Technology Inc.

39 第 3 章使用 MPLAB C30 C 编译器 MPLAB C30 用户指南 3.1 简介 本章讨论通过命令行使用 MPLAB C30 C 编译器 关于在 MPLAB IDE 中使用 MPLAB C30 的信息, 请参阅 dspic DSC 语言工具入门 (DS70094C_CN) 3.2 主要内容 本章介绍以下内容 : 概述 文件命名约定 选项 环境变量 预定义常量 通过命令行编译单个文件 通过命令行编译多个文件 3.3 概述 编译驱动程序 (pic30-gcc) 对 C 和汇编语言模块及库文件进行编译 汇编和链接 大多数编译器命令行选项对于 GCC 工具集的所有实现都是通用的 只有少数是专门针对 MPLAB C30 编译器的 编译器命令行的基本形式如下 : pic30-gcc [options] files 注 : 命令行选项和文件扩展名要区分大小写 在第 3.5 节 选项 中对可用的选项进行了描述 例如, 下面的命令行编译 汇编和链接 C 源文件 hello.c, 生成可执行文件 hello.exe pic30-gcc -o hello.exe hello.c 2007 Microchip Technology Inc. DS51284F_CN 第 33 页

40 MPLAB C30 用户指南 3.4 文件命名约定 3.5 选项 编译驱动程序识别如下文件扩展名, 文件扩展名要区分大小写 表 3-1: 文件名 扩展名 定义 file.c 必须预处理的 C 源文件 file.h 头文件 ( 不对其进行编译或链接 ) file.i 不应预处理的源文件 file.o 目标文件 file.p 预过程抽象汇编语言文件 file.s 汇编代码 file.s 必须预处理的汇编代码 其他 要传递给链接器的文件 MPLAB C30 提供了许多控制编译的选项, 它们都是区分大小写的 针对 dspic DSC 器件的选项 控制输出类型的选项 控制 C 语言的选项 警告与错误控制选项 调试选项 控制优化的选项 控制预处理器的选项 汇编选项 链接选项 目录搜索选项 代码生成约定选项 DS51284F_CN 第 34 页 2007 Microchip Technology Inc.

41 使用 MPLAB C30 C 编译器 针对 dspic DSC 器件的选项 关于存储模型的更多信息, 请参阅第 4.7 节 存储模型 表 3-2: 选项 -mconst-in-code -mconst-in-data -merrata= id[,id]* -mlarge-code -mlarge-data -mcpu= target -mpa (1) 针对 dspic DSC 器件的选项 定义 将常量存放在 auto_psv 空间中 编译器将使用 PSV 窗口访问这些变量 ( 这是默认设置 ) 将常量存放到数据存储空间中 此选项使能特定的勘误变通解决方案 (errata workaround), 由 id 标识 id 的有效值时常改变, 对于某个特定的器件可能不需要 list 的 id 将列出目前支持的勘误表标识符以及对勘误表的简单描述 all 的 id 将使能所有目前支持的勘误变通解决方案 使用大代码模型编译 对于被调用函数是局部函数还是全局函数不做假设 选择这个选项时, 大于 32k 的单个函数是不支持的, 这样的函数可能导致汇编时错误, 因为函数内部的所有分支都是短跳转形式. 使用大代码模型编译 不假定静态变量和外部变量的位置 此选项选择目标处理器 ID ( 且如果调用了那些工具的话, 将目标处理器 ID 信息传递给汇编器和链接器 ) 这个选项会对某些预定义常量的设置产生影响, 更多信息参见第 3.7 节 预定义常量 可在本编译器发布版本附带的 Readme.htm 文件中找到所接受目标器件的完整列表 使能过程抽象优化 对嵌套深度没有限制 -mpa=n (1) -mno-pa (1) 允许过程抽象优化达到 n 级 如果 n 为 0, 那么禁止优化 如果 n 为 1, 允许一级抽象 ; 也就是说, 源代码中的指令序列可以抽象为子程序 如果 n 为 2, 允许二级抽象 ; 也就是说, 在一级抽象中包含在子程序中的指令可以抽象为更深一级的子程序 对于更大的 n 值, 继续依此类推 实际上是为了将子程序调用嵌套的深度限制为最大值 n 不允许过程抽象优化 ( 这是默认设置 ) 注 1: 过程抽象的操作与内联函数相反 这一过程设计为通过翻译单元从多处抽取相同的代码序列, 并存放到一个公共代码区 尽管这个选项一般并不会提高所生成代码的运行时性能, 却可以显著减小代码长度 采用 -mpa 编译的程序可能难以调试 ; 在使用 COFF 目标格式调试时, 不推荐使用这个选项 过程抽象是生成汇编文件后, 一个独立的编译阶段 这个阶段不跨翻译单元优化 当使能过程优化阶段时, 行内汇编代码仅限于有效的机器指令 不能使用无效的机器指令或指令序列, 或汇编伪指令 ( 段伪指令 宏和包含文件等 ), 否则过程抽象阶段会失败, 影响输出文件的生成 2007 Microchip Technology Inc. DS51284F_CN 第 35 页

42 MPLAB C30 用户指南 表 3-2: 针对 dspic DSC 器件的选项 ( 续 ) -mno-isr-warn -momf=omf -msmall-code -msmall-data -msmall-scalar -mtext=name -msmart-io [=0 1 2] 注 选项 定义 默认情况下, 如果在识别到的中断向量名后没有加 interrupt, 编译器将产生警告 此选项将禁止这个功能 选择编译器使用的 OMF ( 目标模块格式 ) omf 说明符可以为下列之一 : coff 生成 COFF 目标文件 ( 这是默认设置 ) elf 生成 ELF 目标文件 ELF 目标文件使用的调试格式为 DWARF 2.0 使用小代码模型编译 假定被调用函数在调用函数的 32K 字内 ( 这是默认设置 ) 使用小数据模型编译 假定所有静态变量和外部变量位于数据存储空间的低 8KB 地址 ( 这是默认设置 ) 与 -msmall-data 类似, 不同的是仅假定静态标量和外部标量位于数据存储空间的低 8KB 地址 ( 这是默认设置 ) 指定 -mtext=name 将文本 ( 程序代码 ) 放入名为 name 的段中, 而不是默认的.text 段中 等号两边不能有空格 该选项试图对传递给 printf 和 scanf 函数, 以及这两个函数 f 和 v 形式的格式字符串进行静态分析 非浮点型参数的使用将转换成使用仅支持整型的库函数形式 -msmart-io=0 将禁止这个选项, 而 -msmart-io=2 将使编译器转换带有变量或未知格式参数的函数调用 默认情况下 -msmart-io=1, 将仅转换它能验证的立即数值 1: 过程抽象的操作与内联函数相反 这一过程设计为通过翻译单元从多处抽取相同的代码序列, 并存放到一个公共代码区 尽管这个选项一般并不会提高所生成代码的运行时性能, 却可以显著减小代码长度 采用 -mpa 编译的程序可能难以调试 ; 在使用 COFF 目标格式调试时, 不推荐使用这个选项 过程抽象是生成汇编文件后, 一个独立的编译阶段 这个阶段不跨翻译单元优化 当使能过程优化阶段时, 行内汇编代码仅限于有效的机器指令 不能使用无效的机器指令或指令序列, 或汇编伪指令 ( 段伪指令 宏和包含文件等 ), 否则过程抽象阶段会失败, 影响输出文件的生成 DS51284F_CN 第 36 页 2007 Microchip Technology Inc.

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

44 MPLAB C30 用户指南 控制 C 语言的选项 下面的选项定义编译器使用的 C 语言的种类 表 3-4: 选项 C 语言控制选项 定义 -ansi -aux-info filename -ffreestanding -fno-asm -fno-builtin -fno-builtin-function -fsigned-char -fsigned-bitfields -funsigned-bitfields -fno-signed-bitfields -fno-unsigned-bitfields 支持 ( 且仅支持 ) 所有 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_ 作为前缀开始的内建函数 使 char 型变量为有符号, 就像 signed char ( 这是默认设置 ) 如果声明时未使用 signed 或 unsigned, 这些选项用来控制位域是有符号还是无符号的 默认情况下, 这样的位域都是有符号的, 除非使用 -traditional, 它使位域总是无符号的 -funsigned-char 使 char 型变量无符号, 就像 usigned char -fwritable-strings 将字符串存储到可写的数据段中, 但不要使字符串成为唯一 的 DS51284F_CN 第 38 页 2007 Microchip Technology Inc.

45 使用 MPLAB C30 C 编译器 警告与错误控制选项 警告是诊断消息, 它报告非本质错误 但有危险的语法结构, 或暗示可能存在错误 可以使用以 -W 开头的选项请求许多特定的警告, 例如, 使用 -Wimplicit 请求关于隐式声明的警告 每条这些特定的警告选项也可以用以 -Wno- 开头的相反形式来关闭警告, 如 -Wno-implicit 本手册只列出了这两种形式中的一种, 这两种形式都不是默认的 下面的选项控制 MPLAB C30 C 编译器产生的警告的数量和种类 表 3-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 } }; 2007 Microchip Technology Inc. DS51284F_CN 第 39 页

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

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

48 MPLAB C30 用户指南 表 3-5: -WALL 隐含的警告 / 错误选项 ( 续 ) 选项定义 -Wunused-parameter 当对函数参数进行了声明但从未使用时, 发出警告 要禁止这种警告, 使用 unused 属性 ( 参见第 节 指定变量的属性 ) -Wunused-variable 当对局部变量或非常量的 static 变量进行了声明但从未使用时, 发出警告 要禁止这种警告, 使用 unused 属性 ( 参见第 节 指定变量的属性 ) -Wunused-value 语句的计算结果未显式使用时发出警告 要禁止这种警告, 可以将表达式类型转换为 void 下面是不被 -Wall 隐含的 -W 选项 其中有些是关于用户通常认为不会有问题, 但有时会希望检查一下的语法结构的警告 其他是在某些情况下必须或很难避免的语法结构的警告, 没有简单的方法来修改代码以禁止这些警告 DS51284F_CN 第 42 页 2007 Microchip Technology Inc.

49 使用 MPLAB C30 C 编译器 表 3-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 在声明中没有放在最前面, 根据标准, 这种用法已经过时了 如果还指定了 -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() 被强制转换为任何 * 指针类型 -Wcast-align 当强制转换指针类型, 使目标所需分配的存储空间增加时产生警告 例如, 如果将 char * 强制转换为 int * 会产生警告 -Wcast-qual 当对指针进行强制类型转换, 从目标类型中去掉类型限定符时, 会产生警告 例如, 将 const char * 强制转换为普通的 char * 就会产生警告 2007 Microchip Technology Inc. DS51284F_CN 第 43 页

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

51 使用 MPLAB C30 C 编译器 表 3-6: -WALL 不隐含的警告 / 错误选项 ( 续 ) 选项 -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 为什么不要求这些警告的原因 2007 Microchip Technology Inc. DS51284F_CN 第 45 页

52 MPLAB C30 用户指南 调试选项 下面列出了一些用于调试的选项 表 3-7: 选项 调试选项 定义 -g 产生调试信息 MPLAB C30 支持同时使用 -g 和 -O, 因此可以调试优化的代码 调试优化代码的缺点是有时可能产生异常结果 : 某些声明的变量可能根本不存在 ; 控制流程可能短暂异常转移 ; 某些语句可能由于计算常量结果或已经获得其值而不执行 ; 某些语句可能由于被移出循环在不同的地方执行 尽管如此, 证明还是可以调试优化输出的 这使优化可能有错误的程序变得合理 -Q 使编译器打印它在编译的每个函数名, 并在结束时打印关于每遍编译的一些统计信息 -save-temps 不要删除中间文件 将中间文件放在当前目录中, 并根据源文件命名它们 因此, 用 -c -save-temps 编译 foo.c 将生成下面的文件 : foo.i ( 预处理文件 ) foo.p ( 预过程抽象汇编语言文件 ) foo.s ( 汇编语言文件 ) foo.o ( 目标文件 ) 控制优化的选项 下面列出了一些用于控制编译器优化的选项 表 3-8: 选项 一般优化选项 定义 -O0 不要优化 ( 这是默认设置 ) 不指定 -O 选项, 编译器的目标是降低编译成本, 使调试产生期望的结果 语句是独立的 : 如果在语句中插入断点暂停程序, 然后可以给任何一个变量赋一个新的值或将程序计数器更改到指向函数中的任何其他语句, 得到希望从源代码得到的结果 编译器仅将声明为 register 的变量分配到寄存器中 -O -O1 优化 优化编译需要花费更多的时间, 且对于较大的函数, 需要占用更多的存储空间 指定 -O 选项时, 编译器试图减小代码尺寸并缩短执行时间 指定 -O 选项时, 编译器开启 -fthread-jumps 和 -fdefer-pop, 并开启 -fomit-frame-pointer DS51284F_CN 第 46 页 2007 Microchip Technology Inc.

53 使用 MPLAB C30 C 编译器 表 3-8: 一般优化选项 ( 续 ) 选项 定义 -O2 执行更多优化 MPLAB C30 几乎执行所有支持的优化, 而不进行空间和速度的权衡 -O2 选项使能除循环展开 (-funroll-loops) 函数内联 (-finline-functions) 及严格别名优化 (-fstrict-aliasing) 之外的所有可选优化 这个选项还使能强制复制存储器操作数 (-fforce-mem) 及帧指针删除 (-fomit-frame-pointer) 与 -O 相比, 这个选项增加了编译时间, 但提高了生成代码的性能 -O3 执行最多的优化 -O3 开启所有 -O2 指定的优化并开启内联函数选项 -Os 优化代码尺寸 -Os 使能一般不增加代码尺寸的所有 -O2 优化 同时执行用于减小代码尺寸的其他优化 下面的选项控制特定的优化 -O2 选项启用这些优化中除 -funroll-loops -funroll-all-loops 和 -fstrict-aliasing 外的所有优化 在少数情况下, 当需要进行 微调 优化时, 可以使用下面的选项 表 3-9: 选项 特定的优化选项 定义 -falign-functions -falign-functions=n -falign-labels -falign-labels=n -falign-loops -falign-loops=n -fcaller-saves 将函数的开头对齐到下一个大于 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, 则使用由机器决定的默认设置 通过在函数调用前后发出其他指令来保护和恢复寄存器, 使能将值分配到会被函数调用破坏的寄存器中 仅当这种分配能生成更好的代码时才进行这种分配 2007 Microchip Technology Inc. DS51284F_CN 第 47 页

54 MPLAB C30 用户指南 表 3-9: 特定的优化选项 ( 续 ) -fcse-follow-jumps -fcse-skip-blocks -fgcse -fgcse-lm -fgcse-sm 选项 -fmove-all-movables -fno-defer-pop -fno-peephole -fno-peephole2 -fexpensiveoptimizations -ffunction-sections -fdata-sections -foptimizeregister-move -fregmove 定义 在公共子表达式消除中, 当任何其他路径都不到达跳转的目标地址时, 浏览跳转指令 例如, 当 CSE 遇到一条带有 else 子句的 if 语句时, 当条件检测为假时, CSE 将跟随跳转 这与 -fcse-follow-jumps 类似, 但使 CSE 跟随根据条件跳过块的跳转 当 CSE 遇到一个没有 else 子句的简单 if 语句时,-fcse-skip-blocks 使 CSE 跟随 if 前后的跳转 执行许多成本较高的次要优化 将每个函数或数据项存放到输出文件中其自己的段 函数名或数据项名决定输出文件中的段名 仅当使用这些选项有明显的好处时, 才使用这些选项 当指定这些选项时, 汇编器和链接器可能生成较大的目标文件和可执行文件, 且速度较慢 执行全局公共子表达式消除 这会同时执行全局常量和复制传播 使能 -fgcse-lm 时, 全局公共子表达式消除将试图移动仅能被向其中存储破坏的装载 这允许将包含装载 / 存储序列的循环改变为循环外的装载, 以及循环内的复制 / 装载 当使能 -fgcse-sm 时, 将在公共子表达式消除后运行存储移动 这试图将存储移出循环 当将这个选项与 -fgcse-lm 一起使用时, 包含装载 / 存储序列的循环可改变为循环前的装载和循环后的存储 强制将循环内所有不可变的计算移出循环 每次函数调用时, 总是在函数一返回时就弹出函数的参数 编译器通常允许几个函数调用的参数累积在堆栈中, 并将所有参数一次弹出堆栈 禁止特定于机器的窥孔 (peephole) 优化 窥孔优化发生在编译过程中的不同点 -fno-peephole 禁止对机器指令进行窥孔优化, 而 -fno-peephole2 禁止高级窥孔优化 要完全禁止窥孔优化, 要同时使用这两个选项 试图重新分配 move 指令中的寄存器编号, 并作为其他简单指令的操作数来增加关联的寄存器数量 -fregmove 和 -foptimize-register-moves 是相同的优化 DS51284F_CN 第 48 页 2007 Microchip Technology Inc.

00872a.book

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

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

0507A_Auto Tech_Microchip

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

More information

MCP47x6_DaughterBoard.book

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

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

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

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

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

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

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

More information

FY.DOC

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

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

21666b.book

21666b.book 具 有 关 断 功 能 的 80 ma 小 型 CMOS LDO TC1016 特 性 节 省 空 间 的 5 引 脚 SC-70 和 SOT-23 封 装 极 低 的 工 作 电 流, 利 于 延 长 电 池 寿 命 : 典 型 值 53 µa 很 低 的 电 压 差 (Dropout Voltage) 额 定 输 出 电 流 :80 ma 仅 需 一 个 1µF 的 陶 瓷 输 出 电 容 高

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

41632B.book

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

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

MCP1630

MCP1630 可 用 单 片 机 控 制 的 高 速 脉 宽 调 制 器 特 性 高 速 PWM 操 作 ( 电 流 检 测 至 输 出 有 12 ns 延 时 ) 工 作 温 度 范 围 : - -4 C 至 125 C 精 确 峰 值 电 流 限 制 (±5%)(MCP163) 电 压 模 式 和 平 均 电 流 模 式 控 制 (MCP163V) CMOS 输 出 驱 动 器 ( 直 接 驱 动 MOSFET

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

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

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

PIC18F65J90/85J90 Product Brief

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

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

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

一 登录 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

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

手册 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

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

AN1083.book

AN1083.book 作 者 : 简 介 本 应 用 笔 记 说 明 了 无 传 感 器 无 刷 直 流 (Brushless DC, BLDC) 电 机 控 制 算 法, 该 算 法 采 用 dspic 数 字 信 号 控 制 器 (digital signal controller, DSC) 实 现 该 算 法 对 电 机 每 相 的 反 电 动 势 (back-electromotive Force,back-

More information

Microsoft Word - CIN-DLL.doc

Microsoft Word - CIN-DLL.doc 6.3. 调 用 动 态 链 接 库 (DLL) 相 对 于 CIN 来 讲,NI 更 推 荐 用 户 使 用 DLL 来 共 享 基 于 文 本 编 程 语 言 开 发 的 代 码 除 了 共 享 或 重 复 利 用 代 码, 开 发 人 员 还 能 利 用 DLL 封 装 软 件 的 功 能 模 块, 以 便 这 些 模 块 能 被 不 同 开 发 工 具 利 用 在 LabVIEW 中 使 用

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

30177t.book

30177t.book Microchip 开 发 系 统 订 购 指 南 2005 年 6 月 2006 Microchip Technology Inc. DS30177T_CN 请 注 意 以 下 有 关 Microchip 器 件 代 码 保 护 功 能 的 要 点 : Microchip 的 产 品 均 达 到 Microchip 数 据 手 册 中 所 述 的 技 术 指 标 Microchip 确 信 : 在

More information

水晶分析师

水晶分析师 大数据时代的挑战 产品定位 体系架构 功能特点 大数据处理平台 行业大数据应用 IT 基础设施 数据源 Hadoop Yarn 终端 统一管理和监控中心(Deploy,Configure,monitor,Manage) Master Servers TRS CRYSTAL MPP Flat Files Applications&DBs ETL&DI Products 技术指标 1 TRS

More information

2.0 MHz, 500 mA Synchronous Buck Regulator

2.0 MHz, 500 mA Synchronous Buck Regulator 2.0 MHz 500 ma 同 步 降 压 稳 压 器 MCP1603 特 性 典 型 效 率 大 于 90% 输 出 电 流 最 高 为 500 ma 低 静 态 电 流 = 45 µa ( 典 型 值 ) 低 关 断 电 流 = 0.1 µa ( 典 型 值 ) 可 调 输 出 电 压 : - 0.8V 至 4.5V 固 定 输 出 电 压 : - 1.2V 1.5V 1.8V 2.5V 和

More information

光 探 测 应 用 光 探 测 应 用 可 以 使 用 许 多 探 测 器, 例 如 光 电 二 极 管 光 电 晶 体 管 光 敏 电 阻 光 电 管 光 电 倍 增 管 电 荷 耦 合 器 件 等 本 应 用 笔 记 将 重 点 介 绍 光 电 二 极 管, 因 为 它 是 最 常 用 的 光

光 探 测 应 用 光 探 测 应 用 可 以 使 用 许 多 探 测 器, 例 如 光 电 二 极 管 光 电 晶 体 管 光 敏 电 阻 光 电 管 光 电 倍 增 管 电 荷 耦 合 器 件 等 本 应 用 笔 记 将 重 点 介 绍 光 电 二 极 管, 因 为 它 是 最 常 用 的 光 用 于 光 探 测 应 用 的 MCP649 运 放 AN494 作 者 : 简 介 Yang Zhen Microchip Technology Inc. 许 多 光 探 测 应 用 中 经 常 使 用 低 输 入 偏 置 运 算 放 大 器 ( 运 放 ), 以 降 低 电 流 误 差 和 提 高 输 出 信 号 的 精 度 以 下 为 典 型 的 光 探 测 应 用 : 烟 雾 探 测 器 火

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

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

nooog

nooog C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1

More information

编译原理与技术

编译原理与技术 编译原理与技术 中间代码生成 2015/11/7 编译原理与技术 讲义 1 中间代码生成 - 布尔表达式翻译 - 控制流语句翻译 2015/11/7 编译原理与技术 讲义 2 布尔表达式的翻译 布尔表达式文法 G 4 E E 1 or E 2 E 1 and E 2 not E 1 ( E 1 ) id 1 relop id 2 true false id 3 布尔运算符 or and 和 not(

More information

HP and Canon 单色通用芯片表 SCC 芯片 图片 HP 700 M712, 700 M725 CF214X (14X) 17.5 HP 5200 Q7516A U16-2CHIP SSS 846 芯片记号 (U16-2) Canon LBP-3500, LBP-3900, LBP-392

HP and Canon 单色通用芯片表 SCC 芯片 图片 HP 700 M712, 700 M725 CF214X (14X) 17.5 HP 5200 Q7516A U16-2CHIP SSS 846 芯片记号 (U16-2) Canon LBP-3500, LBP-3900, LBP-392 HP and Canon 单色通用芯片表在线访问我们的网站, 可以得到更多的信息 : www.scc-inc.com/chipcenter 全部开始都是专利通用芯片一个芯片, 多个不同型号的硒鼓 注意 : 当在这个文档上要寻找一个特殊的 或打印机的型号时, 在你的键盘上同时按 CTRL 键和 F 键就能搜索到 HP and Canon 单色通用芯片表 SCC 芯片 图片 HP 700 M712, 700

More information

科学计算的语言-FORTRAN95

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

More information

93004A.book

93004A.book 用 dspic DSC MCPWM 模块驱动交流感应电机 作者 : Jorge Zambada Microchip Technology Inc. 如图 1 所示, 电机绕组的电感对 PWM 电压源的电流进行滤波 正如下文即将介绍的, 基于该原理我们可利用 PWM 信号产生正弦波来对三相 ACIM 进行通电 引言 本文档概括介绍了采用 dspic3f 电机控制数字信号控制器系列芯片实现的电机控制 PWM

More information

2015年计算机二级(C语言)模拟试题及答案(三)

2015年计算机二级(C语言)模拟试题及答案(三) 2016 年计算机二级 (C 语言 ) 模拟试题及答案 (3) 1.( A ) 是构成 C 语言程序的基本单位 A 函数 B 过程 C 子程序 D 子例程 2.C 语言程序从 ( C ) 开始执行 A 程序中第一条可执行语句 B 程序中第一个函数 C 程序中的 main 函数 D 包含文件中的第一个函数 3 以下说法中正确的是( C ) A C 语言程序总是从第一个定义的函数开始执行 B 在 C 语言程序中,

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

Ps22Pdf

Ps22Pdf C ( CIP) C /. :, 2001. 7 21 ISBN 7-5624 -2355-5. C........ C. TP312 CIP ( 2001 ) 034496 C * * : 7871092 1 /16 : 14. 25 : 356 20017 1 20017 1 : 1 6 000 ISBN 7-5624-2355-5 / TP311 : 21. 00 C, C,,,, C,, (

More information

静态分析 投放文件 行为分析 互斥量 (Mutexes) 执行的命令 创建的服务 启动的服务 进程 cmd.exe PID: 2520, 上一级进程 PID: 2556 cmd.exe PID: 2604, 上一级进程 PID: 2520 访问的文件 C:\Users\test\AppData\Lo

静态分析 投放文件 行为分析 互斥量 (Mutexes) 执行的命令 创建的服务 启动的服务 进程 cmd.exe PID: 2520, 上一级进程 PID: 2556 cmd.exe PID: 2604, 上一级进程 PID: 2520 访问的文件 C:\Users\test\AppData\Lo 魔盾安全分析报告 分析类型 开始时间 结束时间 持续时间 分析引擎版本 FILE 2016-11-25 00:20:03 2016-11-25 00:22:18 135 秒 1.4-Maldun 虚拟机机器名 标签 虚拟机管理 开机时间 关机时间 win7-sp1-x64 win7-sp1-x64 KVM 2016-11-25 00:20:03 2016-11-25 00:22:18 魔盾分数 0.0

More information

01236B.book

01236B.book 使用 C3 和定时器连接 dspic33 DSC 和 PIC24 MCU 与兼容 UNI/O 总线的串行 EEPROM 作者 : 简介 Martin Kvasnicka Microchip Technology Inc. 随着嵌入式系统小型化的趋势, 市场对于减少器件间通信所用 I/O 引脚数的需求也与日俱增 Microchip 开发的 UNI/O 总线正满足了这一需求, 这一个低成本且易于实现的解决方案,

More information

01096B.book

01096B.book 使用 C30 编译器进行 SPI 串行 EEPROM 与 dspic33f 和 PIC24F 的接口设计 AN1096 作者 : 引言 Martin Kvasnicka Microchip Technology Inc. Microchip 的 25XXX 系列串行 EEPROM 均与 SPI 兼容, 其最大时钟频率在 3 MHz 到 20 MHz 的范围内 许多时候, 当设计利用串行 EEPROM

More information

800 mA Fixed-Output CMOS LDO with Shutdown

800 mA Fixed-Output CMOS LDO with Shutdown I 2 C 7/8-7 128 129-8 256 257 4 R AB - 5 kω - 1 kω - 5 kω - 1 kω 75Ω - 5 ppm -7 C - 15 ppm I 2 C - 1 khz - 4 khz - 3.4 MHz / TCON 1.5V 2.5 ua 12.5V SCL SDA - 2.7V 5.5V - 1.8V 5.5V -3 db 2 MHz 5. kω -4

More information

The DatasheetArchive - Datasheet Search Engine

The DatasheetArchive - Datasheet Search Engine 750 khz 升 压 控 制 器 特 征 输 出 功 率 高 于 5W 输 出 电 压 从 3.3V 至 100V 以 上 750 khz 门 控 振 荡 器 开 关 频 率 对 电 池 供 电 或 宽 输 入 电 压 范 围 设 备, 占 空 比 可 调 输 入 电 压 范 围 :2.0V 至 5.5V 应 用 单 端 初 级 电 感 转 换 器 (SEPIC) 和 反 激 式 拓 扑 结 构

More information

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf (%d, & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9 201 201 21 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 1 B 1 C 5 D RPG 10 E 10 F 1 G II 1 1 201 201 C 1 # include 2 int main ( void

More information

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016

More information

untitled

untitled 1 5 IBM Intel 1. IBM 第 1/175 页 第 2/175 页 第 3/175 页 80 第 4/175 页 2. IBM 第 5/175 页 3. (1) 第 6/175 页 第 7/175 页 第 8/175 页 = = 第 9/175 页 = = = = = 第 10/175 页 = = = = = = = = 3. (2) 第 11/175 页 第 12/175 页 第 13/175

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

untitled

untitled N1113 8051MU I 2 EEPROM lexandru Valeanu Microchip Technology Inc. Microchip Technology 24XXX EEPROM 2 SL 24XXX EEPROM 24XXX EEPROM I 2 100 khz 1MHz 24XXX EEPROM 2 I 2 EEPROM 128 512 b 100 khz 1MHz 1.7V

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

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 1 2 1 2 3 4 5 6 7 8 9 10 3 1 150 2 150 1 1 1.1 1.1.1 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.4 1.4.1 CPU 1.4.2 I/O 1.4.3 I/O 1.5 1.5.1 CISC RISC 1.5.2 1.5.3 1.6 1.6.1 1.6.2 N 1.6.3 2 2.1 2.1.1 2.1.2 2.1.3

More information

Microsoft Word - MSP430 Launchpad 指导书.docx

Microsoft Word - MSP430 Launchpad 指导书.docx Contents 3... 9... 14 MSP430 LAUNCHPAD 指导书 3 第一部分第一个工程 New Project File > New > CCS Project Project name: ButtonLED Device>Family: MSP430 Variant: MSP430G2553 Project templates and examples : Empty Project

More information

AN901.book

AN901.book dspic30f 在 无 传 感 器 BLDC 控 制 中 的 应 用 AN901 著 者 : 合 著 者 : 引 言 本 应 用 笔 记 描 述 了 一 种 完 全 可 行 且 高 度 灵 活 的 软 件 应 用, 使 用 dspic30f 来 控 制 无 传 感 器 无 刷 直 流 (brushless DC,BLDC) 电 机 此 软 件 将 dspic30f 外 设 广 泛 应 用 于 电

More information

1500XA Daniel Danalyzer 1500XA Rosemount Analytical 1500XA P/N 3-9000-757 A 2010 5 ii 1500XA 1500XA iii iv 1500XA : 1-2 1500XA - 1500XA 1-3 1-4 1500XA 1500XA 1-5 1-6 1500XA 1500XA 1-7 1-8 1500XA

More information

册子0906

册子0906 IBM SelectStack ( PMC v2.0 ) 模块化私有云管理平台 是跨主流虚拟化技术的统一资源云管理平台 01 亮点 : 快速可靠地实现集成化 私有云管理平台 02/03 丰富的功能支持企业数据中心云计算 扩展性强 : 简单易用 : 04/05 功能丰富 : 06/07 为什么选择 IBM SelectStack (PMC v2.0)? 快速实现价值 提高创新能力 降低 IT 成本 降低复杂度和风险

More information

重勘信息的哲学含义 ¼ ½ ¾ ¼ ½ ¾

重勘信息的哲学含义 ¼ ½ ¾ ¼ ½ ¾ 重勘信息的哲学含义 肖 峰 信息不能以任何方式归结为物质 它既不是物质内在既成的东西 也不是纯粹的自然现象 更不是可以离开主体而独立存在的纯客观现象或无处不在的普遍现象 哲学含义上的信息是一种非物质的存在 是主体对对象的感知 辨识和建构 也是生命控制系统尤其是神经系统的一种机能 信息与 意义 关联 是一种属人的认识现象 不存在所谓的 本体论信息 而只存在认识论意义上的信息 信息的哲学含义应与信息的日常用法具有连续性

More information

论文,,, ( &, ), 1 ( -, : - ), ; (, ), ; ;, ( &, ),,,,,, (, ),,,, (, ) (, ),,, :. : ( ), ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ( ),,,, 1 原译作 修补者, 但在英译版本中, 被译作

论文,,, ( &, ), 1 ( -, : - ), ; (, ), ; ;, ( &, ),,,,,, (, ),,,, (, ) (, ),,, :. : ( ), ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ( ),,,, 1 原译作 修补者, 但在英译版本中, 被译作 * 夏传玲 : 本文简要回顾了国内外定性研究在最近 多年的发展概况, 总结 了定性研究的六个发展趋势和分析策略上的三种流派 在上述两种背景下, 本文探讨了计算机辅助的定性分析给定性研究带来的机遇和挑战, 特别是它和手工操作对比时的优势和劣势, 以及应用这种定性分析技术所可能面临的困难 : 定性研究定性分析 文化差异,, (, ),,,, ( - ) ( - ) ( - ) ( - ) ( - ) (

More information

Welch Allyn Spot Vital Signs LXi, DFU, Chinese

Welch Allyn Spot Vital Signs LXi, DFU, Chinese Welch Allyn Spot Vital Signs LXi BP SYS mmhg DIA mmhg TEMP 4 WEST 127 AM Reading 735 01 F 98 % 62 SpO2 PULSE /min Patient ID 0123456789 Weight Pain Height Clear Respiration Send/Next Reading Enter Spot

More information

工程项目进度管理 西北工业大学管理学院 黄柯鑫博士 甘特图 A B C D E F G 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 甘特图的优点 : 直观明了 ( 图形化概要 ); 简单易懂 ( 易于理解 ); 应用广泛 ( 技术通用 ) 甘特图的缺点 : 不能清晰表示活动间的逻辑关系 WBS 责任分配矩阵 ( 负责〇审批

More information

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public

More information

bingdian001.com

bingdian001.com TSM12M TSM12 STM8L152C6, STM8L152R8 MSP430F5325 whym1987@126.com! /******************************************************************************* * : TSM12.c * : * : 2013/10/21 * : TSM12, STM8L f(sysclk)

More information

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p NOWOER.OM /++ 程师能 评估. 单项选择题 1. 下 描述正确的是 int *p1 = new int[10]; int *p2 = new int[10](); p1 和 p2 申请的空间 的值都是随机值 p1 和 p2 申请的空间 的值都已经初始化 p1 申请的空间 的值是随机值,p2 申请的空间 的值已经初始化 p1 申请的空间 的值已经初始化,p2 申请的空间 的值是随机值 2.

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

01

01 ZEBRA 技术白皮书 条码编码 101 相关知识介绍 引言 20 70 数据 80 20 90 (JIT) AIAG EIA HIBCC HAZMAT 条码的优势提高数据准确性 99% 85% / / 提升效率 / 2 Zebra Technologies 保持一致性 ID 改进库存和资产管理 成本 / 效益分析 ID ID ID (ERP) RFID Zebra Technologies 3 ID

More information

第5章修改稿

第5章修改稿 (Programming Language), ok,, if then else,(), ()() 5.0 5.0.0, (Variable Declaration) var x : T x, T, x,,,, var x : T P = x, x' : T P P, () var x:t P,,, yz, var x : int x:=2. y := x+z = x, x' : int x' =2

More information

IDEO_HCD_0716

IDEO_HCD_0716 IDEO HCD Toolkit Tencent CDC ...? Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC

More information

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不 1. 右 側 程 式 正 確 的 輸 出 應 該 如 下 : * *** ***** ******* ********* 在 不 修 改 右 側 程 式 之 第 4 行 及 第 7 行 程 式 碼 的 前 提 下, 最 少 需 修 改 幾 行 程 式 碼 以 得 到 正 確 輸 出? (A) 1 (B) 2 (C) 3 (D) 4 1 int k = 4; 2 int m = 1; 3 for (int

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

提纲 1 2 OS Examples for 3

提纲 1 2 OS Examples for 3 第 4 章 Threads2( 线程 2) 中国科学技术大学计算机学院 October 28, 2009 提纲 1 2 OS Examples for 3 Outline 1 2 OS Examples for 3 Windows XP Threads I An Windows XP application runs as a seperate process, and each process may

More information

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf (%d, & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf (%d %d 2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,

More information

Table of Contents Design Concept 03 Copyrights & TradeMark 04 Special Notice 05 Notice to concerned 05 Installation and Registration Introduction 07 s

Table of Contents Design Concept 03 Copyrights & TradeMark 04 Special Notice 05 Notice to concerned 05 Installation and Registration Introduction 07 s MapAsia MapKing TM User Guide Full Function Version (Pocket PC and PC) For Microsoft Pocket PC/ Pocket PC 2002/2003 Microsoft Windows XP/2000/Me/98 Edition 2004 ( : ) 2002-2004, MapAsia.com Limited Table

More information

器之 间 向一致时为正 相反时则为负 ③大量电荷的定向移动形成电 流 单个电荷的定向移动同样形成电流 3 电势与电势差 1 陈述概念 电场中某点处 电荷的电势能 E p 与电荷量 q Ep 的比值叫做该点处的电势 表达式为 V 电场中两点之间的 q 电势之差叫做电势差 表达式为 UAB V A VB 2 理解概念 电势差是电场中任意两点之间的电势之差 与参考点的选择无关 电势是反映电场能的性质的物理量

More information

! %! &!! % &

! %! &!! % & 张海峰 姚先国 张俊森 借鉴 的有效教育概念 本文利用 年间的中国省级面板数据估计了平均教育年限 教育数量 和平均师生比率 教育质量 对地区 劳动生产率的影响 本文的实证分析结果表明 以师生比率衡量的教育质量对劳动生产 率有显著且稳健的正效应 在均值处师生比率每上升一个标准差 有助于提高地区劳动生产率约 教育数量对劳动生产率的影响大小部分取决于教育质量的高低 教育质量越高教育数量对劳动生产率的促进效应越大

More information

TD

TD *TD-000212-05* 20- 应用实例 4 本例显示的是使用两个亚低 音扬声器和多个顶箱的双声 道 立体声 设置 除了各声道都增加了一个顶 箱外 也可以增加更多的顶 箱 本例和例 3 的情况一 致 声道 2 或 右声道 声道 1 或 左声道 要接到更多的顶箱 将最后 一个顶箱的全幅线路输出接 头处的线缆接到下一个顶箱 的全幅线路输入接头 在不 降低信号质量的情况下 最

More information

}; "P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ", " " string imagedata; if(0!= read_image("a.jpg",imagedata)) { return -1; } string rsp; ytopen_sdk m_sd

}; P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ,   string imagedata; if(0!= read_image(a.jpg,imagedata)) { return -1; } string rsp; ytopen_sdk m_sd tencentyun-youtu c++ sdk for 腾讯云智能优图服务 & 腾讯优图开放平台 安装 运行环境 Linux 依赖项 - curl-7.40.0, 获取更新版本 https://github.com/bagder/curl - openssl-1.0.1k, 获取更新版本 https://github.com/openssl/openssl 构建工程 工程采用 CMake 构建 1.

More information

第 期 曹 源 等 形式化方法在列车运行控制系统中的应用

第 期 曹 源 等 形式化方法在列车运行控制系统中的应用 第 卷 第 期 年 月 交通运输工程学报 曹 源 唐 涛 徐田华 穆建成 为了确保列车运行控制系统设计和开发的正确性 比较了仿真 测试和形式化 种能够验证 系统设计正确性的方式 根据列车运行控制系统对安全的苛求性 提出了 个与系统安全相关的重要特性 即实时性 混成性 分布 并发 性 反应性 并分析了与这些特性相关的具体形式化方法 通 过对每种形式化方法的数学基础和应用范围的分析和归类 给出了各种方法的优势和不足

More information

CH01.indd

CH01.indd 3D ios Android Windows 10 App Apple icloud Google Wi-Fi 4G 1 ( 3D ) 2 3 4 5 CPU / / 2 6 App UNIX OS X Windows Linux (ios Android Windows 8/8.1/10 BlackBerry OS) 7 ( ZigBee UWB) (IEEE 802.11/a/b/g/n/ad/ac

More information

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20 (Jump) (Loop) (Conditional jump) CMP CALL AND SAR/SHR TEST JMP NOT SAL/SHL Jnnn* OR RCR/ROR LOOP XOR RCL/ROL RETn * nnn, JNE JL -128 127-32,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far

More information

Using Microchip’s Micropower LDOs

Using Microchip’s Micropower LDOs 使用 Microchip 的微功率 LDO AN765 作者 : 简介 Paul Paglia, 公式 1: Microchip Technology Inc. = V REF [( ) 1] V REF = 1.20V Microchip Technology, Inc 的微功率 LDO 系列采用低电压 CMOS 工艺技术 这些 LDO 提供与双极型稳压器类似的纹波抑制和压差特性, 但效率却显著提高了

More information

c语言面试题总结.doc

c语言面试题总结.doc 参考 : C/C++ 程序员面试指南 杨国祥等编著电子工业出版社 编程规范 1 头文件内有时会定义一些类, 结构体等, 如果被包含多次, 将会出现类型重定义的错误, 所以通常使用预处理指令来解决这个问题 #ifndef 标识 #define 标识. #endif 标识在理论上是可以自由命名的, 但每个头文件的这个标识都应该是唯一的, 标识的命名的规则一般是头文件名全大写, 前后加下划线, 并把头文件中的.

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

破解斯蒂德曼的联合生产之谜 斯蒂德曼声称 如果按照马克思的方法来计算价值 则在联合生产中 就会出现负的价值和剩余价值 从而出现负剩余价值与正利润并存的现象 这是不正确的 其原因是 斯蒂德曼在确定不同生产过程中劳动所创造的价值时 根据的是自然时间 而非社会必要劳动时间 实际上 如果按照社会必要劳动时间来决定不同生产过程中劳动所创造的价值 则即使是在联合生产的条件下 也不可能出现负的价值和剩余价值 从而更谈不上负剩余价值与正利润并存

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

Microsoft PowerPoint - C语言课件-9-结构体.pptx

Microsoft PowerPoint - C语言课件-9-结构体.pptx 第九章结构体 郎大鹏 第九章结构体 9.1 结构体类型的声明方法 9.2 结构体类型变量的定义与使用 9.3 结构体数组 9.4 编程举例 9.5 习题 9.1 结构体类型的声明方法 结构体声明的语法形式如下 : struct 结构体标识符 成员变量列表 ; }; 例如, 为了描述班级 ( 假设仅仅包括班级编号 专业 人数等信息 ), 可以声明如下的结构体类型 struct Class char Code[10];

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

张成思 本文运用向量系统下的协整分析方法 针对 年不同生产和消 费阶段的上中下游价格的动态传导特征以及货币因素对不同价格的驱动机制进行分析 研究结果表明 我国上中下游价格存在长期均衡关系 并且上中游价格对下游价格具有显 著动态传递效应 而下游价格对中游价格以及中游价格对上游价格分别存在反向传导的 倒逼机制 另外 货币因素对上游价格的动态驱动效果最为显著 但并没有直接作用于下 游价格 因此 虽然货币政策的现时变化可能在一段时间内不会直接反映在下游居民消费价格的变化上

More information

Chapter #

Chapter # 第三章 TCP/IP 协议栈 本章目标 通过本章的学习, 您应该掌握以下内容 : 掌握 TCP/IP 分层模型 掌握 IP 协议原理 理解 OSI 和 TCP/IP 模型的区别和联系 TCP/IP 介绍 主机 主机 Internet TCP/IP 早期的协议族 全球范围 TCP/IP 协议栈 7 6 5 4 3 应用层表示层会话层传输层网络层 应用层 主机到主机层 Internet 层 2 1 数据链路层

More information

(Microsoft Word - PK254P\262\331\327\366\312\326\262\341.doc)

(Microsoft Word - PK254P\262\331\327\366\312\326\262\341.doc) PROKIN 3.0 软 件 操 作 手 册 TecnoBody S.r.l. Published: Luglio 2006 Code-Version: 1 目 录 第 一 节... 7 介 绍... 7 手 册 中 使 用 的 安 全 标 志 和 符 号... 8 概 述... 10 安 全 规 则... 11 PROKIN 系 统 安 装... 11 系 统 组 成... 13 系 统 安 装

More information

Explorer 16 Development Board User’s Guide Addendum for PIC32MX

Explorer 16 Development Board User’s Guide Addendum for PIC32MX Explorer 16 开发板用户指南 PIC32MX 补充 2013 Microchip Technology Inc. DS61147B_CN 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一

More information

1 2005 9 2005,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : 100081 : : 7871092 1 /16 : 8. 75 : 96 : 2005 11 1 : 2005 11 1 : ISBN 7

1 2005 9 2005,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : 100081 : : 7871092 1 /16 : 8. 75 : 96 : 2005 11 1 : 2005 11 1 : ISBN 7 1 2005 9 2005,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : 100081 : : 7871092 1 /16 : 8. 75 : 96 : 2005 11 1 : 2005 11 1 : ISBN 7-80097 - 564-9 /TP 8 : 10. 00 ,,,, 1994 NCRE,,, ( ),,,,,

More information

Microsoft Word - 11.doc

Microsoft Word - 11.doc 除 錯 技 巧 您 將 於 本 章 學 到 以 下 各 項 : 如 何 在 Visual C++ 2010 的 除 錯 工 具 控 制 下 執 行 程 式? 如 何 逐 步 地 執 行 程 式 的 敘 述? 如 何 監 看 或 改 變 程 式 中 的 變 數 值? 如 何 監 看 程 式 中 計 算 式 的 值? 何 謂 Call Stack? 何 謂 診 斷 器 (assertion)? 如 何

More information

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與 程 式 編 写 語 言 在 完 成 這 章 後, 你 將 能 夠 了 解 程 式 編 写 語 言 的 功 能 了 解 高 階 語 言 和 低 階 語 言 之 間 的 分 別 知 道 翻 譯 程 式 的 意 義 和 能 夠 把 翻 譯 程 式 分 類 為 : 匯 編 程 式 編 譯 程 式 和 解 譯 程 式 認 識 不 同 翻 譯 程 式 的 優 點 和 缺 點 程 式 是 指 揮 電 腦 的 指

More information

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2 (Guangzhou) AIT Co, Ltd 020-84106666 020-84106688 http://wwwlenxcn Xi III Zebra XI III 1 (Guangzhou) AIT Co, Ltd 020-84106666 020-84106688 http://wwwlenxcn 230V 110V [ ]! 2 (Guangzhou) AIT Co, Ltd 020-84106666

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