嵌入式系统设计报告.docx_第1页
嵌入式系统设计报告.docx_第2页
嵌入式系统设计报告.docx_第3页
嵌入式系统设计报告.docx_第4页
嵌入式系统设计报告.docx_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子竞赛实训报告嵌入式操作系统报告 学 院 专 业 题 目 LED、按键、LCD、MPU6050任务切换 姓名学号 指导教师 日 期 2016 年 12月 10 日 2北京工业大学摘要随着电子技术的发展,嵌入式技术成为当今计算机应的主流技术,嵌入式操作系统是嵌入式系统发展到一定阶段的产物,是为了满足日益复杂的嵌入式系统设计的要求而产生的。随着微处理器功能的不断提升,嵌入式操作系统的应用范围也变得越来越强大。对基于特定嵌入式操作系统上的软件设计研究己成为了近年来的热点,井且对于嵌入式操作系统在实际工程中的推广应用有着重要的意义。本文使用蒲公英STM32F103开发板,利用Keil软件创建工程。移植UCOS系统内核,应用C语言编写程序。完成了四个任务的创建和相互调度:LED灯、按键、LCD屏幕显示、MPU6050加速度传感器数据采集,通过按键更改LED灯的显示效果、通过实时采集MUP6050传感器的数据,显示在LCD上,并用信号量和消息邮箱进行任务之间的信息传递。关键词:UCOS-ii、嵌入式系统、STM32F103、keilABSTRACT With the development of electronic technology, embedded technology has become the mainstream technology in the computer, the embedded operating system is the product of a certain stage of development of embedded system, is produced in order to meet the design requirements of the embedded system is becoming more complicated. With the continuous improvement of the function of the microprocessor, the application of embedded operating system becomes more and more powerful. The research of software design based on specific embedded operating system has become a hot spot in recent years, and it has important significance for the application of embedded operating system in practical engineering.In this paper, the use of dandelion STM32F103 development board, the use of Keil software to create the project. Transplant UCOS system kernel, the application of C language program. Complete the construction of four tasks and scheduling: LED lights, buttons, LCD display screen, MPU6050 acceleration sensor data acquisition, change the LED lamp through the button display, through real-time acquisition of MUP6050 sensor data, display on the LCD, and the task of transmission of information between signal and message mailbox.Key words: UCOS-ii, embedded system, STM32F103, KeilKey words:目录1 绪论11.1 研究的目的与意义11.2 嵌入式系统概述11.3 嵌入式操作系统特征及发展现状22 u C/OS-II简介32.1 u C/OS-II特点32.2 u C/OS-II内核分析32.2.1 临界段32.2.2 任务定义及状态42.2.3 任务控制块(OS TCB)52.2.4 任务调度53 开发环境73.1 开发环境73.1.1 Keil简介73.1.2 keil特点73.2 硬件环境83.2.1 蒲公英32F平台简介83.2.2 32F103引脚图83.2.3 蒲公英32F103开发板特点94 程序分析104.1 程序流程图104.2 代码分析114.2.1 lcd显示功能114.2.2 按键功能114.2.3 LED灯控制功能124.2.4 加速度传感功能134.2.5 在屏幕上显示传感数字135 5运行结果145.1 程序代码截图145.2 实物图156 心得体会15参考文献16致谢161 绪论1.1 研究的目的与意义随着单片机技术的普及和日益成熟,嵌入式系统已经无处不在、无时不刻地影响着人们的生活了。各种嵌入式产品的功能不断增强、精确程度不断提高、响应时间逐渐缩短,可靠性不断提高且成本不断降低。嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。简言之,嵌入式系统是根据应用的要求,将操作系统和功能软件集成于计算机硬件系统之中,从而实现了软件和硬件一体化的计算机系统。嵌入式系统一般不提供与终端用户交互的手段,具有小巧、高度自动化和响应速度快等特点。从7年代第一台微处理器的出现到现在,嵌入式系统的发展己经有二十几年的历史了,随着以计算机技术,通讯技术为主的信息技术的迅速发展和互联网技术的广泛应用,嵌入式系统的发展己显示出微型化和专业化的趋势。正是由于嵌入式系统的种种优越性,嵌入式系统自产生那天起便开始迅速的发展,如今嵌入式系统己成为计算机领域的一个重要的组成部分。1.2 嵌入式系统概述嵌入式系统(Embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电气工程师协会( U.K. Institution of Electrical Engineer)的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。嵌入式系统通常进行大量生产,所以单个的成本节约,能够随着产量进行成百上千的放大。嵌入式系统是用来控制或者监视机器、装置、工厂等大规模设备的系统。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。 嵌入式系统的核心是由一个或几个预先编程好以用来执行少数几项任务的微处理器或者单片机组成。与通用计算机能够运行用户选择的软件不同,嵌入式系统上的软件通常是暂时不变的;所以经常称为“固件”。1.3 嵌入式操作系统特征及发展现状 嵌入式操作系统井不是简单嵌入的操作系统,它与通常意义上的操作系统有一定的区别。嵌入式操作系统负责嵌入式系统的全部软、硬资源的分配、调度工作,控制井协调井发活动,它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。与通用的操作系统相比,嵌入式操作系统具有如下一些特征: (1)良好的移植性。由于嵌入式设备硬件平台的多样性,CPU芯片的快速更新,嵌入式操作系统要求具有更好的硬件适应性。嵌入式操作系统一般都支持广泛的运行平台,同时对每种微处理器都提供相应的编译器、连接器、调试器和加载工具以及性能测试工具等一系列工具链,从而形成从开发、调试到运行的一体化支持; (2)小巧,要求占用更小的硬件资源。嵌入式系统所能提供的资源有限,所以嵌入式操作系统必须做的小巧以满足嵌入式系统硬件的限制。况且由于嵌入式系统自身的特点,它所需要的模块和功能更小巧,一些在桌面操作系统中的功能在嵌入式操作系统也就不适用了;(3)实时性。大多数嵌入式系统工作在实时性要求很高的环境中,这就要求嵌入式操作系统必须将实时性作为一个很重要的方面来考虑。在信息时代,人们必须在有效的时间内对到来的信息进行处理,从而为进一步的决策分析争取时间。所以嵌入式操作系统必须体现一定的实时性;(4)可装载和卸载。由于嵌入式系统需要根据应用的要求进行装卸,所以嵌入式操作系统也必须能够适应应用的需要进行装卸,对嵌入式操作系统的各个部分进行优化和删除。(5)固化代码。在嵌入式系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。辅助存储器在嵌入式系统中使用的很少,因此嵌入式操作系统的文件管理功能应该被拆卸,取而代之的是各种内存文件系统;(6)弱交互性。大多数嵌入式系统的工作过程不需要人的干预。嵌入式操作系统的用户接口一般不提供操作命令,它通过系统调用命令向用户程序提供服务。(7)强稳定性。嵌入式系统一旦开始运行就不需要人的过多干预。井且很多的嵌入式系统工作在很恶劣的工业生产的环境下。在这种条件下,要求嵌入式操作系统具有较高的稳定性;(8)统一的接口。随着各种各样的嵌入式操作系统的出现人们有必要为嵌入式系统提供的接口进行约定,从而为嵌入式应用软件的设计者提供统一的服务接口,为嵌入式软件的运行提供平台的无关性。正是由于嵌入式操作系统所具有的这些鲜明的特点才使得其在嵌入式系统的开发中得到了广泛的应用,近年来全球嵌入式操作系统的发展空间更是正随着互联网、通讯和计算机市场的飞速增长而不断的扩大。但另一个方面,尽管国外许多公司也有对此类系统几十年的开发经验,可到目前为止在嵌入式系统上井无一个统一的国际标准,这就使得市场上出现了各种不同种类的嵌入式操作系统,这些操作系统各有特色,其采用的体系结构和技术手段也各有优点,应用范围也不尽相同。2 u C/OS-II简介2.1 u C/OS-II特点 u C/OS- II是由美国人Jean J. Labrosse编写的一个公开源代码的,微内核嵌入式实时操作系统,其实时性能和内核的健壮性早已经在大量的实际应用中得到了证实。它是由u C/OS升级而来的,并且做了很大的改进。下面简单介绍一下它的特点: (1)公开源代码,且源代码中有详细的注释,源代码清晰易读且结构协调、组织有序,对实时操作系统的基本原理做了非常详细的解释,简单易懂。 (2)移植性好,u C/OS- II的源代码绝大部分是用ANSI C编写的,与微处理器相关的部分是用汇编语言写的,使得u C/OS- II便于移植到其它处理器上。 (3)可裁剪,用户可以根据自己的寄存器空间的大小和实际需要,只保留u C/OS- II中应用程序需要的那些系统服务。 (4)稳定性和可靠性高,抗干扰能力强。 (5) u C/OS- II完全是占先式的实时内核。这意味着u C/OS- II总是运行就绪状态下优先级最高的任务。 (6) u C/OS- II每个任务的优先级必须是不同的,这意味着 C/OS- II不支持时间片轮转调度法(Round-robin Scheduling ) Z o (7) u C/OS- II的函数调用与服务的执行时间具有其可确定性。 (8)u C/OS- II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。2.2 u C/OS-II内核分析u C/OS- II内核负责管理各个任务,或者说为每一个任务分配CPU时间及其相关的资源,并且负责任务之间的通信。内核提供的基本服务是任务切换。使用实时内核可以大大简化应用系统的设计,因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。接下来从几方面对u C/OS-II的内核作出介绍:2.2.1 临界段 代码的临界段也称为临界区,指处理时不可分割的一段代码。一旦这部分代码开始执行,则不允许任何中断。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。和其它内核一样,u C/OS- II为了处理临界段代码需要关中断,处理完毕后再开中断。这使得u C/OS- II能够避免同时有其它任务或中断服务进入临界段代码。关中断的时间是实时内核开发商应提供的最重要的指标之一,因为这个指标影响用户系统对实时事件的响应性。 u C/OS- II努力使关中断时间降至最短,但就使用u C/OS- II而言,关中断的时间很大程度上取决于微处理器的架构以及编译器所生成的代码质量。微处理器一般都有关中断/开中断指令,用户使用的C语言编译器必须有某种机制能够在C中直接实现关中断/开中断地操作。u C/OS- II定义两个宏来关中断和开中断,以便避开不同C编译器厂商选择不同的方法来处理关中断和开中断。 u C/OS- II中的这两个宏调用分别是:OS ENTER CRITICAL()和OS_ EXITes CRITICAL() 。2.2.2 任务定义及状态 u C/OS- II的任务是一个无限的循环,也称作一个线程,是一个简单的程序,该程序可以认为CPU完全只属该程序自己。一个任务可以有返回类型,有形式参数变量,但是任务是绝不会返回的。当任务完成以后,任务可以自我“删除”,即u C/OS- II不理会这个任务了,这个任务的代码也不会再运行。实时应用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分,每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。u C/OS- II可以管理多达64个任务,其中空任务(IDLE)和统计任务(STATISTICS)被系统占用。任务在建立时必须被赋予不同的优先级,优先级的数值越小,则表示任务的优先级越高。u C/OS- II总是运行进入就绪状态的优先级最高的任务。 多任务运行的实现是靠CPU在许多任务之间转换、调度,CPU只有一个,轮番服务于一系列任务中的某一个。多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。在实时应用中,多任务化的最大特点是,开发人员可以将很复杂的应用程序层次化。使用多任务,应用程序将更容易设计与维护。u C/OS- II中任务的状态包括运行态、就绪态、等待状态、睡眠态和中断服务态。图2-1是u C/OS- II控制下的任务状态转换过程。在任一给定的时刻,任务的状态一定是这五种状态之一。2.2.3 任务控制块(OS TCB) 任务控制块(OS TCB)是一个数据结构,是用来描述任务的一些属性,包括任务标识号、任务优先级、任务状态信息、任务控制信息以及堆栈信息等。u C/OS- II中是采用任务控制块的方式对任务进行管理的。任务控制块在任务被建立时被初始化,当任务的CPU使用权被剥夺时,u C/OS- II用任务控制块来保存该任务的状态。而当任务重新得到CPU使用权时,任务控制块能恢复任务到被中断前的状态,确保任务从中断的那一点继续执行下去。任务控制块全部驻留在RAM中。应用程序中可以有的最多任务数(OS一AXes TASKS )是在文件OS一FCzH中定义的。这个最多任务数也是u C/OS- II分配给用户程序的最多任务控制块的数目。将OS MAX TASKS的数目设置为用户应用程序实际需要的任务数可以减小RAM的需求量。所有的任务控制块都是放在任务控制块列表数组OSTCBTbI中的。在 u C/OS- II初始化的时候,所有任务控制块OS一CBs被链接成单向空任务链表。当任务一旦建立,空任务控制块指针OSTCBFreeList指向的任务控制块便赋给了该任务,然后OSTCBFreeList的值调整为指向下链表中下一个空的任务控制块。一旦任务被删除,任务控制块就还给空任务链表。2.2.4 任务调度 在u C/OS- II中,最多支持63个任务,每个任务只能有独立的优先级,即不能有2个相同优先级的任务,系统也不支持时间片轮番调度。因此,Rhealstone方法的定义,uC/OS- II的实时性主要体现在抢占(Preemption)按照时间和中断等待时间(Latency ) u C/OS- II是一种基于优先级调度的占先式内核。在系统运行的过程中,可能发生任务调度的时机有: (1)对任务操作的时候,包括:创建或者删除任务,挂起或者恢复任务,改变任务优先级。 (2)任务主动使用OSTimeDly函数延时的时候。 (3)发送(或者等待)信号量、邮箱、消息的时候。 (4)中断函数返回的时候。中断往往会使一个更高优先级任务处于就绪状态,包括使用信号量等或者直接恢复某个任务。所以,在系统退出中断的时候,就需要判断是否有更高优先级的任务处于就绪状态,如果有,则需要进行任务调度。 (5)给系统的任务调度器解锁的时候。在大多数情况下,u C/OS- II中断级的任务调度是按照如图2-2所示的流程进行的。其中Tr为系统的中断等待时间。Tp为系统的抢占时间。Ts为系统的中断响应与查找的时间,主要包括中断入口程序的执行,注册在系统中的中断向量的查找等。Td为执行中断处理所用的时间。Tw为系统判断并查找处于就绪状态下优先级最高的任务和中断级任务切换的时间。而Tc则可以认为满足:0Tc成系统的最长关中断时间。当有多个中断产生的时候,如果因为中断的优先级低或者系统不允许中断嵌套,则u c/os- II的中断级任务调度将按照如图2-3所示的流程进行。 u C/OS- II是一个实时性比较强的多任务操作系统,很容易评估出系统调度的最长响应时间。每一个任务都是一个死循环。u C/OS-II V2.86 可以扩展至支持256个任务,除去系统自带的优先级被设置为最低的空闲任务 OSTask Idle()和一个u C/OS-II提供的统计任务,用户可以自己制定的任务多达254个。u C/OS-II内核通过一个被称为任务控制块(OS_TCB)的数据结构来完成任务的建立、调度、执行和删除操作。u C/OS-II中每个任务都具备五种状态,当内核进行一次调度或者发生相关的事件时,任务就会在这五种状态之间转换,如图2-4所示。图2.4 uC/OS-II的任务就绪表3 开发环境3.1 开发环境3.1.1 Keil简介 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(Vision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。3.1.2 keil特点Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,更为便捷。3.2 硬件环境3.2.1 蒲公英32F平台简介STM32F1系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。芯片集成定时器,CAN,ADC,SPI,I2C,USB,UART,等多种功能。其结构和硬件框图如图3-1,3-2所示:图3-1蒲公英32F103开发板 图3-2 32F103硬件框图3.2.2 32F103引脚图(1)LED灯电路图3.3 LED输出端口图3.4 LED电路(2)按键电路图3.5 按键输出端口 图3.6按键电路(3)LCD电路图3.7 LCD输出电路 图3.8LCD外围电路(4)MPU6050电路图3.9 MPU6050外围电路3.2.3 蒲公英32F103开发板特点1、ARM最新的Cortex-M3内核。优先级抢占的中断控制器,支持中断自动嵌套,硬件完成现场保护与恢复,中断嵌套时,只需保护和恢复一次现场,即使在恢复现场的时候再次中断也不需要再次保护现场,只需6个clk的调整时间。2、外设的引脚居然可以重影射3、RAM可以通过位绑定技术按位来访问4 程序分析4.1 程序流程图 4-1程序整体流程图4.2 代码分析4.2.1 lcd显示功能void TaskMessageLCD(void *pParam)err=OS_ERR_NONE; 定义异常,为传参数做准备PUTword8x16(0,0,23,1);/xPUTchar16x16(0,1,2); /轴PUTword8x16(1,0,24,1);/yPUTchar16x16(1,1,2); /轴PUTword8x16(2,0,25,1);/zPUTchar16x16(2,1,2); /轴PUTword8x16(3,0,6,0);/gPUTword8x16(3,1,18,0);/sPUTword8x16(3,2,25,0);/zPUTword8x16(3,3,25,0);/zPUTchar16x16(3,3,0); /高PUTchar16x16(3,4,1);/尚代码解析:通过PUTchar16x16(a,b,c)定义字符,通过改变a,b的数值来改变数据在LCD显示屏上的位置(a为X轴坐标,b为Y轴坐标)。改变C的排位。PUTword8x16(a,b,c,d)为定义字母,通过改变A,B 的数据来改变在LCD显示屏上的位置,通过改变C的数值来获取A-Z的26个英文字母字模并显示,改变D在决定数据的大小写,0为小写字母,1为大写字母。4.2.2 按键功能void UserTaskKEY(void *pParam)key_i=0;/把按键置0MyEventSem=OSSemCreate(0);/创建信号量,为了信号之间的通信做准备 while(1)OSTimeDly(wait1); /延时为1个时钟滴答if(!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_15)/按下按键来控制pin=15口OSSemPost(MyEventSem);代码解析:设置一个按键,用while语句设置一个时钟延时,if语句控制pin=15口。4.2.3 LED灯控制功能void UserTaskLED(void *pParam)key_mark=0;/设置key_mark变量err=0;/异常为0 OSTimeDly(wait1); /延时为1个时钟滴答while(1)/循环OSSemPend(MyEventSem,0,&err); /*电平翻转*/if(key_mark=0)/如果变量为0GPIO_SetBits(GPIOE, GPIO_Pin_4);/pin4,5口LED灯不亮GPIO_SetBits(GPIOE, GPIO_Pin_5);key_mark=1;/标志位elseGPIO_ResetBits(GPIOE, GPIO_Pin_4); /pin4,5口LED灯亮GPIO_ResetBits(GPIOE, GPIO_Pin_5); key_mark=0; /标志位代码解析:设置key mark变量,key mark为布尔量,通过电平的反转改变,用if语句判断key mark的值控制LED灯的亮灭。4.2.4 加速度传感功能void TaskMessageMPU(void *pParam) err=OS_ERR_NONE; scount=1; myMBox=OSMboxCreate(&scount);/创建邮箱 OSMboxPend(myMBox,0,&err); /请求消息,若不存在则堵塞 while(1) OSTimeDly(wait2);/ 延时1个时钟滴答scount=GetData(ACCEL_XOUT_H)/16384;/将X传感器的值存储到scount中OSMboxPost(myMBox,&scount);/将消息发送接收邮箱里scount=GetData(ACCEL_YOUT_H)/16384;OSMboxPost

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论