您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第1讲-嵌入式系统(单片机)软件结构与设计原则
嵌入式系统(单片机)软件结构与设计原则郭盖华武汉若比特机器人有限公司gghyoo@robotell.com目录嵌入式系统软件结构分类软件设计原则经验交流嵌入式系统软件结构分类软件结构从简入繁,可以分成如下几种循环结构带中断的循环结构带优先级的函数指针队列调度实时操作系统(RTOS)循环结构循环结构是单片机设计中比较常见的一种简单方式,就是类似于如下结构:while(1){Function_A();Function_B();Function_C();}带中断的循环结构普通的循环结构无法满足某些实时性的要求,为了提高系统实时性,提高CPU利用率,引入中断过程Function_AFunction_BFunction_CFunction_D在中断中完成一些不费时的并且实时性要求较高的功能ISR中断1中断2中断3带优先级的函数指针队列调度所谓的函数指针队列调度,就是构造一个调度任务队列,在main里面根据队列内任务的优先级去调用优先级最高的任务。同时提供添加任务,删除任务等功能。for(;;){if(taskitem-task)taskitem-task();taskitem=taskitem-nexttask()}三种结构的总结函数指针队列实际上就是将循环函数调度过程算法化,虽然实时性有所提高,但本质上和循环结构没有什么区别,都是要求一个任务完成之后才去执行另一个任务,并且要求每个任务在任何时刻都不能挂起自己等待事件,否则其他的任务就无法运行了。实时操作系统(RTOSRealTimeOS)RTOS所谓实时操作系统,是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应不用等当前的任务执行完成,打断当前任务,执行更重要的任务。RTOSRTOS是由若干个不同优先级的任务组成的RTOS任务运行原则总是让优先级最高的的任务运行,除非该任务要等待某个事件保证了系统的实时性UCOS、RTX等RTOS难点考虑资源竞争优先级设计驱动程序设计(可重入行)软件设计原则结构性高效性实时性可移植性结构性在较为复杂的系统中,软件结构设计至关重要。良好的结构,会让软件工程师将更多的精力放在最重要的场合上,而不用花费大量的时间在数据交互和流程上。良好的结构,可以提供更加强的扩展性数据结构和算法分离可以提供很好的可移植性和可扩展性。例子UI系统有5个界面有3个按钮做切换需要定时刷新界面上的显示内容。50个界面时怎么办?多个语言要求时怎么办?UI系统高效性单片机不比PC,性能较低,大多数系统,不存在浮点运算单元,不存在除法指令。避免使用浮点参与运算,使用浮点运算不仅耗时间,同时也要耗费空间。使用Q值法来进行浮点运算。(TIIQMathLibrary)高效性使用移位来替代除法不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率。大部分场合可以使用C语言,极少数,极恶劣的环境下,使用少量汇编。实时性实时性要求是大多数嵌入式系统的基本要求。在实时性要求较高的场合,尽量不要让某个模块或函数占用较长的CPU时间。在不用操作系统的情况下,可以考虑使用状态机来完成类似实时性的要求。使用RTOS可移植性CPU发展速度很快,每年都有更高性能,更低价格的单片机或者ARM等芯片出来。设计代码时,需要充分考虑程序的可移植性。多层次软件设计,分离硬件相关部分和算法结构部分。经验交流保持良好的编码风格和目录结构(BSLAPPArithmetic)不要怕麻烦,而将变量名设计的很短不要使用晦涩的语法多些注释不要拿两个浮点数做“==”运算,尽量使用“=”或者“=”经验交流RTOS编程中,DRIVER设计要小心多看看别人的源码函数的功能要单一,不要设计多用途的函数尽量避免函数带有“记忆”功能,其行为可能是不可预测的相同的输入应当产生相同的输出。经验交流要“疑神疑鬼”,多看看变量是否是“好的”不要使用动态内存分配遇到问题,多单步多做错误处理Thanks!Questions
本文标题:第1讲-嵌入式系统(单片机)软件结构与设计原则
链接地址:https://www.777doc.com/doc-3824948 .html