NXP

基于freescale K60硬件平台的ucos-ii的移植

2019-07-12 12:04发布

一 概述

嵌入式操作系统应用之广泛,让我们的电子世界变得更加丰富多彩,没有研究过嵌入式操作系统,不足以号称为嵌入式软件工程师,本篇文章就详细描述了如何移植ucos的过程。最近几天,在网上搜了很多资料,但是总感觉不是自己想要的。或许大家对嵌入式操作系统的认识水平不在一个level上,在这里不是想说网上资料文章的水平,只是因为大家处于不同的阶段,写文章的侧重点不一样。本篇文章,就是详细描述了如何将ucos-ii移植到freescale的k60硬件平台上

二 移植准备

去官网下载软件包,下载时都需要帐号登录,建议大家用邮箱在官网上注册一个帐号1. 去NXP官网下载k60软件开发包:SDK_2.2_TWR-K60D100M,下载地址:https://mcuxpresso.nxp.com/en/welcome2. 去ucos官网下载ucos-ii的sdk:https://www.micrium.com/

三 移植过程详解

1. 调试一个正确的裸机程序,因为在freescale官网下载的sdk,是基于freescale官方开发板twrk60的,这个开发板不一定和我们的硬件平台原理图一样,所以我们需要基于我们的硬件平台调试出一个正确的裸机程序,可以是一个简单的LED闪烁实验。2.移植官方ucos到我们的裸机程序上,因为官方的ucos-ii实在是一个庞大且完善的操作系统,正常情况我们是用不了那么多功能的,所以我们不需要将所有的官方ucos的sdk移植过来,只需要其中的一部分。如下图所示,我们需要Micrium_TWR-K60N512_OS2MicriumSoftwareuCOS-II这个路径下面的所有文件夹内容,也就是source和port文件夹内容,这两个文件加是我们移植过程中最最重要的内容,图中所示Your Application中的APP.C,OS_CFG.H和INCLUDE.h来源于Micrium_TWR-K60N512_OS2MicriumExamplesFreescaleTWR-K60N512OS2,而APP_VECT.C和APP_CFG.H是都不需要的。可以不用拷贝过来3. 工程结构APP文件夹就是用来存放APP.C,OS_CFG.H和INCLUDE.hUCOS-II就是用来存放source和portBSP用来存放配置我自己的k60硬件平台的底层配置接下来就是移植的关键步骤了,我们需要修改官方启动文件(如果不知道什么是启动文件,请自行查阅资料)。这里简单的分析2个问题,一是,什么叫移植,二是移植的操作系统如何能够被我们的工程所应用。所谓移植,打一个恰当的比喻——器官移植,就是将A的器官移植到B身上,使A的器官能够为B所用。所以移植绝对不是简单的“复制”,不仅要放到你的工程项目中,更重要的是要能够和你的项目建立联系。那么uCOS-ii怎么跟k60建立联系呢?uCOS-ii的核心作用就是任务调度,要使用K60的一个特殊中断——PendSV,就是可挂起系统任务中断,通过该中断进行系统的调度。还有就是uCOS-ii需要一个基准时间,那么K60中有一个专用的定时器,嘀嗒定时器SysTick(这个定时器在同一种ARM内核中都是一样的操作使用方式,它不属于K60的外设资源,它是ARM内核所拥有的资源),通过这个滴答定时器给uCOS-ii提供一个时间基准,每隔固定的时间出发一个PendSV中断,进行任务的调度。所以呢,在官方案例的移植文档AN-1018中也特别提到这一点,要将启动代码中所有PendSV_Handler”和“SysTick_Handler”(因为在freescale官方提供的sdk中,启动文件中的这两个中断ISR是叫这个名字),替换成“OS_CPU_PendSVHandler”和“OS_CPU_SysTickHandler”(在ucos官方对的sdk中,这俩个中断服务ISR是叫这个名字,我们必须保证这两处名字的一致,这样两者在调用过程中才不会找不到相应的ISR入口,当然也可以都用freescale官方提供的sdk中的中断ISR名字替代ucos中的名字),这样就相当于将uCOS-ii的“神经”跟你的项目的“神经”搭在了一起。移植完成之后,我们就可以在app.c中创建我们的任务task了,我们可以参照官方app.c中的内容来创建4. 结束语为什么选用freescale的官方sdk包?因为官方包的驱动等都是完善的,而且各种被包含的文件路劲都已经添加完成,对于初学者,如果自行添加各种头文件,尤其当用到部分官方提供的driver文件时,会发现各种提示头文件缺失,用了官方sdk包之后,就省去了这个麻烦。