课程设计(大作业)报告课程名称:嵌入式操作系统设计题目:MQX基本要素综合项目院系:设计者昆明学院信息技术学院课程设计(大作业)报告摘要MQX已经走过了20多年的发展历程,基于MQX的产品已达数百万。飞思卡尔于2009年收购MQX,并推出第一个版本MQX-RTOS3.0.1后,对其功能进行了不断加强,MQX是一款免费、开源、有技术支持,面向工业控制、医疗电子、家用电器等领域的嵌入式实时操作系统。MQX具有学习难度低,开发工具强,外设驱动丰富,内核精简、架构清晰、实时性强、应用范围广等特点。与Linux相比,Linux的MMU、OpenGL功能强大,占用资源多,而MQX内核精简、效率高、实时性强,更适合工业控制、医疗电子、家用电器等领域。因此,选用MQX作为RTOS的学习蓝本,不仅入门难度小,且实际应用的可行性大。关键词:MQX、内核精简、实时性强、效率高。昆明学院信息技术学院课程设计(大作业)报告目录一、题目分析.............................................1二、MQX的介绍及说明......................................1三、各任务的主要功能介绍.................................2四、系统框图.............................................3五、程序代码及分析.......................................4六、运行结果.............................................6七、总结.................................................5七、参考文献.............................................7昆明学院信息技术学院课程设计(大作业)报告1课程设计(大作业)报告一、题目分析MQX基本要素综合项目,主要介绍一个包含MQX基本要素综合项目的设计过程,主要分为几个部分,介绍对模块引脚做统一说明,介绍中断服务例程ISR的功能设计与任务的功能设计,介绍PC与MCU通信帧协议,包含帧格式和帧命令,给出MCU方主要任务的代码实现,PC程序的界面。需求分析:将设计一个实例来验证SD-FSL-K60-C评估板各个模块的硬件功能,需要包含任务、中断、驱动、轻量级事件、轻量级信号量、轻量级消息队列、轻量级日志等基本要素。为区分不同的功能单元并确保数据的完整性,需要以组帧的方式完成数据的双向传输。具体实现可通过串口发送相应的帧数据来控制具体的模块。基于以上需求,可运用以上基本要素来实现对LED、UART、ADC、RTC、Flash等几个模块的测试,其中LED模块控制板上的4盏小灯,UART模块实现串口的发送接收,ADC模块实现AD采样,RTC模块实现实时对时,Flash模块实现Flash的读取。二、MQX的介绍及说明1、介绍:本部分对程序中所使用的LED,ADC,RTC,Flash,UART几个模块的引脚做统一说明。2、MQX的特点:(1)实时性高。MQX提供高效的任务调度、内存管理等功能。MQX采用基于优先级的、抢占式调度策略。带有最优化上下文切换和中断处理,用于实现快速、高效的预测响应时间,具有高实时性。(2)内核精简。MQX采用微内核结构,代码最小为16KB,RAM最小开销为2KB,对硬件系统开销较小;可以根据需要添加可定制组件,具有直接应用编程接口API、高度模块化架构,能够很好地满足各种不同应用需求。(3)内核免费且有技术支持。MQX内核完全免费,开放源码,成本低,软件资源丰富。昆明学院信息技术学院课程设计(大作业)报告2(4)开发工具成熟、外设驱动丰富。(5)性价比高。3、硬件说明:LED:LED1的外接引脚为PTB6,LED2的外接引脚为PTB7,LED3的外接引脚为PTB8,LED4的外接引脚为PTB9。ADC:因外接引脚较多,ADC0模块的14通道为PTC0,ADC1模块的17通道为PTA17,K60芯片温度传感器内接ADC0模块的26通道。RTC:要使RTC模块能够正确运行,首先要把K60_C型板反面上的32.768kHz晶振旁边的R8电阻去掉。Flash:在默认情况下,程序中有关Flash读写操作的Flash区域是在Flash的块0的最后若干字节,使用的长度取决于Flash模块的帧数据内容。Flash分为块0和块1,均为256KB,块0的范围是0x00000000-0x0003FFFF。UART:发送引脚为PTE24,接收引脚为PTE25。三、各任务的主要功能介绍1、主任务(task_main):完成全局变量初始化(如轻量级信号量)、外设初始化、创建其他任务、安装用户ISR。2、LED任务(task_run_LED)主要功能是用以控制K60-C板上的4盏LED灯。首先解析发给LED模块的帧命令,控制K60-C板上的4盏LED灯的某一盏。本任务中运用了轻量级日志,先将这6个32位的数据逐一写入一则日志条目中,再从该日志中将数据读取出来放入一个局部变量的数组中,最后将数据放入轻量级发送消息队列中。3、解帧任务(task_decode):将由串口4接收到的完整帧数据分别复制到LED模块、ADC模块、RTC模块和Flash模块各自的缓冲区,并设置各个模块任务的事件位。4、UART任务(task_run_UART):为了防止帧数据包含帧尾类型的数据,要对帧数据增加转义字符。本任务从轻量级发送消息队列中取出数据,然后调用转义函数对其增加转义字符。把各个任务的存放数据的全局数组元素定义为32位,是因为MQX提供的轻量级消息队列操作的数据单位为32位。昆明学院信息技术学院课程设计(大作业)报告35、ADC任务(task_run_ADC):主要功能是通道初始化和AD数据采集。根据帧数据中与ADC模块相关的命令字段来区分是通道初始化操作还是AD数据采集操作。通道初始化操作的模块号与通道号来自PC界面的选项,在默认情况下,采样位数定为16位,采样次数为10次。AD数据采集操作将从最新初始化过的AD通道中采样数据,并在该操作的最后,将采样数据放入轻量级发送消息队列中。6、RTC任务(task_run_RTC):主要功能是时间对表和回发当前RTC时间。这两种操作实际上操纵的都是相对于公共参考时间的相对秒数,只是PC把相对秒数转换过后显示绝对时间,时间对表也不回发数据,对表正确性与否可通过回发当前RTC时间操作在PC的显示的时间信息来判断。在该任务最后,将实时时钟的相关帧数据放入轻量级发送消息队列中。7、Flash任务(task_run_FLASH):主要功能是向Flash读取数据,在该例子中Flash功能较为简单,不提供Flash随机读写。读写操作的Flash区域是在Flash的块0的最后若干字节,长度取决于Flash模块的帧数据内容。四、系统框图系统框图1昆明学院信息技术学院课程设计(大作业)报告42.帧格式:帧头帧长模块编码有效数据帧尾命令编码命令参数1B1B1B1BNB1B各字段的含义现介绍如下:帧头:0xAA。帧长:包括帧头、帧长、模块编号、有效数据、帧尾五个部分在内的所有字节总数。模块编号:0x01、0x02、0x03、0x04分别对应LED、ADC、RTC、Flash。有效数据:每一个模块以不同的操作来区分不同的命令,长度根据模块的使用情况而定。帧尾:0x55。MCU仅在把数据回发给PC时增加了转义字符,以提高PC解析MCU数据帧的速度,程序中转义字符约定为0xA5。帧数据中除帧头、帧尾之外,如果遇到0xAA、0xA5、0x55,就在这几个数据之前增加一个0x55,以区别帧头、转义、之外。而PC在将帧数据发给MCU时并不增加转义字符。五、程序代码及分析改进后的代码:switch(gLED_Buff[4]){case0x01:light_control(Light_D1,LIGHT_OFF);//设定为高电平light_control(Light_D2,LIGHT_ON);light_control(Light_D3,LIGHT_ON);light_control(Light_D4,LIGHT_ON);昆明学院信息技术学院课程设计(大作业)报告5break;case0x02:light_control(Light_D1,LIGHT_ON);light_control(Light_D2,LIGHT_OFF);//设定为高电平light_control(Light_D3,LIGHT_ON);light_control(Light_D4,LIGHT_ON);break;case0x03:light_control(Light_D1,LIGHT_ON);light_control(Light_D2,LIGHT_ON);light_control(Light_D3,LIGHT_OFF);light_control(Light_D4,LIGHT_ON);//light_control(Light_D3,LIGHT_OFF);break;case0x04:light_control(Light_D1,LIGHT_ON);//设定为高电平light_control(Light_D2,LIGHT_ON);light_control(Light_D3,LIGHT_ON);//设定为高电平light_control(Light_D4,LIGHT_OFF);//light_control(Light_D4,LIGHT_OFF);break;default:break;思想分析:LED灯开始是全亮的,首先Light_D1关闭,则其余三个小灯都打开,因为是取反,所以当关闭的时候灯是亮的,其他的小灯也一样。1、串口4的ISR:设计串口4的ISR的目的是为了接收PC发来的数据帧,并将完整的数据帧传递给解帧任务。昆明学院信息技术学院课程设计(大作业)报告62、设计主任务的目的是完成解帧任务、LED任务、ADC任务、RTC任务、Flash任务、UART任务正常运行之前的准备工作。3、解析帧数据是发送给哪一个模块工作,如果放在串口4的ISR中完成,会大大降低串口4的组帧函数的重用性,为把该工作独立出来,增加一个解帧任务来完成。4、设计LED任务的目的是接收PC的命令,控制K60-C板上的4盏LED灯的亮暗。5、设计ADC任务的目的是为了控制ADC通道进行AD数据采集。6、设计RTC任务的目的是为了控制RTC模块计时。7、设计Flash任务的目的是为了控制Flash模块完成数据的写操作与读操作。8、设计UART任务的目的是为了测试UART4模块,同时完成将数据帧传递到轻量级消息队列的工作。六、运行结果七、总结通过此次嵌入式操作系统课程设计,在课程设计期间,编写程序代码并进行修改。编写完成程序代码运行中出现了好多个错误和警告,与同学讨论之后改正了几个错误但是还存在错误没有修改完,后面又问了其他同学加上自己查阅资昆明学院信息技术学院课程设计(大作业)报告7料,找出了错误的出处。在这次课程设计中让我更加的掌握了这门课程中平时所没有掌握的知识,并且能够把嵌入式操作系统很好的运用,也提高了我的知识领域。结束了两周的课程设计,也让我从课程设计中学到了一些在平时学习中所没有掌握住的知识点,而且在课程设计期间也去图书馆查阅了大量的资料,去了解更多关于MQX的知识。课程设计也教会我们做事情一定要坚持,就比如在课程设计的时候,我刚开始的程序代码是运行不出来的,经过几天的修改总算可以运行了,和同学讨论也是避免不了的。八、参考文献[1]谭浩强.C程序设计教程[M].清华大学出版社,2007.[2]王宜怀,朱仕浪,姚望舒.嵌入式实时操作系统MQX应用开发技术[M].电子工业出版社,2014.