移植ucos II 到一个芯片上,只需要修改下面三个文件:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。

具体来说,移植主要包括以下几项内容

(1).OS_CPU.H :用#define设置一些常量的值,声明10个数据类型,用#define声明三个宏。

(2).OS_CPU_C.C : 用C语言编写六个简单的函数。

(3).OS_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_GROWTH为0表示堆栈从下往上长。置OS_STK_GROWTH为1表示堆栈从上往下长。

(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的工作原理有深入的理解。

ucosII移植的更多相关文章

  1. 基于STM32的uCOS-II移植详解

    百度:基于STM32的uCOS-II移植详解 源:基于STM32的uCOS-II移植详解

  2. 基于IAR和STM32的uCOS-II移植

    网上基于MDK的移植数不胜数,但是基于IAR的移植几乎没有,因为官方的例程就是基于IAR的,所以移植起来很简单,没人介绍,但还是得小心谨慎,一不小心就出错,对于新手来说,查找错误可不是那么容易的.IA ...

  3. KEIL MDK环境下uCOS-II在LPC17xx上的移植实例

    1. 知识准备 要想对ucos-ii的移植有较深的理解,需要两方面知识: (1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的ucos-ii移 ...

  4. UCOSII在STM32F1上的移植

    UCOSII在STM32F1上的移植 首先准备好一份STM32F1的工程.UCOSII源码. 在准备好的工程中新建一个"UCOSII"文件夹(或者取其它名字也行): UCOSII文 ...

  5. UCOSII在STM32F407上的移植

    1.ucosii移植准备工作 1.1准备基础工程: 移植的时候需要一个基础工程,为了方便起见我们就选取跑马灯实验,作为ucossii移植的基础工程. 1.2Ucossii源码: 1)Micrium官网 ...

  6. ANSIC程序到KeilC51的移植心得

    摘要:本文讲述了将ANSIC程序移植到KeilC51上应该注意的事项.文章讲述了存储类型.指针类型.重入函数.根据目标系统RAM的分布的段定位和仿真栈设置.函数指针.NULL指针问题.字节顺序.交叉汇 ...

  7. STM32各个文件介绍、uCOSII文件介绍

    (1)core_cm3.c , core_cm.h:获取设置CM3内核,配置一些内核寄存器,用到CM3核的都需要: (2)stm32f10x.h 和 system_stm32f10x.c , syst ...

  8. UCOSii和Linux的区别和联系

    UCOSii和Linux的区别和联系 想通过UCOSii来理解Linux的系统架构,故参考一些资料,简单整理了一下UCOSii和Linux的区别和联系,以此来更好的学习Linux. 其具体对比如下: ...

  9. 怎样把UCos-ii_在STM32上的移植

    下载代码 stm32 标准外设库是 stm32 全系列芯片的外设驱动,有了它能够大大加速我们 开发 stm32. 首先从 st 公司的站点下载最新的 stm32 标准外设库,写本文时最新的版本号是 V ...

随机推荐

  1. rdtsc获取时间统计程序的运行效率

    __u64 rdtsc() {         __u32 lo,hi;           __asm__ __volatile__         (          "rdtsc&q ...

  2. 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8组件结构全解析

    转自: http://blog.csdn.net/poem_qianmo/article/details/19925819 本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:ht ...

  3. BZOJ 1008: [HNOI2008]越狱 快速幂

    1008: [HNOI2008]越狱 Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生 ...

  4. 关于vmware下复制linux系统虚拟机后eth0变成eth1问题解决

    在vmware虚拟机中,当我们克隆或者复制linux系统虚拟机后,再启动系统时会发现系统下不再有eth0,而变成了eth1 当我们使用/etc/init.d/network restart重启网络时, ...

  5. lintcode: 最小调整代价

    题目 最小调整代价 给一个整数数组,调整每个数的大小,使得相邻的两个数的差小于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少. 样例 对于数组,最小的调整 ...

  6. java多线程知识点总结

    1.线程调度知识:线程类Thread的了解,几个thread的方法.thread.sleep(),thread.join().(调用join方法的那个线程会立刻执行). object.wait()方法 ...

  7. Spring之在客户端访问RESTful业务

    Spring之在客户端访问RESTful业务 RestTemplate 是客户端访问RESTful业务的核心类.在概念上与Spring其他的模板类相似,比如JdbcTemplate和JmsTempla ...

  8. CentOS软件安装目录查找

    注:一般的软件的默认安装目录在/usr/local或者/opt里,可以到那里去找找. 指令名称:whereis 功能介绍:在特定目录中查找符合条件的文件.这些文件的烈性应属于原始代码,二进制文件,或是 ...

  9. hadoop 1.2.1 eclipse 插件编译

    hadoop-1.2.1 eclipse插件编译       在ubuntu上进行hadoop相关的开发,需要在eclipse上安装hadoop开发插件.最新释放出的hadoop包含源码的包,以had ...

  10. SSIS ->> Parameter

    参数只能外部调用 参数分项目级别的参数和包级别的参数.项目级别的参数可见范围是所有包,而包级别的参数可见范围仅限于该包内. Sensitive选项是加密数据值,这样在Integration Servi ...