C语言设计规范.pptx_第1页
C语言设计规范.pptx_第2页
C语言设计规范.pptx_第3页
C语言设计规范.pptx_第4页
C语言设计规范.pptx_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机程序设计规范 内部培训 培训内容 单片机程序设计规范培训目的 让员工培养好的编程习惯 了解 掌握编程规范 统一部门编程风格 保证程序编写质量 提高程序的可移植性和维护性 单片机程序设计规范 一 程序质量的评估程序的优劣可以从两个方面进行评估 定量指标和定性指标 1 定量指标包括 1 程序代码执行效率 2 程序占用资源多少 2020 1 14 单片机程序设计规范 2 定性指标包括 1 可调试性 即是否方便排除程序语法错误 2 可测试性 即是否方便验证程序功能的正确性 3 可维护性 即是否方便程序的修改和升级 4 可移植性 5 可读性 2020 1 14 二 程序架构应用层 界面层和底层驱动层1 底层驱动层主要包含直接和硬件相关的驱动程序 如数码管显示 按键 峰鸣器 继电器和电机控制等 底层的各个模块间要保持各自的独立性 不产生直接的数据交互 底层也不直接访问应用层 如果有需要 都要通过界面层进行数据交互2 界面层主要提供数据交互 为应用层和底层驱动之间以及底层驱动层各模块之间提供数据的交互 3 应用层主要完成具体功能的实现 它要通过界面层控制底层驱动层各模块来完成所需功能 而不能越过界面层直接访问底层驱动层 所有的用户接口要在应用层来实现 2020 1 14 三 设计基本原则1 尽量减少各个子程序功能模块间的耦合度 耦合度是指一个程序的执行对另一个程序的影响力 保证各自的独立性 一般情况下 建议子程序模块功能的划分要尽可能细化 功能尽量单一 减少子程序模块间的数据交互 2 在满足功能需求的情况下 可适当牺牲代码的执行速度 以保证程序的透明度 3 主要子程序模块间的交互 要通过特定的界面跟应用层进行沟通 可使用FIFO Firstin Firstout 或是Buffer两种方式 每种子程序模块都可以有自己的FIFO 例如 就按键来说 一般有Keybuffer KeyFIFO或直接进入APFIFO三种设计方式 2020 1 14 4 每个子程序模块只能有唯一一个程序入口地址在程序的首部 只能有唯一一个程序出口地址在程序的尾部 5 上电复位时要对所有的RAM空间进行初始化 建议用户寄存器清零 系统寄存器进行必要设定 不要使用未经初始化的变量 RAM未经过完整的初始化 容易导致程序执行的不确定性 这一不良现象往往在批量生产中有所体现 这点是工程师经常犯错的地方 须特别注意 6 系统中如果需要等待一些未知的应答信号 如通信或等待输入信号时 必须进行超时或异常处理 以防止程序进入 死等 状态 2020 1 14 7 通过对系统数据结构的划分与组织的改进 以及对程序算法的优化来提高空间效率 这种方式是解决软件空间效率的根本办法 8 保证循环体内的工作量最小化 应仔细考虑循环体内的语句是否可以放在循环体之外 使循环体内工作量最小 从而提高程序的执行效率 9 在多重循环中 应将最忙的循环放在最内层 2020 1 14 10 中断处理程序应尽量短 有效的作法为 在中断中进行标记 在主程序中进行处理 但一些实时性要求较高的程序例外 此外 进入中断时应该保存涉及到的变量和寄存器 11 看门狗的正确使用 看门狗主要用于微控制器死机时的时间溢出复位 需要程序适时清除 正确的处理方式为 整个系统程序中尽量保证只有一处清看门狗位置 而且应处在主循环的主干位置 切记不可在定时中断中清狗 因为微控制器有时只是在主循环中死掉 2020 1 14 四 排版风格1 程序采用缩进风格编写 缩进为1个Tab键 1个Tab键定义为8个空格位 2 程序中的标号要从第一列开始书写 以 开头的预编译命令也要从第一列开始书写 其他预编译命令采用缩进风格编写 3 定义变量或常量时 变量名或常量名与命令符之间使用2个Tab键 相当于16个空格位 分开 命令符与后面的操作数用1个Tab键 相当于8个空格位 分开 4 程序语句后面若有注释 所有的注释要遵守上下对齐的原则 2020 1 14 五 注释1 程序应该包括两个部分注释 说明部分和语句注释 一般情况下 源程序有效注释量必须在30 以上 2 说明部分 1 源文件说明部分位于每个源文件的最前面 主要描述 文件名 作者 生成日期 联络方式 功能描述 版本号 软硬件平台 版权说明 修改记录等的简要说明 以英文书写 2 子程序说明部分位于每个子程序的最前面 主要描述 子程序名称 功能 设计原理 所用变量 入口条件 出口信息 调用模块 堆栈层数 影响资源 算法简述 使用说明和修改记录等 2020 1 14 3 边写代码边注释 修改代码的同时修改相应注释 以保证注释与代码的一致性 不再有用的注释要删除 4 要避免在注释中使用缩写 特别是非常用缩写 5 程序在必要的地方必须有注释 注释要准确 易懂 简洁 注释要有意义 如果有需要 还要详细描述相关含义 6 注释格式尽量统一 对多行注释建议使用 对单行的注释建议使用 7 对有含义的变量 常量 如果其命名不是充分自注释的 在声明时都必须加以注释 说明其含义 2020 1 14 六 命名规则1 变量的名称要采用有意义的英文单词或缩写 如key buffer2 局部无特殊含义变量i j k等3 临时变量tem tmp等开头 长度 计数采用len num count等4 在定义部分要加入注释来说明变量的含义 5 函数名用小写字母命名 每个词的第一个字母大写 并将模块标识加在最前面 2020 1 14 七 函数设计规范 1 函数的基本要求 正确性 程序要实现设计要求的功能 稳定性和安全性 程序运行稳定 可靠 安全 可测试性 程序便于测试和评价 规范 可读性 程序书写风格 命名规则等符合规范 扩展性 代码为下一次升级扩展留有空间和接口 全局效率 软件系统的整体效率高 局部效率 某个模块 子模块 函数的本身效率高 2020 1 14 2 编制函数的基本原则 单个函数的规模尽量限制在200行以内 不包括注释和空行 一个函数只完成一个功能 函数局部变量的数目一般不超过5 10个 函数内部局部变量定义区和功能实现区 包含变量初始化 之间空一行 函数名应准确描述函数的功能 通常使用动宾词组为执行某操作的函数命名 函数的返回值要清楚明了 尤其是出错返回值的意义要准确无误 不要把与函数返回值类型不同的变量 以编译系统默认的转换方式或强制的转换方式作为返回值返回 减少函数本身或函数间的递归调用 2020 1 14 八 模块化编程规范简介模块化编程主要实现方法 宏定义 函数 文件1 宏定义是C语音的一种预处理的方法 可以通过宏定义实现简单的模块预处理2 利用函数形式实现某个基础功能 通过形参 实参 返回值等实现调用3 文件即是一个 c文件和一个 h文件的结合 头文件 h 中是对于该模块接口的声明 这一条概括了模块化的实现方法和实质 将一个功能模块的代码单独编写成一个 c文件 然后把该模块的接口函数放在 h文件中 2020 1 14 1 模块化编程设计步骤1 创建头文件在模块化编程中 往往会有多个C文件 而且每个C文件的作用不尽相同 在我们的C文件中 由于需要对外提供接口 因此还必须有一些函数或者是变量提供给外部其它文件进行调用 对于每一个模块都有相应的 c文件和 h文件 为了阅读调试方便 原则上 c文件和 h文件同名 如delay c和delay h头文件的作用可以称其为一份接口描述文件 2020 1 14 2 代码封装将需要模块化的进行代码封装 如 串口通信模块 将串口初始化 数据接收 数据发送函数进行封装3 编译 调试 测试4 使用源文件 将文件加到工程之中 将 c文件添加到工程之中 同时在需要调用 h文件中的宏或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论