基于STM32的μCOS_II移植实例(非常详细的移植过程)
- 格式:doc
- 大小:1.15 MB
- 文档页数:14
uC/OS_II在DSP芯片TMS320F281x上的移植一、uC/OS_II嵌入式实时系统简介uC/OS是一个多任务的实时性嵌入式操作系统,它的实时性内核源码是免费公开的,它同时提供了内存管理的接口和函数,因而uC/OS得到了广泛的应用。
uC/OS的绝大部分采用ANSI C写成,具有很强的移植性,uC/OS可以移植到大多数的8位,16位,32位甚至64位微处理器、微控制器及数字信号处理器上。
uC/OS正常运行需要处理器满足以下条件:1)处理器的C编译器能够产生可重入的代码;2)用C语言就可以打开或关闭中断;3)处理器支持中断,并能产生定时中断;4)处理器支持能够容纳一定数量的硬件堆栈;5)处理器具有将寄存器、堆栈指针读出和存储到堆栈中的指令。
[1]uC/OS移植的过程比较简单,只需用户根据移植目标硬件修改相应的数据类型定义,并用汇编语言编写几个函数,具体的步骤如下:1)根据处理器结构修改OS_CPU.H中的数据类型的定义;2)根据处理器堆栈结构在OS_CPU.H中定义堆栈增长方向;3)根据处理器指令在OS_CPU.H中定义三个宏;4)在OS_CPU.C中实现六个简单的函数,实际上只需修改一个,其它的无需改动;5)在OS_CPU.ASM中编写四个汇编语言函数;6)开发其它用户自定义功能,如文件系统管理任务,通信管理任务,AD 转换任务,PWM发生器管理任务等。
二、TMS320F281x系列数字信号处理器(DSP)简介TMS320F281x(以后简称F281x)是TI公司最新一代的2000系列32位定点DSP控制器,是目前控制领域最先进的处理器之一。
其频率高达150MHz,可以大大提高控制系统的控制精度和芯片的处理能力。
F28x系列芯片提供浮点数学函数库,可以实现浮点运算。
F2812集成了128KB的闪存,优化的事件管理器和可编程通用计数器,还包括了16通道的12位ADC转换器。
片上集成了SCI,SPI,McBSP,URAT及eCAN等标准通信接口。
stm32f103 ucos ii移植目录stm32f103 ucos ii移植 (1)1.1 ucOS源码获得 (1)1.2 移植步骤 (5)1.2.1 裸机工程准备 (5)1.2.2 复制相关ucos 移植文件 (5)1.2.3 添加ucos源码和移植cpu相关源码。
(6)1.2.4 添加ucos源码和移植cpu相关头文件路径 (14)1.2.5 编译纠错 (15)1.2.6 修改裸机的main()函数,实现ucos编程模板。
(22)1.2.7测试系统是否能正常工作。
(30)1.3附录相关源码工程 (31)1.1ucOS源码获得登陆ucos官方网站/,如下所示:点击网站上方的Login/Registration ,进行登陆或注册一个新帐号。
如果没有帐号要先注册一个,注册过程不再描述。
我已经有帐号,直接登陆。
Xin Ying Da Electronics Co., Ltd. 1 / 32ZHIFA CHENXin Ying Da Electronics Co., Ltd.2 / 32 ZHIFA CHEN点击后转入登陆界面,网址是/wp-login.php , 直接输入这个进行登陆也可以,界面如下:在这个界面中输入用户名和密码,点击Log In,即可以进入,登陆后可以下载网站上的免费资源。
Xin Ying Da Electronics Co., Ltd. 3 / 32ZHIFA CHEN点击上面的“Downloads Center ”,进入下载页面。
点击” STMicroelectronics ” ,进入ST 公司芯片的ucos 工程下载页面。
点击上面的下载图标后,可以下载到ucos 工程代码,名字是Micrium_STM32xxx_uCOS-II.exe ,这是一个自解Xin Ying Da Electronics Co., Ltd.4 / 32 ZHIFA CHEN压的文件,双击解压。
a COSII在STM32处理器上的移植目前,嵌入式技术已被广泛应用到汽车电子、无线通信、数码产品等各个领域。
嵌入式操作系统及嵌入式处理器技术发展迅猛,嵌入式操作系统典型代表有aCOS—II 、aClinux 、Winclow CE、VxWorks 等;嵌入式处理器包括ARM、MIPS PowerPC等。
随着软硬件技术的发展,人们开始意识到基于嵌入式操作系统的程序开发模式的便利性及可靠性,并且在程序开发过程中开始倾向于从传统超循环开发模式转向基于嵌入式操作系统的开发模式。
1软硬件开发环境及处理器介绍1.1 软件硬开发环境本移植过程使用的软件环境是RealView MDK开发套件,此产品是ARM公司最新推出的针对各种嵌入式处理器的软件开发工具,该开发套件功能强大,包括了aVision3 集成开发环境和RealView 编译器。
使用的硬件平台是深圳英蓓特公司推出的全功能评估板STMI03V100,其上所采用的处理器是ST意法半导体公司生产的32位哈佛结构ARM处理器STM32F1O3VBT0该处理器内置ARM公司最新的Cortex —M3核,并且具有非常丰富的片上资源。
1.2关于基于Cortex-M3的ARM处理器的介绍基于Cortex —M3核的ARM处理器支持两种模式,分别称为线程模式和处理模式。
程序可以在系统复位时或中断返回时两种情况下进入线程模式,而处理模式只能通过中断或异常的方式来进入。
处于线程模式中代码可以分别运行在特权方式下和非特权方式下。
处于处理模式中的代码总是运行在特权方式下。
运行在特权方式下的代码对系统资源具有完全访问权,而运行在非特权方式下的代码对系统资源的访问权受到一定限制。
处理器可以运行在Thumb 状态或Debug状态。
在指令流正常执行期间,处理器处于Thumb状态。
当进行程序调试时,指令流可以暂停执行,这时处理器处于Debug状态。
处理器有两个独立的堆栈指针,分别称为MSF和PSP系统复位时总是处于线程模式的特权方式下,并且默认使用的堆栈指针是MSP本移植过程中假设任务总是运行在线程模式的特权方式下且总是使用堆栈指针PSP 2移植过程详解2.1 aCOS-II 内核介绍aCOS—II 是一个实时可剥夺型操作系统内核,该操作系统支持最多64 个任务,但每个任务的优先级必须互不相同,优先级号小的任务比优先级号大的任务具有更高的优先级,并且该操作系统总是调度优先级最高的就绪态任务运行。
基于STM32的u/COS-II系统移植【摘要】本文硬件平台采用ARM公司基于ARMV7架构的Cortex-M3系列处理器STM32F103,利用安富来公司现有的开发板,移植一个基于u/COS-II操作系统的应用程序框架(系统移植);创建多个任务,并通过使用消息邮箱进行两个任务之间的通信。
本文重点是把u/COS-II系统移植到程序中来,进而把各个基本功能模块化,并划分为几个主任务,以便实现嵌入式系统的操作。
【关键字】u/COS-II STM32 系统移植消息邮箱串口通信【引言】随着人类社会经济的不断发展,科研领域不断的拓宽,嵌入式系统产品渐渐完善,并在全世界各行业得到广泛应用。
通过移植嵌入式操作系统,计算机可以更好地管理内存,并且在很大程度上提高系统的实时性。
本设计通过在STM32上移植u/COS-II操作系统,实现了流水灯闪烁,使用消息邮箱实现多任务间的通信,并通过串口将信息打印到PC终端等功能。
加深了笔者对嵌入式操作系统的理解。
【正文】1 U/COS-II的简介U/COS-II的前身是UCOS,最早出自于1992年美国嵌入式系统专家Jean brosse在《嵌入式系统编程》杂志的5月和6月刊上刊登的文章连载,并把UCOS的源码发布在该杂志的BBS上。
目前最新的版本:U/COS-lll已经出来,但是现在使用最为广泛的还是U/COS-II,本章我们主要针对U/COS-II进行介绍。
U/COS-II是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。
为了提供最好的移植性能,U/COS-II最大程度上使用ANSI C语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。
U/COS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。
1、μCOS-II操作系统与内核分析1.1实时系统μCOS-II的分析μCOS-II,作为一个优秀的实时系统,不仅代码短小精悍,在实时性方面也非常优秀。
μCOS-II的各种服务都以任务的形式来出现的。
在μCOS-II中,每个任务都有一个唯一的优先级。
它是基于优先级的可剥夺内核,适用应用在对实时性要求较高的场合。
基于任务是μCOS-II内核的基础,我们首先来分析它的任务的结构,然后在分析μCOS-II对任务的管理和任务间的通信,最后简要谈谈μCOS-II对内存的管理。
1.2 μCOS-II的任务结构1.2.1 μCOS-II的任务μCOS-II的核心部分就是它的任务,它也是通过任务来对不同事件进行响应和处理的,从代码上看,μCOS-II的任务一般为如下的形式:void uCOSTsak(void *p){While(1){任务;}}1.2.2 任务的存储结构和状态μCOS-II的任务从内存中来看由三个部分组成,任务的代码部分,任务堆栈和任务控制块。
其中任务控制块保存任务的属性;任务堆栈在任务进行切换时保存任务运行的环境;代码任务部分就是在宏观上看到的C代码。
任务就是在以这样的块的形式存储在内存中的。
所有的任务的一个链表,每一个节点都由一个这样的结构组成。
嵌入式设备中一般都只有一个微处理器,所以在某一具体的时刻只能有一个任务占用处理器。
μCOS-II的任务一共有5种状态:睡眠、就绪、运行、等待和中断服务。
现在介绍任务的每个状态的详细情况:睡眠状态:任务仅仅以代码的形式驻留在程序存储器中,没有分配任务控制块或者任务控制块被删除。
因此操作系统还没有管理这个任务。
就绪状态:任务已经分配到了任务控制块并且具备了运行的条件,在就绪表中已经登记,等待运行的状态。
运行状态:就绪的任务获得了微处理器的使用权就立即进入运行状态,此时该任务占有微处理的使用权。
等待状态:正在运行的任务,由于需要等待一段时间或者等待某个条件的满足,需要让出微处理器的使用权。
STM32上⾯运⾏UCOSII的步骤1、移植 UCOSII要想 UCOSII 在 STM32 正常运⾏,当然⾸先是需要移植 UCOSII。
ALIENTEK 提供的 SYSTEM ⽂件夹⾥⾯的系统函数直接⽀持 UCOSII,只需要在 sys.h ⽂件⾥⾯将: SYSTEM_SUPPORT_UCOS 宏定义改为 1,即可通过 delay_init 函数初始化 UCOSII 的系统时钟节拍,为 UCOSII 提供时钟节拍。
2、编写任务函数并设置其堆栈⼤⼩和优先级等参数。
编写任务函数,以便 UCOSII 调⽤;设置函数堆栈⼤⼩,这个需要根据函数的需求来设置;堆栈字节对齐的问题,如果任务运⾏出现莫名其妙的错误(⽐如⽤到 sprintf 出错),请考虑是不是字节对齐的问题。
设置任务优先级,这个需要⼤家根据任务的重要性和实时性设置,记住⾼优先级的任务有优先使⽤ CPU 的权利。
3、初始化 UCOSII,并在 UCOSII 中创建任务调⽤ OSInit,初始化 UCOSII,通过调⽤ OSTaskCreate 函数创建我们的任务。
4、启动 UCOSII调⽤ OSStart,启动 UCOSII。
通过以上 4 个步骤, UCOSII 就开始在 STM32 上⾯运⾏了,这⾥还需要注意我们必须对os_cfg.h 进⾏部分配置,以满⾜我们⾃⼰的需要。
软件设计1、在⼯程源码下⾯加⼊ UCOSII ⽂件夹,存放 UCOSII源码(我们已经将 UCOSII源码分为三个⽂件夹:CORE、PORT和 CONFIG)。
打开⼯程,新建 UCOSII-CORE、 UCOSII-PORT 和 UCOSII-CONFIG 三个分组,分别添加UCOSII 三个⽂件夹下的源码,并将这三个⽂件夹加⼊头⽂件包含路径:UCOSII-CORE 分组下⾯是 UCOSII 的核⼼源码,我们不需要做任何变动。
UCOSII-PORT 分组下⾯是我们移植 UCOSII 要修改的 3 个代码,这个在移植的时候完成。
STM32F407在IAR环境下移植Ucos-II第一步:安装IAR for ARM。
第二步:建一个文件夹,最好用工程名命名。
第三步:在新建的文件夹下面建7个文件夹,分别是:app、bsp、libraries、Project、si、ucos-ii、user,建好的文件夹见下图(图一):图 1第四步:准备好STM32F4XX的固件库。
见图二、图三:图 2图 3第五步:准备好uCOS-II源码。
我的源码路径为:E:\项目文件\电阻焊控制器V2\参考资料\ucos源码\Micrium\Software\uCOS-II;见图4、图5、图6、图7、图8:图 4图 5图 6图7图8第六步:将第四步中准备好的stm32固件库里libraries下的文件拷贝到工程文件夹下的libraries文件夹里。
第七步:将第五步中准备好的uCOS-II源码文件夹里的Ucos-II文件夹中的ports、source两个文件夹拷贝到工程文件夹下的ucos-ii文件夹中。
图9第八步:打开IAR,file—new—workspace先建一个工作空间。
第九步:建立一个工程,project—create new project,在工程文件管理器中新建组,右键单击工程名—add—add group,并给每个组添加相应的文件(右键单击工程名—add—add file);添加好文件的窗口如下图:图10第10步:IAR配置,右键单击工程名—options,跳出如下图所示窗口:图111、在General Options项中的Device中选择芯片,其他项默认值OK;2、在library configuration页中的library选择Full,否则会编译会保错,将右下角的Use CMSIS勾上。
其他项保持默认值。
图123、在C/C++ Compiler项中的Preprocessor也中添加头文件路径($PROJ_DIR$\表示工程路径,$PROJ_DIR$\..\是工程路径的父目录),并添加宏定义(USE_STDPERIPH_DRIVER、STM32F10X_HD),添加好的窗口见下图:图134、在Linker项中的cofig页中☑Override default。
基于Keil移植Ucosii到STM32F103RC中一、资源准备1.STM32F10x标准库:STM32F10x_StdPeriph_Lib_V3.5.02.Ucosii源码库:2.86版本3.开发工具:Keil4.STM32F103RC芯片开发板。
二、STM32F10x标准库移植1.建立工程文件夹STM32F10x_Ucosii_Keil2.建立子文件夹:CMSIS、STM32F10x_StdPeriph_Driver、Ucosii、Project。
如下:3.将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h三个文件拷贝到CMSIS文件夹;4.将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm中的startup_stm32f10x_hd.s文件拷贝到CMSIS文件夹;5.将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template中的main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h三个文件拷贝到User文件夹;6.将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver中的文件夹及其文件全部拷贝到STM32F10x_StdPeriph_Driver中。
三、Ucosii源代码移植1.在Ucosii文件夹下建立子文件夹ports、source。
2.将Micrium\Software\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealView中的os_cpu.h、os_cpu_a.asm、os_cpu_c.c、os_dbg.c四个文件拷贝到Ucosii\ports文件夹中。
基于STM32的μC/OS_II移植实例目录第一章μC/OS_II移植准备工作 (2)1.1 硬件平台 (2)1.2 软件平台 (2)第二章μC/OS_II移植步骤 (3)2.1 文件结构 (3)2.2 μC/OS_II文件移植 (4)2.3 MDK中导入μC/OS_II文件 (4)2.4 需要修改的代码 (7)第三章μC/OS_II多任务以及任务间通信的实现 (9)3.1 μC/OS_II任务的创建 (9)3.2 事件标志组的创建 (11)第四章μC/OS_II移植测试 (13)4.1 μC/OS_II多任务的测试 (13)4.2 任务间通信的测试 (14)第一章μC/OS_II移植准备工作以武陵源车载系统终端为背景,探讨基于STM32的μC/OS嵌入式系统移植方法。
武陵源车载终端的基本功能是GPS数据的接收、站点和弯道的识别、超速报警、GPRS数据上传等。
本文重点是把μC/OS移植到程序中来,其次把各个基本功能模块化并划分为几个主任务,以便实现嵌入式系统的操作。
1.1 硬件平台硬件平台是ARM公司基于ARMv7架构的Cortex-M3系列处理器STM32F103T8。
此处理器执行Thumb-2指令的32位哈佛微体系结构和系统外设,包括Nested Vec-tored Interrupt Controller和Arbiter总线。
它整合了多种技术,减少内存的使用,极小的RISC内核有着低功耗和高性能的特点。
新的单线调试技术,避免使用多引脚进行JTAG调试,并全面支持RealView编译器和RealView调试产品。
GPS模块为Fastrax IT500,它是一款能适用于非常苛刻的应用场合,有着高性能的导航,即使在GPS卫星可见度较恶劣的环境下也能实现稳定定位。
IT500有着领先的冷启动灵敏度(-148dBm)和领先的导航灵敏度(-165dBm),定位率可以根据客户的要求设置到最高10Hz,非常适合高动态的应用。
GSM模块为G600,它有着功耗低、体积小、便携式的特点。
休眠模式下功耗仅为1.6mA,采用两边SMT邮票口封装,支持全球通用的850/900/1800/1900MHz四频段,内置TCP/IP 协议栈,符合工业级要求,可适应高温高湿、电磁干扰等恶劣的工作环境。
1.2 软件平台软件平台为RVMDK软件。
RVMDK是由ARM编译器RVCT与Keil的工程管理、调试仿真工具集成,RVMDK是业界最好的Cortex-M3开发工具之一,它拥有流畅的用户界面与强大的仿真功能,是一款非常强大的ARM微控制器开发工具。
移植前需要熟悉RVMDK软件的使用。
移植过程中需要用到如图1.1所示文件,一个是武陵源车载系统终端程序,另一个是基于STM32的μC/OS_II移植文件。
图1.1 μC/OS_II移植需要的文件夹第二章 μC/OS_II 移植步骤μC/OS_II 的移植方法可以从三方面着手,首先分清武陵源车载系统终端文件和μC/OS_II 移植文件层次结构;其次掌握μC/OS_II 文件的移植过程以及在MDK 软件中如何导入工程文件的过程;最后明确μC/OS_II 运行尚需添加的代码。
2.1 文件结构武陵源车载系统终端程序主文件夹如图2.1所示,文件夹中包含了整个工程项目文件。
主文件夹中包含了如图2.2所示的四个文件夹。
输出文件夹中是MDK 软件编译时生成的临时文件;Project 文件夹中主要包含MDK 工程的启动文件;Libraries 文件夹包含了STM32芯片及外设的源文件;MyCode 文件夹中包含用户编写的文件。
Libraries 文件夹中包含了如图2.3所示的二个文件夹。
CMSIS 文件夹主要包含STM32芯片内核启动文件;STM32F10x_StdPeriph_Driver 文件夹包含了STM32内部及外围器件的驱动文件。
基于STM32的μC/OS_II 移植文件夹如图2.4所示,文件夹中包含了整个μC/OS_II 内核和通信协议文件。
μC/OS_II 文件中包含了如图2.5所示的四个文件夹。
Ports 文件夹包含了μC/OS_II 的接口文件;uC-CPU 文件夹包含了关于CPU 的驱动文件;User 文件夹中是用户对μC/OS_II 初始化配置文件;Source 文件夹包含μC/OS_II 主要源文件。
图2.2 主文件夹中所包含的文件图2.3 Libraries 文件夹图2.4 μC/OS_II 移植文件夹图2.5 μC/OS_II 文件夹中所包含的文件图2.1 武陵源车载终端程序文件夹2.2 μC/OS_II 文件移植首先,在武陵源车载系统终端程序主文件夹新建一个如图2.6所示的μC/OS_II 文件夹,然后将Port 、Source 、uC-CPU 三个文件夹复制到μC/OS_II 文件夹中,将User 文件夹中的三个头文件复制到MyCode 文件夹中,其复制过程如图2.7、图2.8、图2.9所示。
2.3 MDK 中导入μC/OS_II 文件首先,打开MDK 工程,进入文件添加界面,新建μC/OS_II /Port 、μC/OS_II /Source 二个文件夹,新建文件夹结果如图2.10所示。
其次,将刚刚移植过来的文件分类添加到各个工程文件夹中。
图2.6 车载系统终端程序主文件夹图2.7 μC/OS_II 文件夹中需移植的文件图2.9 MyCode 文件夹中的文件图2.8 User 文件夹中所包含的文件图2.10 MDK 中新建文件夹μC/OS_II /Source 文件夹中添加如图2.11所示文件。
μC/OS_II /Source 文件夹中添加的文件结果如图2. 12所示。
μC/OS_II /Port 文件夹中依次添加如图2.13、图2.14所示文件。
μC/OS_II /Port 文件夹中添加的文件结果如图2.15所示。
图2.11 Source 文件夹中需添加的文件图2.12 μC/OS_II/Source 中添加后的文件图2.13 Port 文件夹中需添加的文件图2.14 uC-CPU 文件夹中需添加的文件MyCode 文件夹中添加图2.16所示文件。
MyCode 文件夹中添加的文件结果如图2.17所示。
图2.15 μC/OS_II/Port 中添加后的文件图2.16 MyCode 文件夹中需添加的文件图2.17 Ping 命令测试结果μC/OS_II 移植文件全部添加到MDK 工程文件夹中后,其MDK 工程文件夹结构如图2.18所示,再点击全部保存后,μC/OS_II 移植文件就全部导入到MDK 工程文件夹中来了。
μC/OS_II 移植文件全部导入到MDK 工程文件夹之后,最后,还需把μC/OS_II 移植文件所用到的头文件的路径添加到工程中来。
其添加的头文件路径过程如图2.19所示。
到这一步已经完成了μC/OS_II 文件的导入,下面只需编译一下,检查文件的导入是否正常。
其编译结果如图2.20所示,零错误和零警告提示,表明编译通过。
2.4 需要修改的代码第一处:μC/OS_II 任务切换是通过STM32中的软中断实现的,需要将STM32中的软中断名修改成与μC/OS_II 软中断函数名一致。
其修改过程如图2.21、图2.22所示。
图2.18 MDK 工程文件结构图2.19 MDK 中需添加的头文件路径图2.20 MDK 编译结果图2.21 软中断名的修改图2.26 MDK 编译结果第二处:μC/OS_II 任务切换是以STM32中的SysTick 作为时间基准,需要编写如图2.23、图2.24所示的SysTick_Handler()函数和SysTick 初始化函数。
第三处:用户可以根据实际情况修改任务切换的时间,其修该位置为如图2.25所示红框中的数值,10表示任务切换的时间间隔为1000/10ms 。
到这一步,程序中需要修改的部分基本上完成。
最后,把工程编译一下,检查一下程序修改是否有错。
其编译结果如图2.26所示,零错误、零警告提示,表明程序修改无误。
图2.22 软中断名的修改图2.25 任务切换的时间设置图2.23 SysTick 中断函数图2.24 SysTick 初始化函数第三章 μC/OS_II 多任务以及任务间通信的实现在完成μC/OS 移植之后,μC/OS 还不能正常的运行起来。
μC/OS 系统中还需创建用户任务并且把任务添加到μC/OS 系统中的任务列表中来。
任务之间可能还需要进行必要的通信,则需要创建信号量、消息邮箱、消息队列等以实现任务间的通信。
3.1 μC/OS_II 任务的创建新建一个App 文件如图3.1所示,用于用户程序的编写。
μC/OS 任务的创建可以分三步完成。
第一步:编写一个起始任务函数和两个用户任务函数。
起始任务函数用于创建用户任务,一个用户任务函数用于GPS 数据处理,另一个用户任务函数用于GPRS 数据的处理。
其结果如图3.2、图3.3、图3.4所示。
第二步:定义三个任务堆栈及堆栈空间大小和任务优先级,定义结果如图3.5、图3.6、图3.7所示。
图3.3 GPS 任务函数图3.2 起始任务函数图3.4 GPRS 任务函数图3.1 App 文件的创建第三步:先将创建的起始任务添加到μC/OS 操作系统中的的任务列表中去,然后再在起始任务函数中把两个用户任务添加到μC/OS 操作系统中的的任务列表中去。
其添加结果如图3.8、图3.9所示。
图3.9 用户任务的添加图3.5 任务优先级定义图3.6 任务堆栈空间大小定义图3.7 任务堆栈的定义图3.8 起始任务的添加3.2 事件标志组的创建事件标志组用于串口中断与GPS 任务之间通信,即串口接收完一组数据之后,通过发送事件标志位通知GPS 任务一组GPS 数据接收完了。
由于此项目中只用到了事件标志组,所以,可能不会提及信号量、消息邮箱、消息队列的使用,不过其应用的方法同事件标志组相似。
事件标志组的应用可以通过三步来实现。
第一步:定义一个事件标志组指针并在主函数中创建一个事件标志组,其结果如图3.10、图3.11所示。
第二步:在串口中断中调用事件标志组发送函数,如图3.12所示。
调用事件标志组发送函数需在文件前包含μC/OS 头文件和事件标志组指针的申明,如图3.13所示。
图3.11 事件标志组的创建图3.12 事件标志组的发送图3.10 事件标志组指针的定义第三步:在GPS 任务中调用事件标志组等待函数,如果有事件到来就会继续往下执行,否则一直等到事件的到来。
事件的等待时间是可以设置的,如果超过了等待的时间,函数将返回超时错误信息,然后程序继续往下执行。
调用事件标志组等待函数需在文件前包含μC/OS 头文件和事件标志组指针的申明。