基于μcosii操作系统的小车运动控制 学位论文.docx
《基于μcosii操作系统的小车运动控制 学位论文.docx》由会员分享,可在线阅读,更多相关《基于μcosii操作系统的小车运动控制 学位论文.docx(51页珍藏版)》请在冰豆网上搜索。
基于μcosii操作系统的小车运动控制学位论文
分类号密级
UDC编号
本科毕业论文(设计)
题目基于μC/OS-II操作系统的小车运动控制
院(系)
专业
年级
学生姓名
学号
指导教师
二○一三年六月
湖北文理学院
学位论文原创性声明
本人郑重声明:
所呈交的学位论文是本人在导师指导下独立进行研究工作所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
本人完全意识到本声明的法律后果由本人承担。
学位论文作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权省级优秀学士学位论文评选机构将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
本学位论文属于
1、保密□,在_____年解密后适用本授权书。
2、不保密□。
(请在以上相应方框内打“√”)
学位论文作者签名:
日期:
年月日
导师签名:
日期:
年月日
摘要
近些年,数字技术得到高速发展,嵌入式技术已经出现在我们生活中的每个地方。
嵌入式操作系统又作为嵌入产品的基本,在发展过程中担任了越来越重要的角色。
本文主要探讨了嵌入式操作系统中应用较为应用多的、开源的μC/OS-II系统在STM32芯片上的移植,并且在此系统上实现小车躲避障碍的运动控制。
本文先行介绍了μC/OS-II实时系统的内核结构,包括第一部分μC/OS-II的中的任务、事件等基本概念以及操作系统对任务和事件的一些操作。
然后介绍了本次移植使用的STM32F103系列微处理器并介绍了该微处理器内核Cortex-M3的结构及其编程模型和部分本次试验所用的STM32F013系列微处理器的外设。
然后以此为基础分析了μC/OS-II在STM32F103系列芯片上的移植,并讲解了μC/OS-II操作系统因移植需要改写的代码的结构和如何编写。
然后,应用STM32F103微处理器芯片上的部分外设,实现串口通信、红外检测模块、LCD显示,电机控制,这些任务在系统的调度下自动切换、不断地运行。
这些代码都在基于ARMCortex-M3的stm32单片机开发板上完成了测试工作。
测试所得到的现象就是红外发射器不停发射信号,接收器同时接收返回信号、通过反馈的红外信号控制车轮转动、LCD则实时显示小车运动状态。
这些也就反应了μC/OS-II的多任务特性。
关键词:
μC/OS-II移植;STM32;运动控制;红外探测;LCD显示;
Abstract
Nowadayswiththerapiddevelopmentofdigitaltechnology,embeddedproductshaveappearedineveryaspectofourlives.Embeddedoperatingsystem,whichisthebasisofembeddedproducts,playsanincreasinglyirreplaceablerole.Inthispaper,anembeddedoperatingsystem,μC/OS-II,whichisopensourceandwidelyusedwillbeintroduced,andthenthepresentationoftheportofμC/OS-IItochipSTM32F103willbeshown,andrealizethecarmotioncontrolonthissystem.
Thispaperatfirstanalyzesthestructureofthekernelofthereal-timesystem,μC/OS-IIandthenintroducessomebasicconceptofμC/OS-IIsuchastask,eventetc.,andtheoperationofthem.Afterthis,themicroprocessorSTM32F103serials,anditsperipherals,whichareusedintheportexperiment,willbedescribed,andthestructureandprogrammer‘smodelofitsCortex–M3kernelwillbeintroducedbrieflytoo.Thenonthisbasis,introducetheportofμC/OS-IIinSTM32F103serialchips;thepartofCPU-relatedcodewhichneedstobemodifiedwillbedescribedatlength.Finally,LCDdisplay,infrareddetection,andMotioncontrolwillberealized.ThesetasksarescheduledbytheOSautomaticallyandrunningallthetime.what’smore,thecodehaspassedtestonOPEN-STM32board.Thephenomenonofthistestis:
Theinfrareddetectionmodulesendandreceivesignal,basedonthissignaltheelectricalmachinemodulecontrolthecaravoidthebarrierandmeanwhile,theLCDdisplaymoduleshowthemovestateonLCD.Allofthesereflectsthefeatureofmulti-taskaboutμC/OS-II.
Keywords:
μC/OS–IIport;STM32;LCDdisplay;infrareddetection;Motioncontrol
目录
摘要I
Abstract..II
1.绪论1
1.1.引言1
1.2.课题背景,研究目的和意义1
1.2.1.课题背景1
1.2.2.研究目的和意义2
1.3.μC/OS-II的移植概述2
1.3.1.μC/OS-II的内核结构2
1.3.2.STM32系列微处理器简单介绍4
1.3.国内外在该方向的研究现状及分析4
1.5.本文主要研究的内容5
1.6.本论文结构5
1.7.本章小结6
2.RTOS概念和μC/OS-II内核结构简要分析7
2.1.RTOS7
2.1.1.实时系统的基本要求7
2.2.实时操作系统的特点7
2.3.实时系统μC/OS-II的分析8
2.3.1.μC/OS-II的任务结构8
2.3.2.μC/OS-II任务的管理12
2.3.3.μC/OS-II任务的调度13
2.3.4.任务的初始化和启动13
2.3.5.中断和时钟13
2.3.6.任务间的通信14
2.4.Cortex-M3内核简介14
2.5.Cortex-M3内核编程模型14
2.6.STM32F103系列处理器介绍15
2.7.本章小结16
3.在STM32F103系列处理器上的移植17
3.1.移植关键代码分析(OS_CPU.H)(OS_CPU_A.ASM)(OS_CPU.C)17
3.1.1.定义与处理器无关的数据类型17
3.1.2.临界代码段17
3.1.3.栈的增长方向18
3.1.4.任务级任务切换18
3.1.5.中断级任务切换18
3.1.6.OS_CPU_PendSVHandler中断处理函数19
3.1.7.关中断函数(OS_CPU_SR_Save())20
3.1.8.恢复中断函数(OS_CPU_SR_Restore())20
3.1.9.启动最高优先级任务运行(OSStartHighRdy())21
3.1.10.与CPU相关的C函数和钩子函数(OS_CPU_C.C)22
3.1.11.定时器初始化函数OS_CPU_SysTickInit()24
3.1.12.时钟中断服务函数OS_CPU_SysTickHandler()24
3.2.若干细节25
3.2.1.系统的剪裁(OS_CFG.H)25
3.2.2.关于启动代码的修改25
3.3.本章小结26
4.在STM32开发板上实现27
4.1.STM32开发板概述27
4.2.工程简介28
4.3.红外发射模块29
4.3.1硬件电路29
4.3.2.软件代码30
4.4.电机驱动模块31
4.4.2.代码实现32
4.4.3.实现结果32
4.5.LCD显示模块33
4.5.1.硬件电路33
4.5.2.软件代码34
4.5.3.实现结果35
4.6.主函数35
4.7.执行效果37
4.8.本章小结37
结论38
致谢39
[参考文献]40
1.绪论
1.1.引言
电子计算机无疑是人类目前一项伟大的发明。
从1946年宾夕法尼亚大学研制成第一台电子计算机开始,计算机就一直向前发展。
到了现在的21世纪,就是所谓的“后PC”时代,计算机技术已经进入人们生活的每个部分。
应用最广泛的计算机产品就是嵌入式计算机。
据统计,90%的计算机为嵌入式[1,2]计算机。
随着信息迸发的时代的到来,给大家带来更多的方便和享乐。
与此同时,我们会面临更多的挑战,其中就有:
嵌入式系统已经越来越复杂,而且复杂程度依然在不断的加大,甚至到失去控制的局面。
所以对嵌入式系统的研究非常有价值也很有必要。
1.2.课题背景,研究目的和意义
1.2.1.课题背景
嵌入式技术[3-5]是嵌入式系统生产的技术基础。
包含了嵌入式软件中间件、嵌入式操作系统、嵌入式IC设计(含嵌入式微处理器和SOC设计),MEMS技术和智能传感器技术行业等。
嵌入式系统产业是以行业需求决定的,基于功能设计、系统结构设计、工程设计的产业。
嵌入式系统产业分布到社会的各个具体的行业,该行业系统和标准决定了嵌入式系统产品是以合适的嵌入式技术作为关键并结合应用软件、系统集成开发为特征。
区别于传统的通用计算机系统,嵌入式系统指向特定的应用功能,根据人们的需求专门制作,并跟随智能化产品的广泛需求应用带生活中的方方面面。
嵌入式软件变成产品数字化、智能化的关键性技术。
并且嵌入式软件以嵌入式操作系统为支持。
近年来嵌入式实时操作系统[1,6,7](RTOS)飞速发展,各种广泛应用的MCU,8位、16位和32位均可以方便的移植多种嵌入式操作系统。
8位、16位MCU以工业控制为主,32位以面向智能机器和多媒体处理方面,并且Linux正慢慢成为嵌入式操作系统的主流系统[8-13]。
嵌入式实时操作系统有很多优点,比如微型化、实时性等特征,并且还将向高可靠性、智能化、多核、构件组件化的方向发展。
社会对嵌入式的这些优点有很强的需求,使得很多种的操作系统并存于世,互相竞争。
嵌入式技术也因此不断发展,不断创新。
μC/OS-II[2,7,14,15]是个优秀的并且开源的嵌入式操作系统,为了成功满足可移植的特性,很多的关键代码用C语言写,极少部分用汇编语言编写。
对于嵌入式系统,应该会对嵌入式系统内核本身进行一些裁剪,修改操作系统的部分代码,以实现μC/OS-II在不同平台上的移植。
1.2.2.研究目的和意义
由于目前的MCU结构设计的越来越复杂,在上面的系统跟随他变得更加的复杂。
并且也更加强大,随之产生的就是嵌入式的操作系统,这些专用的嵌入式操作系统来管理复杂的硬件。
如此应用程序开发人员可以开发更多的应用程序,同时提高了嵌入式系统的各项性能。
而对于商用嵌入式操作系统,开放源代码的μC/OS-II凭借其优势,在市场中占有一席之地。
并且,这个系统已经通过美国的FAA安全认证,足以证明μC/OS-II的性能是值得依靠的。
并且,μC/OS-II是实时内核[16-18],对嵌入式应用有专用性,可用于各种单片机,能在许多领域发挥自己的作用。
μC/OS-II是一个基于抢占式的实时多任务内核,可剪裁、可固化、稳定、可靠,此外,该系统最关键是开放源代码,便于移植和维护。
Arm处理器运算能力强大、应用也广泛,因此也要使用更好的操作系统才能发挥其作用。
μC/OS-II作为开源系统,完全符合嵌入式应用的要求,开源使得整个系统更加透明,减少了系统中的隐患,并且μC/OS-II系统能够裁剪,移植更加的分便,并且使得系统更加灵活。
使嵌入式系统易开发、易管理、易维护,成本低廉[19-25]。
综上所述,本研究在现实中具有重大并且实际的意义。
1.3.μC/OS-II的移植概述
1.3.1.μC/OS-II的内核结构
对于Uc/os-ii,这个操作系统首先得来看看它的内核结构,如图1-1所示。
先讲解下图中的架构。
在图中上部,是应用程序,这个好理解,应为考虑到应用程序的移植问题,应用程序必须有很好的移植行,主要的代码要与系统的硬件无关,所以在最顶部。
中间左边是系统的内核的代码,这部分代码占了所有代码的一大部分。
这也体现了这个系统的良好的可移植性。
是这个系统的一大优势。
在整个移植的过程中这一部分的代码是不需要更改的就可以直接搬过去。
为移植节省了很多工作。
图1-1μC/OS-II的内核结构
中间右边是两个头文件。
OS_CFG.H跟系统的剪裁有关。
配置此文件,可以对该系统进行剪裁,达到嵌入式系统所需求的样子。
INCLUDES.H是包含了所有的头文件,在移植是只需要把要加的头文件加载这个文件中就可以了。
最后一个部分是更移植紧密相关的文件,这是移植时需要修改的关键的代码的所在,这里面主要是编写和处理器相关的代码,是移植工程中的重头戏。
里面的内容和代码的编写将在后面的章节中重点的介绍。
1.3.2.STM32系列微处理器简单介绍
2007年意法半导体推出了stm32,以cortex-m3为内核的系列处理器[16-18]。
它有优秀电源管理系统,耗电量低。
并且片内还集成了多种外设ad转换,串口等等,片内集成了128kBflash和64kB的SRAM。
根据外设扩展又分为STM32F101、STM32F103两种,其中STM32F101为基本型,STM32F103为扩展类型。
本次试验用的是STM32F103型号的芯片,能够很好胜任搭载系统的任务。
配合上多种外设,能够完美的完成各种任务设计。
所以,我们选择这款芯片作为我们试验的主芯片。
1.3.国内外在该方向的研究现状及分析
21世纪以来,国内外,嵌入式系统得到了很好的发展。
随着对其研究的这件深入,嵌入式系统将向智能化、网络化、集成化、规范化的方向发展。
并与各行各业有这不可分割的联系,嵌入式系统会应用到社会的方方面面,也一定会在我国的发展中占据着不可替代的作用。
现在技术在飞快的前进,我们将会发现嵌入式技术在一步步深入的改变着我们的生活。
嵌入式技术已经深深扎根进了我们的生活,可以说我们已经离不开嵌入式的设备了。
现在消费者这市场购买的电子产品基本上都和嵌入式技术有着紧密的联系。
不仅如此,嵌入式产品军事、工业控制等重要领域起着重要的作用。
嵌入式产品的应用需要一套高效,低成本的方案。
我们的选择也有一些,但是大的架构师类似的,如图1-2所示下。
图1-2一般嵌入式系统结构
在硬件方面,由硬件厂商为我们解决了很多问题。
现在的硬件,微处理器等硬件的性能强,效率越来越高,功耗还很低,这对完善嵌入式功能提供了有效的依靠。
软件方面,许多优秀的操作系统的出现也使之成为可能,所以软件方面也不需要担心。
但是,怎么选择操作系统我们还是需要做一些选择的。
例如VxWorks、WinCE好用是好用但是需要收取一定的费用,我们不能接受。
而且不是开源的软件不好维护;uClinux十分复杂,移植技术要求高,时间久。
综合各种优缺点我们选择了ucos,μC/OS-II开源。
并且代码只有约5500行,而且已经在各个领域有了实际的应用,所以我们选择了这个系统作为我们的研究对象。
1.5.本文主要研究的内容
先介绍了μC/OS-II内核的源代码结构[26-30],后介绍了STM32系列微处理器。
描述了μC/OS-II在STM32F103微处理器上移植的完整移植过程和代码的编写,并且详细分析了移植中的部分关键代码,并且介绍了应用代码的编写及其硬件原理。
最后将通过应用程序分别在stm32cortex-m3开发板上验证移植的正确性。
这些以用程序利用STM32的外设,在stm32cortex-m3开发板上实现了红外线探测模块、电机驱动和LCD显示等多任务;在stm32cortex-m3开发板上实现了基于ucos-ii的小车运动控制。
本文给出了在这个开发板上的完整的代码编写过程。
1.6.本论文结构
本论文结构如下:
第一章:
本论文的绪论部分。
介绍课题的来源、背景、目的和意义。
然后分析了目前国内外在该领域的发展状况。
第二章:
主要分析了μC/OS-II内核的结构。
介绍实时操作系统的概念,简要分析了μC/OS-II的任务及其任务管理、调度,最后简要介绍了μC/OS-II的中断和多任务之间的通信。
第三章:
详细介绍μC/OS-II在STM32F103系列处理器上的移植
第四章:
简单介绍stm32开发板,工程简介,介绍红外发射模块,介绍电机驱动模块,介绍lcd驱动模块,主函数介绍,实现效果。
1.7.本章小结
本章为整个论文的绪论,主要介绍了选题来源、目的意义,并分析了国内外在嵌入式系统μC/OS-II移植方面的现状。
然后指出了本论文主要的研究内容。
最后说明了整个论文的篇章结构。
2.RTOS概念和μC/OS-II内核结构简要分析
2.1.RTOS
RTOS(RealTimeOperateSystem),实时操作系统。
实时含有立即、及时之意。
如果操作系统能使计算机系统及时响应外部事件的请求,并能及时控制所有实时设备与实时任务协调运行,且能在一个规定的时间内完成对事件的处理,那么这种操作系统就是一个实时操作系统。
2.1.1.实时系统的基本要求
对实时操作系统有两个基本要求:
第一,实时系统的计算必须产生正确的结果,称为逻辑或功能正确(LogicalorFunctionalCorrectness);第二,实时系统的计算必须在预订的周期内完成,称为时间正确。
2.2.实时操作系统的特点
嵌入式系统主要是对设备和装置进行控制的,在这些场合,系统能否及时快速的响应外部事件,常常是对系统的第一要求,因此嵌入式系统使用的操作系统大多是实时操作系统。
对于一个实时操作系统来说,就是要求他在现有的硬件条件下,在接收输入后要尽快的计算出输出结果,并应使应用程序设计者在应用程序设计时,就能预先准确地确定完成任务所需要的最长时间。
为了达到上述要求,实时操作系统应满足以下三个条件:
●实时操作系统必须是多任务系统
●任务的切换时间应该与系统中的任务数无关
●中断延时的实践可预知并尽可能短
任务提高了设备(或者CPU)的利用率,这点事容易理解的。
如果是单任务的话,当此任务所需要的条件没有被满足时,比如等待磁盘IO,此时CPU只能等待,无疑这极大的降低了硬件的利用率。
任务必然存在任务间的切换。
当然切换需要按照一定的规则,这个工作一般是由调度器完成的。
调度器调度的过程当然需要一段时间。
为了满足实时性的要求,这个延时要求尽可能小并且可预测,即在最坏的延时下是否能满足实时的要求。
2.3.实时系统μC/OS-II的分析
μC/OS-II是一个优秀的操作系统。
代码不长,在实时性也表现十分优秀这系统的服务是以任务的形式变现。
每个任务有一个优先级,有内核进行调度。
任务是这个系统的核心,先看看任务的结构,然后在分析μC/OS-II对任务的管理和任务间的通信。
2.3.1.μC/OS-II的任务结构
μC/OS-II的任务:
上面说了这个系统的核心就是它的任务,它也是通过任务来对不同事件进行响应和处理的。
从代码上来看,μC/OS-II的任务大都为如下结构(C语言描述,后同):
voiduCOSTask(void*p)
{
while
(1)
{
任务具体的功能;
}
}
任务的存储结构和状态:
系统中任务总共三个部分组成,分别是任务的代码部分、任务堆栈、任务控制块。
其中任务控制块保存任务的属性;任务堆栈在任务进行切换时寄存器的数值和任务的运行状态;任务代码部分可以理解为一个完成一定任务的函数。
任务存储结构如图2-1所示。
任务就是以下的块的形式存储在内存中的。
所有的任务形成一个链表,每一个节点都由一个这样的结构组成。
嵌入式芯片一般是单核,所以一次只能处理一个任务。
μC/OS-II的任务一共有5种状态:
睡眠、就绪、运行、等待和中断服务,任务在这五中状态之间切换。
并且cup切换的速度十分的迅速,在用户的角度看起来所有的任务近似是同时执行的,这也是多任务的操作系统比起裸机程序的一个巨大的优势和特点。
下图展现的是系统中任务的存储的结构。
下文中会对这个结构做一个较为详细的介绍。
图2-1任务的存储结构
现在介绍任务的每个状态的详细情况:
睡眠:
任务仅仅以代码的形式驻留在程序存储器中,没有分配任务控制块或者任务控制块被删除。
因此操作系统还没有管理这个任务,此时任务的状态叫做睡眠状态。
就绪状态:
任务已经分配到了任务控制块并且具备了运行的条件,在就绪表中已经登记,等待运行的状态。
运行状态:
就绪的任务获得了微处理器的使用权就立即进入运行状态,此时该任务占有微处理器的使用权。
等待状态:
正在运行的任务,由于需要等待一段时间或者等待某个条件的满足,需要让出微处理器的使用权。
此时任务处于等待状态。
中断服务状态:
一个任务正在运行,当突然有一个中断产生时,微处理器会终止该任务的运行转而去处理中断,此时该任务为中断服务状态。
由下图可以看出,任务总是在五中状态之中来回切换,换句话讲任务在系统中必然会是下面五个状态中的一个。
并且只有在中断中的服务程序或者是已经是就绪的任务有机会或者cpu,进而执行代码,其他状态的任务是不能执行的。
图2-2任务各种转台之间的转换
任务控制块:
任务控制块储存了任务的关键参数,包括链表的指针,栈顶指针,等等。
是任务组成的一个关键部分。
其具体的代码及分析如下:
ty