Ucos II 移植之二

                           Ucos II 移植之二

  我们已经知道移植UCos II,是需要修改三个文件:OS_CPU.HOS_CPU_C.COS_CPU_A.ASM

下面以移植到lPC2292上为例,理解下移植过程。

1.首先看OS_CPU.H这个文件

  下图是我项目中的OS_CPU.H文件,可以看到,它包括两部分的代码,第一部分是定义与编译器无关的数据类型,第二部分是与ARM7体系结构相关的定义。

  为什么要定义数据类型呢?

  因为不同的微处理器有不同的字长,所以μC/OS-Ⅱ的移植包括了一系列的类型定义以确保其可移植性。这也是第一部分程序的作用。

  程序用有这样的一句

  #define OS_STK_GROWTH    1         /*  堆栈是从上往下长的          */

  这一句程序有什么作用?

  它的作用是定义堆栈方向,绝大多数的微处理器和微控制器的堆栈是从上往下长的。但是某些处理器是用另外一种方式工作的。μC/OS-Ⅱ被设计成两种情况都可以处理,只要在结构常量OS_STK_GROWTH中指定堆栈的生长方式(如下所示)就可以了。置OS_STK_GROWTH0表示堆栈从下往上长。置OS_STK_GROWTH1表示堆栈从上往下长。

(2).其次看OS_CPU_C.C这个文件

 在这个文件里我们需要编写以下六个函数

OSTaskStkInit()     

//初始化任务堆栈结构

OSTaskCreateHook()

 //允许用户或使用用户的移植实例的用户扩展μC/OS-Ⅱ的功能

OSTaskDelHook() 

//该函数在把任务从μC/OS-Ⅱ的内部任务链表中解开之前被调用

OSTaskSwHook()  

//当发生任务切换的时候调用OSTaskSwHook()

OSTaskStatHook() 

//用户可以用OSTaskStatHook()来扩展统计功能

OSTimeTickHook()

 OSTaskTimeHook()在每个时钟节拍都会被OSTaskTick()调用

事实上,上面的六个函数只有OSTaskStkInit()是必须编写的,而其它的五个函数只需定义就可。

在我的项目里OS_CPU_C.C,也编写了OSTaskStkInit()这个函数。

3.最后看OS_CPU_A.ASM这个文件

   这个文件都是汇编,绝对可以让你看得醉生欲死,欲罢不能,你懂我的。

OS_CPU_A.ASM这个文件要求用户编写四个简单的汇编语言函数:

    OSStartHighRdy()

    OSCtxSw()

    OSIntCtxSw()

   // OSIntCtxSw()μC/OS-(μC/OS)中唯一的与编译器相关的函数

    OSTickISR()

  编写上面四个函数要求对cpu的工作原理有深入的理解。

  下图就是我项目中OSStartHighRdy()的实现代码。有空可以意会意会。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值