UCOSII移植STM32f103操作过程

UCOS操作系统是一款开源的小巧但强大的嵌入式操作系统,学习嵌入式的朋友都会接触到这款操作系统。

在使用过程中,我们做的必要的工作就是把它移植到自己所用的开发板上。下面我分享一下我通过在官网上下载UCOSII源码并且成果移植到STM32f103开发板上的过程。

(注:目前ucos的最新版本是ucosIII,读者可根据自己的需要进行移植,移植过程都差不多。)

首先,百度UCOS,就会看到官网链接,点击进去后,会看到download页签。点进去之后会看到源码下载链接,注意这里有两种,一种是ucos的源码,还有一种是ucos官方根据不同的平台所做的实例工程。我们需要的就是这个,但是下载需要进行邮箱注册,这一点很麻烦,不过我已经上传了,读者可以点链接下载:

下载完成后,根据需要建立工程目录。我刚开始移植的时候,看了很多网上的帖子,发现工程的建立五花八门,都把自己搞晕了。其实移植很简单。我们需要的代码文件只是uCOS-II文件夹下的Source和Ports文件。别的一概不要。其中,source文件夹中的是ucos的核心源码,Ports就是匹配STM32CPU的源码,而且改动的只有Ports里的代码。

我建立的工程目录如下:

UCOSII移植STM32f103操作过程_第1张图片

在这里需要说明的一点是,BSP是板级支持包,官方给的文件有绝大部分代码是是没用的,可以自己裁剪需要的部分,也可以自己写。主要功能就是实现开发板的时钟初始化。

下面是移植的重点:修改源代码。主要分以下步骤:

步骤一:将官方源码目录Software\EvalBoards\ST\STM3210E-EVAL\IAR\OS-Probe下的os_cfg.h和Includes.h文件复制到你的工程目录下,然后把所有文件的头文件路径包含到工程中,不会的去百度。

步骤二:让STM32库文件中的任务调度函数PendSVHandler和ucos的任务调度函数同名,并且注释掉stm32f10x_it.c里面的中断入口PendSVHandler。

打开stm32的启动文件startup_stm32f10x_hd.s,可以发现这个文件用汇编编写,包含了STM32的中断向量表中断入口。注意,这个文件尽量不要改,所以我们找到它里面的任务调度函数PendSVHandler,嗯,函数名叫它,然后再打开OS_CPU_A.ASM,这也是个汇编文件。我们找到他的任务调度函数,发现函数名是OS_CPU_PendSVHandler,好,把它改成PendSVHandler,别忘了,还有此文件头部它的声明也要改过来。

步骤三:该变部分os_cfg.h里的一些宏定义。

如下:UCOSII移植STM32f103操作过程_第2张图片

步骤四:其实这一步是最容易出错的地方。初始化ucos的心跳。我觉得这个地方不同的cpu有很大的不同,需要读者自己去探究。记住,初始化心跳必须在初始化操作系统之前完成。在os_cpu_c.c中有个函数是OS_CPU_SysTickInit(),他就是用来初始化操作系统心跳的,我们直接调用就行。在这之前,要初始化开发板的时钟过河晶振,这一点大家应该提前掌握。好了,一直到这里就算完成了,在引用应用文件中创建任务,就可以跑起来了,不过具体的过程大家还是动手练一练比较好。


你可能感兴趣的:(嵌入式)