




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机软件系统设计教程,基础要求,熟练运用C语言编程。熟练掌握和运用一款单片机。包括硬件结构、寄存器、外设、了解基本汇编指令等。熟悉一款集成开发环境及编译器。独立编写并调通2000行以上的小型程序。,一、如何编写高质量软件,合理划分函数功能,合并常用函数严格的函数、变量命名方法合理划分软件层次。如硬件隔离层、驱动程序层、功能函数层、应用层。合理运用宏定义,提高程序可移植性经常查看反汇编代码,练习优化指令。,函数划分,常用的功能集合,可以合理合并成一个函数利用参数传递,将多个函数合并。例如:某菜单需要将选中的菜单条反色显示,因此需要2个中文显示函数:DisplayString(char*ptr,charx,chary);DisplayStringInvert(char*ptr,charx,chary);可以合并成一个函数DisplayString(char*ptr,charx,chary,boolInvertFlag);注意函数过分合并会造成运算性能下降。,函数与变量命名,严格按照模块名_功能名的方法命名,按正确的英文(甚至拼音也可)命名单词首字母大写例如:ADC_CailbrateZero()CPU_SleepDelay(intTime_ms)Flash_WriteWord(intAddr,intWord),软件层次划分,合理划分软件层次,将使程序结构清晰层次良好的软件,移植性强对软件开发者来说,便于管理和维护,甚至可实现“代码免维护”大大提高开发速度。例:在某液晶上需要做中文菜单、数字显示、波形显示、滚动条等。为该应用编写液晶驱动函数。,LCD驱动层划分范例,每一层含义明确,功能完整独立每一层只调用其下一层的函数,禁止跨层调用函数。所有变量对于非其它层函数不透明。禁止跨层使用全局变量层次划分越多,执行效率越低更改或更换任何一层的函数,不影响其它层函数的执行。,合理运用宏定义,1.用宏定义作硬件隔离#defineLED1_POUTP1OUT#defineLED1_PDIRP1DIR#defineLED1_BIT(BIT2)/*更换IO只需改以上3行*/#defineLED_ONLED1_POUT|=LED1_BIT/*亮*/#defineLED_OFFLED1_POUTUBR10=0 x00;.#defineTIMER_PERIOD12000.TH1=(unsignedint)(65536-TIMER_PERIOD)/256;/*51单片机*/TL1=(unsignedint)(65536-TIMER_PERIOD)%256;.,用宏定义作编译开关,#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.,用宏定义作功能开关,#defineON1#defineOFF0#defineHI_LO2#defineLEV_21#defineNONE0#defineMINORCUTOFF/*是否打开小值切除功能*/#defineRS485ON/*是否打开RS-485通讯功能*/#defineDACON/*是否打开变送功能*/#defineDEFAULTOFF/*是否打开参数备份功能*/#defineALARM_MODENONE/*报警模式NONE=无报警LEV_2=双限HI_LO=高低限*/#defineOFFSETON/*是否打开偏移补偿功能*/#defineKEYTONEON/*按键音*/,程序优化,打开编译器自带的优化选项。注意高级别优化会删除部分“冗余”代码,或改动程序结构,应注意挥发性变量(volatile)查看反汇编代码,看汇编代码是否有冗余操作,合理修改。,二、软件结构,如何让CPU尽可能多地执行多项任务如何让CPU尽可能快地响应各个事件如何让程序尽可能少地占用RAM如何让程序具有尽可能强的可扩展性如何让编出的程序尽可能通用如何减少编程工作量?如何减少错误概率和调试工作量?好的程序结构,可以解决上述问题,实时性,实时性最高的任务,需要零延迟立即响应。应考虑硬件实现。如用CPLD/FPGA、捕获等实现。实时性较高任务,允许微秒级延迟的事件,可用中断实现。但背景程序中不允许长时间关闭中断。且中断处理时间不宜过长。实时性较低事件,可以查询。,事件查询,1.事件出现时间较长,允许响应延迟也较长。如某个按键,可以在主循环内直接查询2.事件出现时间较短,小于主循环时间,但允许响应延迟,可以中断置标志位,主程序处理,完毕后清除标志。比如串口数据桢判别。3.情况2中,若事件无法产生中断,可以定时中断查询,置标志位。主程序处理,顺序多任务程序,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),并发多任务程序,voidmain()while(1)LPM0;串口中断键盘中断定时中断,低功耗程序首选结构每个事件不宜执行时间过长注意中断随机嵌套,注意保护临界代码全部信息通过全局变量传递和保存,前后台程序,Voidmain()while(1)等待1秒延迟读取电压计算温度显示温度报警处理,最常见的程序结构背景程序与前台程序之间通过全局变量传递注意中断用到全局变量的保护注意临界代码的保护主程序不能长时间关闭中断中断程序尽量简短,尽快返回。注意避免函数递归调用,RTOS,嵌入一个微型实时操作系统(RTOS),可以轻松实现多任务(进程)并发执行。商品化或免费的的RTOS,如uC-OSII,RTX-TINY,国产Small-RTOS等。允许每个任务都是死循环,由RTOS负责调度CPU程序指针分时执行每个任务。CPU、RAM开销较大,8位CPU或简单程序不建议使用。,避免函数重入,重入(reentrant):指函数直接或间接调用函数自身。和PC不同,PC采用堆栈传递允许函数重入。单片机采用静态变量传递,不允许函数重入。造成重入的原因:1.递归调用。例如A函数调用B函数,B函数调用C函数,C函数调用A函数。,避免函数重入,2.中断重入假设主程序循环会调用A函数,中断也使用了A函数,那么有可能在主循环A函数执行一半的时候,中断,又执行A函数,造成A函数原来的变量被更改。3.硬件重入假设主程序操作液晶显示,中断也操作液晶显示,有可能在液晶时序一半的时候,中断,时序重新开始,造成液晶收到错误指令,发生不可恢复的错误。,临界代码保护,临界代码(CriticalCode):指运行过程中不允许被中断打断的代码。几种产生临界代码的原因:1.执行时间严格,不允许被延长。如软件模拟串口,软件循环产生精确延迟,软件模拟时间严格的异步时序(如1Wire总线),不允许被打断。,临界代码保护,2.中断时间很长,某函数不允许长时间暂停。比如液晶。3.因为避免函数重入产生的临界代码。再写一个一样的函数,专供中断用。用reentrant关键字定义函数(堆栈传递参数)进入临界代码前关中断,后开中断。,临界代码保护,2.中断变量传递造成的临界代码:例如,主程序要得到存有周期计数值的长整形变量PeriodCnt。该值在中断内被更新。中断:PeriodCnt=TAOF_Cnt*65536+TAR;MainFreq=1.0/PeriodCnt;/错误!_DINT();TempL=PeriodCnt;_EINT();Freq=1.0/TempL;/正确!,对象化编程,单片机系统的任何一个独立单元/部件/外设/功能集合,都可以抽象成一个对象(Object)。对象都有其属性、方法、事件。以IO为例。属性:方向、电平。方法:置1,置0,取反,读取输入值,读取方向事件:跳变,中断,对象化编程,IO1_DIRIO1_IN作为其属性,可以被设置。方法IO1_Set(Bool),IO1_Neg();事件IO1_Interrupt();,基于状态机编程,例:当某对象处于A状态时,假设发生了B事件,就执行C代码,并且跳转到D状态。例:电子表。键A键B1.当显示时间时(状态1),按下键A,就显示日期。2.当显示日期时,按下A键,就显示秒3.当显示秒时,按下A键,回到显示时间。,例:电子表,4.当显示时间时,按下B键,时闪烁,提示设置“时”5.当提示提示设置“时”,按B键,分闪烁6.当分闪烁时按B键,月闪烁7.当月闪
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年西安航天基地公办学校高层次人才招聘(2人)考前自测高频考点模拟试题及答案详解参考
- 2025呼伦贝尔五九煤炭集团招聘26人模拟试卷及答案详解(网校专用)
- 2025年甘肃省民航航空发展有限公司职业经理人选聘模拟试卷及完整答案详解
- 2025年烟台市教育局所属事业单位卫生类岗位公开招聘工作人员模拟试卷及答案详解一套
- 2025安徽安庆望江县融媒体中心急需紧缺专业技术人员招聘2人考前自测高频考点模拟试题及1套完整答案详解
- 2025湖北咸宁市嘉鱼县鱼岳镇招聘社区工作者38人考前自测高频考点模拟试题有答案详解
- 广玉兰夹竹桃课件
- 2025年光致抗蚀剂项目合作计划书
- 2025金华浦江县国控集团选聘1名市场化人员模拟试卷附答案详解(典型题)
- 2025湖北省招募选派三支一扶高校毕业生1998人考前自测高频考点模拟试题附答案详解(典型题)
- 研学活动合同协议书模板
- 医疗器械售后服务团队的职责说明
- 食品配料人员培训
- 工程勘察设计收费标准(2002年修订本)
- 规范团费账户管理制度
- 消防救援队伍灭火救援作战训练安全专题授课
- 公安审讯技巧培训
- 人教版2025初中物理实验室安全使用指南
- 销售团队组建方案-
- 考古调查勘探辅助工程方案投标文件(技术方案)
- 物业服务提升方案模板
评论
0/150
提交评论