李洋论文最终.docx
《李洋论文最终.docx》由会员分享,可在线阅读,更多相关《李洋论文最终.docx(57页珍藏版)》请在冰豆网上搜索。
李洋论文最终
摘要
目前,计算器的应用很广泛,和人们的生活、工作息息相关,随着嵌入式系统的发展和应用,在很多的嵌入式设备中都需要有计算器的功能。
因此研究基于嵌入式的计算器开发与移植具有广泛的应用价值和必要性。
STM32是为高性能、低成本、低功耗嵌入式应用专门设计的嵌入式内核。
μC/OS-II是面向中小型应用的、其任务基于优先级的可剥夺嵌入式实时内核,其特点是小巧、性能稳定。
本课题主要研究以STM32为控制系统,液晶触摸屏为人机交互界面,以μC/OS-II为操作系统,重点研究将μC/OS-II移植到STM32的方法,并在μC/OS-II的环境下设计开发计算器的功能。
本论文主要介绍了μC/OS-II以及任务管理等内容,并搭建了相应的开发环境,实现了μC/OS-II移植到STM32,在μC/OS-II环境下开发了计算器功能程序。
经过软硬件系统调试,该系统能够正常运行,实现了嵌入式计算器的基本功能。
关键词:
嵌入式系统;计算器;μC/OS-II
Abstract
Atpresent,thecalculatorapplicationisusedverywidlyinpeople'slifeandwork.withthedevelopmentandapplicationofembeddedsystem,Theregenerallyisthefunctionofthecalculatorinmanyembeddeddevices.Sotheresearchbasedonembeddedcalculatordeved-andtransplantationhasextensiveapplicationvalueandnecessity.STM32ismadeforhighp-erformance,lowcost,lowpowerconsumptionembeddedapplicationspeciallydesignedem-embeddedkernel.UC/OS-IIisgearedtotheneedsofsmallandmedium-sizedapplications,ittasksbasedonprioritycanbedeprivedofembeddedreal-timekernel,it’scharacteristicissm-allandstable.
ThissubjectmainlyresearchSTM32ascontrolsystem,LCDtouchscreenforhuman-computerinteractioninterface.UC/OS-IIisregardastheoperatingsystem,thekeyresearchistransplantingμC/OS-IItotheSTM32approach,anddesigncalculatorfunctionsintheμC/OS-IIenvironment.
ThispapermainlyintroducestheμC/OS-IIandtaskmanagement,buildingthecorresp-ondingdevelopmentenvironment,andcometruetaskoftheμC/OS-IItransplantation.Toco-completetheprogramofthecalculatorprograminμC/OS-IIenvirnment.throughsoftwareandhardwaresystemdebugging,thesystemcanrunnormally,andrealizedthebasicfunctionofembeddedcalculator.
keyword:
Theembeddedsystem;Calculator;μC/OS-II
目录
1引言1
1.1课题来源1
1.2嵌入式处理器1
1.3嵌入式操作系统2
2μC/OS-II简介5
2.1uC/OSII特性5
2.2μC/OS-II基本功能5
2.3μC/OS-II组成部分7
2.4uC/OSII运行流程8
3开发环境设置10
3.1软件安装10
3.1.1JLINK安装10
3.1.2DMK安装10
3.2新建工程10
3.2.1ST库源码10
3.2.2开始新建工程11
3.2.3硬件调试设置16
4任务管理17
4.1任务的基本结构17
4.2任务状态17
4.3任务相关函数19
4.3.1OSTaskCreate()19
4.3.2OSTaskDel()19
4.3.3OSTaskChangePrio()20
4.3.4OSTaskSuspend()21
4.3.5OSTaskResume()21
5系统移植23
5.1μCOS-II移植23
5.1.1开始移植23
5.1.2修改头文件OS_CPU.H23
5.1.3修改OS_CPU.C24
5.1.4修改文件OS_CPU_A.ASM26
6计算器程序设计29
6.1程序模块29
6.1.1按键识别29
6.1.2字符转数字31
6.1.3两数相乘除33
6.1.4判断正误34
6.1.5括号运算35
6.1.6功能按键36
7系统调试39
7.1软件问题39
7.2显示界面39
结论41
致谢42
参考文献43
附录A英文附录44
附录B中文附录52
附录C程序附录58
1引言
1.1课题来源
最早的计算工具是古代印加人的结绳记事的方法,用来计数或记录历史。
还有古希腊的安提凯希拉装置,在中国的就是算盘,又叫算筹。
17世纪初,西方国家的技术工具有了较大的发展,英国数学家呐皮尔发明了“呐皮尔算筹”,英国牧师奥却发明了计圆柱型的对数算尺,这种算尺不仅能够做加、减、乘、除、开方运算,甚至能够进行计算三角函数,指数函数和对数函数。
这些计算工具很好地带动计算器的发展。
1642年,年仅19岁的法国数学家帕斯卡发明了第一部机械师计算器,在他的计算器中有一些相互连锁的齿轮,一个转过十位的齿轮会是另一个齿轮转过一位,人们可以可以像拨电话号码盘一样,把数拨进去,结果就会出现在另一个窗口中。
但是只能进行加减法运算。
1694年,莱布尼兹在德国对其进行改进,并能进行乘除运算。
20世纪50年代末电子计算器出现。
从20世纪70年代开始,微处理器技术被吸纳进计算器进程,最初的微处理器是1971年为日本名为Busicom的计算器公司生产的,1972年惠普推出了第一款科学计算器HP-35。
随后,他们把液晶显示器运用到计算器中,并把太阳能电池安装到计算器中,惠普把计算器最初3000多个零件减少到3个—硅片、显示屏和太阳能电池,大大的降低了计算器的成本,促进了计算器的发展。
计算器是能进行数学运算的手持机器,拥有集成电路芯片,结构简单,功能较弱,但由于它使用方便、操作简单、价格低廉,因而广泛运用于商业交易中,也是必备的办公用品之一,有很强的实用性。
1.2嵌入式处理器
ARM是英国的芯片设计公司,其最成功是32位嵌入式CPU核----ARM系列,最常用的是ARM7和ARM9,ARM公司主要提供IP核,就是CPU的内核结构,只包括最核心的部分,并不是完整的处理器。
ARM把这个核卖给各大半导体公司,如Philips、三星、ATMEL,甚至Intel等许多公司。
ARM为了对付8位机市场,最近推出了Cortex-M3核,STM32就是意大利的意法半导体基于Cortex-M3的32位嵌入式处理器,Cortex_M3核性价比更高,价格低,可以与8位单片机竞争。
另一方面,处理器之间的互连也在加深,串口、USB、以太网、无线数传……处理器如欲支持这些数据通道,就必须在片上塞进更多的外设,应用程序的功能一直在增强,因此,性能需求剧增,更高的运算速度,更硬的实时能力,更多的功能模块。
ARMCortex‐M3处理器采用了最新的设计技术,它的门数更低,性能却更强。
许多曾经只能求助于高级32位处理器或DSP的软件设计,都能在CM3上完美运行,CM3就一定能在32位嵌入式处理器市场中脱颖而出。
ARM32位Cortex-M3微处理器,专为高性能、低成本、低功耗嵌入式应用专门设计的嵌入式内核,是32位市场上功耗最低的产品。
72MHz频率,512kBFlash,64kBSRAM,灵活的静态存储器控制器存储器:
SRAM、PSRAM、NOR和NANDFlash、PLL,内置的RC正当频率为8MHz和32kHz,实时时钟,嵌套中断控制器,节电模式,JTAG和SWD两种模式,4个同步16位计时器与输入捕获,输出比较和PWM波,2个16位的高级定时器,2个16位的基本定时器、2个16位的看门狗定时器,系统时钟定时器,3个SPI/I2S模块,2个I2C模块,5个USART模块,一个USB2.0全速接口,一个CAN2.0BActive,3个112位16通道A/D控制器,2个12位的D/A控制器,1个SDIO接口,快速的I/O口。
STM32优点:
(1)性能强劲。
在相同的主频下能做处理更多的任务,功耗低。
(2)实时性好。
极速地响应中断,而且响应中断所需的周期数是确定的。
(3)代码密度得到很大改善。
既支持大型应用程序,又为低成本设计节省时间。
(4)低成本的整体解决方案。
基于以上优点,决定选用STM32。
1.3嵌入式操作系统
嵌入式系统是根据应用的要求,将操作系统和功能软件集成于计算机硬件系统之中,从而实现了软件与硬件一体化的计算机系统。
嵌入式系统一般不提供与终端交互的手段,具有小巧、高度自动化、响应速度快等特点。
在嵌入式操作系统之上开发嵌入式系统将减少系统开发的工作量,增强嵌入式应用软件的可移植性,使嵌入式系统的开发方法更具科学性。
现行应用中比较流行的嵌入式操作系统有Linux、WindowsCE、VxWorks、eCos、μC/OS-II等。
(1)Linux
Linux是开放源代码、免费使用和自由传播的操作系统,发展历史悠久,第三方应用软件非常丰富,多数自由软件都能够运行在Linux系统上。
Linux经过不断改版升级,已经发展成一个遵循POSIX标准的纯32位多进程操作系统。
嵌入式Linux系统不是实时操作系统,RT_Linux支持实时性,稳定性好,安全性好,不过价格不低,也有针对没有MMU设备移植的μClinux系统。
在实践中发现,利用Cygwin编译嵌入式Linux应用程序和RedHatLinux编译的运行效果不一致。
虽然Linux下支持的图形化交叉调试工具有不少可用资源,但针对具体的硬件平台,需要的设置工作也不少。
可见嵌入式Linux还缺乏好用的集成开发环境,需要消耗一定人力用于搭建开发环境。
(2)VxWorks
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),具有高可靠性、高实时性、高性能、组件丰富可裁剪的微内核结构,以及友好的开发环境。
它以良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通信、军事演习、弹道制导、飞机导航等。
编译器包括GNU的C/C++编译器和DiabC/C++编译器。
图形化的工程管理工具非常方便有效,可以方便地对VxWorks操作系统、组件及工程编译参数进行配置。
核心工具包括VxSim仿真器、WindView软件逻辑分析仪、WindShell命令行执行工具、CrossWind集成调试器、Brow-ser系统对象检查工具。
这些工具非常实用,方便开发调试。
编辑器虽不受推崇,但好在可以设置外部编辑器。
VxWorks性能优越,开发调试便利,有强大的技术支持,但是昂贵的价格让开发者望而却步。
(3)eCos
eCos是由RedHat推出的小型实时操作系统。
它诞生于1997年,最早是Cygnus公司开发,后被RedHat收购。
它的特点是源码开放、免费、内核可灵活配置。
eCos网络发行版支持的交叉开发主机有Windows和Linux两种版本,开发编译工具可支持GNU开源的开发工具链。
eCos系统包含的开发工具有软件配置和构建工具,及基于GNU的编译器、汇编器、链接器、调试器和仿真器。
支持的CPU有十几种,包括ARM、HitachiH8300、Intelx86、MIPS、MatsushitaAM3x、Motorola68k、PowerPC、SuperH、SPARC和NECV8xx,可以方便对不同平台的移植。
eCos系统组件非常丰富,可加速开发。
核心组件有硬件抽象层、实时内核、μITRON3.0兼容的API、POSIX兼容的API、ISOC和数学库、从USB支持,TCP/IP网络协议栈、GDB调试支持、串口、以太网驱动等。
(4)μC/OS-II
μC/OS-II是Micrium公司的基于优先级抢占、多任务的小型实时操作系统。
发布于1992年,最多可以管理255个任务,支持信号量及互斥信号量、消息队列和消息邮箱、固定大小内存块管理、时间/定时器管理等服务。
内核代码量小巧,适合学习和研究。
作为大学实时操作系统的典型教材,它具有广泛的群,已广泛应用于高安全性的设备。
其源码99%符合MISRAC编码标准。
支持的CPU有40多种,主要包括ARM、AVR、Niso、SE3208、M.Core、ColdFire、PowerPC、8051、80xC52、80x86、SPARClite、SH、Xscale、PIC18、PIC24、TMS320、TMS470、Z-80等。
可以从官方网站获得45天的免费评估源码。
嵌入式开发第一步需要确定嵌入式操作系统,对于嵌入式操作系统的选择通常从以下几个方面考虑:
(1)硬件平台的限制,如CPU类型、内存大小、程序存储空间大小、MMU等。
(2)性能参数要求,如是否要求硬实时、优先级抢占式调度、中断响应速度等。
(3)开发、调试环境,功能强大、容易搭建的集成开发/调试环境能节省项目人力投入,加速开发进度。
(4)移植操作系统的难易,有CPU内核移植、CPU的移植、最小系统组成的移植、外设驱动的移植。
(5)技术支持,可移植性支持,软件购置成本也是选择嵌入式操作系统要考虑的因素。
μC/OS-II是面向中小型应用的、其任务基于优先级的可剥夺嵌入式实时内核,其特点是小巧、性能稳定、可免费获得实现代码,以μC/OS-II作为开发环境,我们能够用C语言进行程序编写,锻炼我们的编程能力和逻辑思维能力。
我们可以学习操作系统的简单移植,这样就能把硬件和程序进行一定的脱离开来,减少我们的工作量,缩短工程的开发周期,提高系统的稳定性。
所以我们选用μC/OS-II操作系统。
2μC/OS-II简介
μC/OS-II的前身是μC/OS,由美国嵌入式系统专家JeanJ.Labrosse在《嵌入式系统编程》杂志上发表,并把μC/OS的源码发布在该杂志的BBS上。
2.1uC/OSII特性
μC/OS-II是一个可以基于ROM运行的、可裁减的、抢占式实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统。
为了提供最好的移植性能,uC/OSII最大程度上使用ANSIC语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。
μC/OS-II可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和多任务操作系统相关的系统服务,如信号量、邮箱等。
其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。
内核属于抢占式,最多可以管理60个任务。
从1992年开始,由于高度可靠性、鲁棒性和安全性,uC/OSII已经广泛使用在从照相机到航空电子产品的各种应用中。
μC/OS和μC/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。
CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。
只要有标准的ANSI的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。
μC/OS-II具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。
μC/OS-II已经移植到了几乎所有知名的CPU上。
2.2μC/OS-II基本功能
严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。
没有提供输入输出管理,文件系统,网络等额外的服务。
但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全可以由自己根据需要分别实现。
uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。
(1)任务管理
uC/OS-II中最多可以支持64个任务,分别对应优先级0~63,其中0为最高优先级。
63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有可以使用的任务数有56个。
uC/OS-II提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。
系统初始化时会自动产生两个任务:
一个是空闲任务,它的优先级最低,改任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,改任务负责统计当前cpu的利用率。
(2)时间管理
uC/OS-II的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次,时间频率取决于对硬件系统的定时器编程来实现。
中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。
uC/OS-II要求在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。
(3)内存管理
在ANSIC中是使用malloc和free两个函数来动态分配和释放内存。
但在嵌入式实时系统中,多次这样的错作会导致内存碎片,且由于内存管理算法的原因,malloc和free的执行时间也是不确定。
uC/OS-II中把连续的大快内存按分区管理。
每个分区中包含整数个大小相同的内存块,但不同分区之间的内存快大小可以不同。
需要动态分配内存时,系统选择一个适当的分区,按块来分配内存。
释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时执行时间也是固定的。
(4)务间通信与同步
对一个多任务的操作系统来说,任务间的通信和同步是必不可少的。
uC/OS-II中提供了4中同步对象,分别是信号量,邮箱,消息队列和事件。
所有这些同步对象都有创建,等待,发送,查询的接口用于实现进程间的通信和同步。
(5)任务调度
uC/OS-II采用的是可剥夺型实时多任务内核。
可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。
uC/OS-II的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。
为了简化系统设计,uC/OS-II规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。
任务调度将在以下情况下发生:
a、高优先级的任务因为需要某种临界资源,主动请求挂起,让出处理器,此时将调度就绪状态的低优先级任务获得执行,这种调度也称为任务级的上下文切换。
b、高优先级的任务因为时钟节拍到来,在时钟中断的处理程序中,内核发现高优先级任务获得了执行条件(如休眠的时钟到时),则在中断态直接切换到高优先级任务执行。
这种调度也称为中断级的上下文切换。
2.3μC/OS-II组成部分
调度工作的内容可以分为两部分:
最高优先级任务的寻找和任务切换。
其最高优先级任务的寻找是通过建立就绪任务表来实现的。
uC/OS-II中的每一个任务都有独立的堆栈空间,并有一个称为任务控制块TCB的数据结构,其中第一个成员变量就是保存的任务堆栈指针。
任务调度模块首先用变量OSTCBHighRdy记录当前最高级就绪任务的TCB地址,然后调用OS_TASK_SW()函数来进行任务切换。
μC/OS-II的组成部分:
μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。
(1)核心部分
操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。
能够维持系统基本工作的部分都在这里。
(2)任务处理部分
任务处理部分中的内容都是与任务的操作密切相关的。
包括任务的建立、删除、挂起、恢复等等。
因为μC/OS-II是以任务为基本单位调度的,所以这部分内容也相当重要。
(3)时钟部分
μC/OS-II中的最小时钟单位是timetick(时钟节拍)。
任务延时等操作是在这里完成的。
(4)任务同步和通信部分
为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。
(6)与CPU的接口部分
CPU的接口部分是指μC/OS-II针对所使用的CPU的移植部分。
由于μC/OS-II是一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据具体CPU的具体内容和要求作相应的移植。
这部分内容由于牵涉到SP等系统指针,所以通常用汇编语言编写。
主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。
2.4uC/OSII运行流程
uC/OS-II通过不断产生定时中断,或主动放弃CPU控制器,然后进行任务调度相当于不断循环执行不同函数(即任务),最终实现各种功能。
uC/OS-II的实时性靠中断完成,每个节拍到来,就会产生一次定时中断,中断后进行任务调度,运行就绪表中优先级最高的任务(非抢占型内核中断后继续运行被中断任务)。
即过一段时间后就检测是否有重要任务需要运行,是的就转而运行更重要的任务,从而确保实行性。
uC/OS-II的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。
最高优先级任务的寻找和任务切换。
其最高优先级任务的寻找是通过建立就绪任务表来实现的。
为了简化系统设计,uC/OS-II规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。
首先进行初始化变量,这里需要对控制其初始化,初始化所有全局变量、所有数据结构、创建最低优先级空闲任务OSTaskIde。
也可以进行外围硬件初始化(也可以在任务中实现)。
接下来就进行创建任务,至少需要创建两个任务。
进入多任务管理阶段,类似于完成进入循环前的准备。
接着进行任务调度,当主动让出CPU:
延时、请求临界资源而挂起、实时街拍到来,切换任务。
uC/OSII的详细工作流程如图2.1所示。