uCOS-II移植(Freescale MPC5644A)

来源:互联网 发布:linux解压jar 编辑:程序博客网 时间:2024/05/22 04:51

                             uCOS-II移植(Freescale  MPC5644A)


1、从官网上下载源码:点击打开链接

如果官网上有对应芯片移植好的源码,那么拿过来略微改动就可以用。


32位的MPC5644A支持两种汇编指令集--BookE(32位)和VLE(可变指令集,32位&16位),所以在新建工程或者导入工程时要统一选择其中的一种。

下载解压后会有这么一个文件夹,内部文件结构如下:

Micrium
{
    EvalBoards
    {
         BSP       --> Board Support Package 板级相关,(系统时钟,LED。。。)
         uCOS-II    --> 应用程序(main在这里)& uC-II的配置(os_cfg.h)
    }
    uC-CPU  -->  芯片的CPU相关移植代码
    uC-LIB    --> micrium官网的一个库代码
    uCOS-II
    {
        Ports   -->移植主要需要改动或者自己写的几个文件(os_dbg.c 可以忽略)
        Source -->uC-II源代码
    }
}


MPC5644A内部有一个e200的核,uC-CPU的部分也是针对这个核的相关代码,主要用到了内部减数器,来完成系统的OSTickISR周期调用。


2、Import

找到,详细介绍了如何将下载的工程导入CodeWarrior 10.x
导入后需要将BSP中板级相关的函数替换成自己板子的函数(可能还需要添加一些文件路径),这个时候操作系统就可以跑起来了!
下附一张CW10.6移植后的截图:



3、不那么简单的情况:

有的时候或许没有那么幸运,直接就可以下载到所需芯片(系列)已经移植好的工程;或者官网提供的工程与你所用的编译器不同(我就是这种情况),你无法import。这时就需要自己新建一个工程,自己来做一次移植。

第一种情况多数需要自己完成(或者是找相近的参考)Ports内部的几个文件,可以参考邵贝贝写的那本书中uC-II的移植那一章。

下面我们来说第二种情况:
官网提供的工程针对10.x编译器直接就可以用,而因为一些原因我必须使用CodeWarrior 2.8编译器,我先是在10.6上成功移植后,确认代码没有问题了,再在2.8上新建工程,一步步移植。

新建一个工程(指令集这里我选的BookE,中断选择的硬件中断!)
将uCOS-II的代码加载进来(这里我们不考虑需要自己写汇编的情况)
新建工程后在系统生成的Source文件夹下是没有ivor_branch_table.c的,需要手动添加进来,branch_table中用到了3个和系统相关的函数,这里直接替换并在上面extern



这里只是你的函数和branch_table建立了关系,还需要对应到Exceptions中(如果你新建工程时没有生成ivor_branch_table.c,很大可能你的Exceptions.c需要修改):
                              修改前:                                                   修改后:  
           

目录截图:



uCOS-II中系统的延时函数OSTimeDly(num)是通过周期调用OSTickISR实现的。先将减数器给定一个初始值(1个tick)后使能,在每一次减数器减到0时会产生一个Exception,也就会去执行branch_table中减数器的异常函数。
在Task中调用OSTimeDly(tick_num)时,会将当前任务挂起,当前任务让出CPU,在每次系统心跳中将挂起任务的时间tick_num--,减为0时则任务恢复,产生一次调度,根据优先级去选择要执行的任务。










1 0
原创粉丝点击