单片机实用编程技巧值得学习PPT课件.ppt_第1页
单片机实用编程技巧值得学习PPT课件.ppt_第2页
单片机实用编程技巧值得学习PPT课件.ppt_第3页
单片机实用编程技巧值得学习PPT课件.ppt_第4页
单片机实用编程技巧值得学习PPT课件.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

单片机软件系统设计教程 1 基础要求 熟练运用C语言编程 熟练掌握和运用一款单片机 包括硬件结构 寄存器 外设 了解基本汇编指令等 熟悉一款集成开发环境及编译器 独立编写并调通2000行以上的小型程序 2 一 如何编写高质量软件 合理划分函数功能 合并常用函数严格的函数 变量命名方法合理划分软件层次 如硬件隔离层 驱动程序层 功能函数层 应用层 合理运用宏定义 提高程序可移植性经常查看反汇编代码 练习优化指令 3 函数划分 常用的功能集合 可以合理合并成一个函数利用参数传递 将多个函数合并 例如 某菜单需要将选中的菜单条反色显示 因此需要2个中文显示函数 DisplayString char ptr charx chary DisplayStringInvert char ptr charx chary 可以合并成一个函数DisplayString char ptr charx chary boolInvertFlag 注意函数过分合并会造成运算性能下降 4 函数与变量命名 严格按照模块名 功能名的方法命名 按正确的英文 甚至拼音也可 命名单词首字母大写例如 ADC CailbrateZero CPU SleepDelay intTime ms Flash WriteWord intAddr intWord 5 软件层次划分 合理划分软件层次 将使程序结构清晰层次良好的软件 移植性强对软件开发者来说 便于管理和维护 甚至可实现 代码免维护 大大提高开发速度 例 在某液晶上需要做中文菜单 数字显示 波形显示 滚动条等 为该应用编写液晶驱动函数 6 LCD驱动层划分范例 每一层含义明确 功能完整独立每一层只调用其下一层的函数 禁止跨层调用函数 所有变量对于非其它层函数不透明 禁止跨层使用全局变量层次划分越多 执行效率越低更改或更换任何一层的函数 不影响其它层函数的执行 7 合理运用宏定义 1 用宏定义作硬件隔离 defineLED1 POUTP1OUT defineLED1 PDIRP1DIR defineLED1 BIT BIT2 更换IO只需改以上3行 defineLED ONLED1 POUT LED1 BIT 亮 defineLED OFFLED1 POUT LED1 BIT 灭 更换单片机只需修改以上2行 8 用宏定义自动运算 defineOSC 1000 defineBAUD 9600 UBR00 long OSC 1000 8 BAUD UBR10 0 x00 defineTIMER PERIOD12000 TH1 unsignedint 65536 TIMER PERIOD 256 51单片机 TL1 unsignedint 65536 TIMER PERIOD 256 9 用宏定义作编译开关 defineAVE0 defineRMS1 definePEK2 defineUMODEAVE AVE 平均值RMS真有效值PEK峰值 if UMODE RMS VAC Ch1 longint TempIntV1 TempIntV1 VAC Ch2 longint TempIntV2 TempIntV2 endif if UMODE AVE VAC Ch1 absv TempIntV1 VAC Ch2 absv TempIntV2 endif 10 用宏定义作功能开关 defineON1 defineOFF0 defineHI LO2 defineLEV 21 defineNONE0 defineMINORCUTOFF 是否打开小值切除功能 defineRS485ON 是否打开RS 485通讯功能 defineDACON 是否打开变送功能 defineDEFAULTOFF 是否打开参数备份功能 defineALARM MODENONE 报警模式NONE 无报警LEV 2 双限HI LO 高低限 defineOFFSETON 是否打开偏移补偿功能 defineKEYTONEON 按键音 11 程序优化 打开编译器自带的优化选项 注意高级别优化会删除部分 冗余 代码 或改动程序结构 应注意挥发性变量 volatile 查看反汇编代码 看汇编代码是否有冗余操作 合理修改 12 二 软件结构 如何让CPU尽可能多地执行多项任务如何让CPU尽可能快地响应各个事件如何让程序尽可能少地占用RAM如何让程序具有尽可能强的可扩展性如何让编出的程序尽可能通用如何减少编程工作量 如何减少错误概率和调试工作量 好的程序结构 可以解决上述问题 13 实时性 实时性最高的任务 需要零延迟立即响应 应考虑硬件实现 如用CPLD FPGA 捕获等实现 实时性较高任务 允许微秒级延迟的事件 可用中断实现 但背景程序中不允许长时间关闭中断 且中断处理时间不宜过长 实时性较低事件 可以查询 14 事件查询 1 事件出现时间较长 允许响应延迟也较长 如某个按键 可以在主循环内直接查询2 事件出现时间较短 小于主循环时间 但允许响应延迟 可以中断置标志位 主程序处理 完毕后清除标志 比如串口数据桢判别 3 情况2中 若事件无法产生中断 可以定时中断查询 置标志位 主程序处理 15 顺序多任务程序 voidmain void intcounter 0 while 1 repeatforever SleepDelay ms 10 check serial io checkforserialinput process serial cmds processserialinput check kbd io checkforkeyboardinput process kbd cmds processkeyboardinput adjust ctrlr parms adjustthecontroller counter incrementcounter if counter 100 0 16 2020 1 27 17 并发多任务程序 voidmain while 1 LPM0 串口中断 键盘中断 定时中断 低功耗程序首选结构每个事件不宜执行时间过长注意中断随机嵌套 注意保护临界代码全部信息通过全局变量传递和保存 18 前后台程序 Voidmain while 1 等待1秒延迟读取电压计算温度显示温度报警处理 最常见的程序结构背景程序与前台程序之间通过全局变量传递注意中断用到全局变量的保护注意临界代码的保护主程序不能长时间关闭中断中断程序尽量简短 尽快返回 注意避免函数递归调用 19 RTOS 嵌入一个微型实时操作系统 RTOS 可以轻松实现多任务 进程 并发执行 商品化或免费的的RTOS 如uC OSII RTX TINY 国产Small RTOS等 允许每个任务都是死循环 由RTOS负责调度CPU程序指针分时执行每个任务 CPU RAM开销较大 8位CPU或简单程序不建议使用 20 避免函数重入 重入 reentrant 指函数直接或间接调用函数自身 和PC不同 PC采用堆栈传递允许函数重入 单片机采用静态变量传递 不允许函数重入 造成重入的原因 1 递归调用 例如A函数调用B函数 B函数调用C函数 C函数调用A函数 21 避免函数重入 2 中断重入假设主程序循环会调用A函数 中断也使用了A函数 那么有可能在主循环A函数执行一半的时候 中断 又执行A函数 造成A函数原来的变量被更改 3 硬件重入假设主程序操作液晶显示 中断也操作液晶显示 有可能在液晶时序一半的时候 中断 时序重新开始 造成液晶收到错误指令 发生不可恢复的错误 22 临界代码保护 临界代码 CriticalCode 指运行过程中不允许被中断打断的代码 几种产生临界代码的原因 1 执行时间严格 不允许被延长 如软件模拟串口 软件循环产生精确延迟 软件模拟时间严格的异步时序 如1Wire总线 不允许被打断 23 临界代码保护 2 中断时间很长 某函数不允许长时间暂停 比如液晶 3 因为避免函数重入产生的临界代码 再写一个一样的函数 专供中断用 用reentrant关键字定义函数 堆栈传递参数 进入临界代码前关中断 后开中断 24 临界代码保护 2 中断变量传递造成的临界代码 例如 主程序要得到存有周期计数值的长整形变量PeriodCnt 该值在中断内被更新 中断 PeriodCnt TAOF Cnt 65536 TAR Main Freq 1 0 PeriodCnt 错误 DINT TempL PeriodCnt EINT Freq 1 0 TempL 正确 25 对象化编程 单片机系统的任何一个独立单元 部件 外设 功能集合 都可以抽象成一个对象 Object 对象都有其属性 方法 事件 以IO为例 属性 方向 电平 方法 置1 置0 取反 读取输入值 读取方向 事件 跳变 中断 26 对象化编程 IO1 DIRIO1 IN作为其属性 可以被设置 方法IO1 Set Bool IO1 Neg 事件IO1 Interrupt 27 基于状态机编程 例 当某对象处于A状态时 假设发生了B事件 就执行C代码 并且跳转到D状态 例 电子表 键A键B1 当显示时间时 状态1 按下键A 就显示日期 2 当显示日期时 按下A键 就显示秒3 当显示秒时 按下A键 回到显示时间 28 例 电子表 4 当显示时间时 按下B键 时闪烁 提示设置 时 5 当提示提示设置 时 按B键 分闪烁6 当分闪烁时

温馨提示

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

评论

0/150

提交评论