前后台系统和RTOS系统
前后台系统
早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。通常把程序分为两部分:前台系统和后台系统。
简单的小系统通常是前后台系统,这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API函数完成所需的操作,这个大循环就叫做后台系统。中断服务程序用于处理系统的异步事件,也就是前台系统。
前台是中断级,后台是任务级。
RTOS系统
RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性。实时操作系统又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作 ,硬实时系统不允许超时,在软实时里面处理过程超时的后果就没有那么严格。
在实时操作系统中,我们可以把要实现的功能划分为多个任务,每个任务负责实现其中的一部分,每个任务都是一个很简单的程序,通常是一个死循环。
RTOS操作系统:UCOS,FreeRTOS,RTX,RT-Thread,DJYOS等。
RTOS操作系统的核心内容在于:实时内核。
可剥夺型内核
RTOS的内核负责管理所有的任务,内核决定了运行哪个任务,何时停止当前任务切换到其他任务,这个是内核的多任务管理能力。多任务管理给人的感觉就好像芯片有多个CPU,多任务管理实现了CPU资源的最大化利用,多任务管理有助于实现程序的模块化开发,能够实现复杂的实时应用。
UCOS的内核是可剥夺型的,所谓可剥夺内核:顾名思义就是可以剥夺其他任务的CPU使用权,它总是运行就绪任务中的优先级最高的那个任务。
UCOS系统简介
UCOS是Micrium公司出品的RTOS类实时操作系统,UCOS目前有两个版本:UCOSII和UCOSIII。
UCOSIII是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制。UCOSIII提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。
UCOSIII是用C和汇编来写的,其中绝大部分都是用C语言编写的,只有极少数的与处理器密切相关的部分代码才是用汇编写的,UCOSIII结构简洁,可读性很强!最主要的是非常适合初次接触嵌入式实时操作系统学生、嵌入式系统开发人员和爱好者学习。
UCOSIII移植
向工程中添加相应的文件
在工程目录中新建一个UCOSIII文件夹,然后将我们下载的Micrium官方移植工程中的uC-CPU、uC-LIB和UCOS-III这三个文件复制到工程中(目录:UCOSIII官方STM32F107移植MicriumSoftware)。
同时,还需要在UCOIII文件中再新建两个文件:UCOS_BSP和UCOS_CONFIG。如下图所示:
向UCOS_CONFIG添加文件
复制Micrium官方移植好的工程中的相关文件到UCOS_CONFIG文件夹下,这些文件下图所示,这些文件在Micrium官方的STM32F107移植工程中的路径为:Micrium-》Software-》EvalBoards-》Micrium-》uC-Eval-STM32F107-》uCOS-III。
向UCOS_BSP添加文件
同样复制Micrium官方移植好的工程中的相关文件到UCOS_BSP文件下,需要复制的文件如下图所示,这些文件在Micrium官方移植工程中的路径为:Micrium-》Software-》EvalBoards-》Micrium-》uC-Eval-STM32F107-》BSP。
向工程中添加分组
我们在上面已经准备好了所需的文件,我们还要将这些文件添加到我们的工程中,我们在KEIL工程中新建如下图所示的分组:
工程中分组建立完成以后我们就需要向新建的各个分组中添加文件了,按照如下图所示向各个分组中添加文件:
向各个分组添加完文件以后我们还需要添加相应的头文件路径,按照下图所示添加头文件路径:
修改bsp.c和bsp.h文件
打开bsp.c文件,里面有很多的代码我们只需要其中的很少一部分关于DWT的代码,可以直接使用“例4-1 UCOSIII移植”实验中的bsp.c文件。
修改os_cpu_a.asm文件
可以直接使用“例4-1 UCOSIII移植”实验中的os_cpu_a.asm文件。
修改os_cpu_c.c文件
修改os_cfg_app.h
os_cfg_app.h主要是对UCOSIII内部一些系统任务的配置,如任务优先级、任务堆栈、UCOSIII的系统时钟节拍等等。
修改sys.h文件
修改sys.h文件中宏定义SYSTEM_SUPPORT_UCOS,我们将其定义为1,定义系统文件夹支持UCOS。
UCOSIII体系结构
应用程序;
半导体厂商提供的库函数;
板级支持包,底层驱动;
UCOSIII源码,与CPU无关;
这部分在移植UCOSIII的时候要根据所使用的CPU架构来编写;
讲与CPU相关功能代码封装起来;
UCOSIII官方提供的一系列通用函数的源文件,一部分函数用于替代stdlib库中的函数;
配置文件。