1.CPU移植要求:

1) 处理器有对应的能产生可重入代码的C编译器
2) 处理器支持中断且能提供周期性的中断(通常介于10到1000Hz之间)。

3) 可以关中断和开中断
4) 处理器支持存储和载入堆栈指针、 CPU寄存器、堆栈的指令。
5) 处理器有足够的RAM用于存放uC/OS-III的变量、 结构体、 内部任务堆栈、任务堆栈等

6) 编译器支持64位的数据类型

2.uC/OS-III的架构和它与其他软件、硬件成分的关系:

( 1)移植uC/OS-III需修改3个与内核相关的文件: OS_CPU.H、OS_CPU_A.ASM、 OS_CPU_C.C。

( 2)移植uC/OS-III需修改3个与CPU相关的文件: CPU.H、CPU_A.ASM、 CPU_CORE.C。

( 3) BSP中通常包含了uC/OS-III与定时器(产生时基的定时器)、中断控制器的接口。

( 4) 有些半导体厂商会提高相应的固件库文件, 这些文件会被包含在CPU/MCU中。

移植包括三方面内容: CPU、 OS、 BSP。

2.uC/CPU

与CPU相关的代码决定于CPU的架构。 例如, 关中断和开中断、堆栈的字长,

堆栈的生长方向等等。与CPU相关的代码被封装在叫做uC/CPU的模块中。

CPU_DEF.H
该文件不需要被改变: CPU_DEF.H中包含了Micrium公司提供的软件所用到的#define定义的宏。

CPU.H
不同CPU间的字长可能不同, CPU.H中定义了很多数据类型。

CPU_C.C
这是个可选的文件, 存放了CPU的中断控制器、 定时器的相关代码。绝大多数应用中是不包含这个文件的。

CPU_CFG.H
这是个配置文件,根据应用更改相应的#define。

CPU_CORE.C
这是通用的文件,不需要被改变。然而,它必须被包含。

CPU_CORE.C中定义了CPU_Init(), CPU_CntLeadZeros()以及测量CPU最大关中断时间的函数等。

必须在调用OSInit()之前调用CPU_Init()。

3.uC/OS-III移植

需被配置的uC/OS-III文件:

(1).OS_CPU.H
这个文件中必须定义宏OS_TASK_SW(), 这个宏被OSSched()调用用于上下文切换。

OS_CPU.H中必须定义宏OS_TS_GET(),用于获得当前的时间戳。时间戳的数据类型为CPU_TS,是32位的。

OS_CPU.H中还需要定义OSCtxSw()、 OSIntCtxSw()、
OSStartHighRdy()等函数的原型。

(2).OS_CPU_A.ASM
这个文件中包含了以下汇编函数:
OSStartHighRdy()
OSCtxSw()
OSIntCtxSw()和一个可选函数OSTickISR()

OS_CPU_A.ASM中存放的大多是直接操作CPU寄存器的函数,这些函数不能被C语言实现。

(3).OS_CPU_C.C
这个文件中包含了钩子函数:
OSIdleTaskHook()
OSInitHook()
OSStatTaskHook()
OSTaskCreateHook()
OSTaskDelHook()
OSTaskReturnHook()
OSTaskStkInit()
OSTaskSwHook()
OSTimeTickHook()
OS_CPU_C.C中可以定义其他函数,但这些函数是强制的。

4.板级支持包BSP

板级支持包的代码跟用户所使用的目标板有关。

BSP的文件包括:
BSP.C
BSP.H
BSP_INT.C
BSP_INT.H

(1).BSP.CBSP.H

这两个文件中包含了函数的定义和申明如BSP_Init()、BSP_LED_On()、 BSP_LED_Off()、

BSP_LED_Toggle()、 BSP_PB_Rb()等。用户可以定义自己的函数,最好以BSP_作为前缀。

在BSP.C中,可以添加CPU_TS_TmrInit()用于初始化CPU的时钟速率。

CPU_TS_TmrGet()用于读取CPU时钟计数值。如果定时器是16位的, 那么就需定义两个字,

将其转换为32位的。 如果定时器是32位的, CPU_TS_TmrGet()将直接返回这个32位的值。

(2).BSP_INT.CBSP_INT.H

这些文件中用于存放与中断控制器相关的函数。

20.0-uC/OS-III移植的更多相关文章

  1. uc/os iii移植到STM32F4---IAR开发环境

    也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...

  2. uC/OS - III 移植 IAR平台

    关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...

  3. 在STM32F401上移植uC/OS的一个小问题 [原创]

    STM32F401xx是意法半导体新推出的Cortex-M4内核的MCU,相较于已经非常流行的STM32F407xx和STM32F427xx等相同内核的MCU而言,其特点是功耗仅为128uA/MHz, ...

  4. uC/OS II原理分析及源码阅读(一)

    uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...

  5. 基于μC/OS—III的CC1120驱动程序设计

    基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120   嵌入式操作系统   STM32F103ZE   ...

  6. uc/os任务创建

    问题描述:      uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...

  7. uC/OS 的任务调度解析 (转)

    uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...

  8. 关于uC/OS的简单学习(转)

    1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...

  9. 【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理

    LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr = SS:SP!!! ], SS ;将当前SS(栈的基地址)寄存器值存放至当前任务控制 ...

  10. 【原创】uC/OS II 任务切换原理

    今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...

随机推荐

  1. Unity3D修改LWRP,HDRP的几项小问题及解决

    最近在看Book of the Dead的demo,其中对HDPR进行修改以构建自己的SRP,于是自己尝试了下.. 一般直接去Github下载对应unity版本的SRP工程: https://gith ...

  2. Atitit 热烈庆祝读经器项目圆满完成

    Atitit 热烈庆祝读经器项目圆满完成 1.1. 读经器项目简单介绍 1 1.2. 一万小时定律和十年一个专家定律 1 1.3. 获得加持前景 1 1.4. 核心源码 1 1.5. 项目git 2 ...

  3. vue及ElementUI环境搭建

    1. nodejs安装及npm安装 下载地址:https://nodejs.org/en/download/ 选择windows Installer 下载完成后 运行node-v8.11.1-x64. ...

  4. eclipse is missing required source folder src/test/java

    原因:maven的bug,不兼容eclipse 解决方法:右击工程,选择run-->maven-->build重新构建工程,就解决了.

  5. 【javascript】定时器组件

    'use strict'; module.exports = function() { this.timer = {}; this.config = {}; // 初始化参数 this.init = ...

  6. class ObjectOutputStream也是过滤流,使节点流直接获得输出对象。

    class ObjectOutputStream也是过滤流,使节点流直接获得输出对象. 最有用的方法:WriteObject(Object b) 用流传输对象称为对象的序列化,但并不使所有的对象都可以 ...

  7. Mybatis面试题整理(超详细)

    1.什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement ...

  8. TensorFlow 1.4利用Keras+Estimator API进行训练和预测

    Tensorflow 1.4中,Keras作为作为核心模块可以直接通过tf.keas进行调用,但是考虑到keras对tfrecords文件进行操作比较麻烦,而将keras模型转成tensorflow中 ...

  9. 手机访问PC网站自动跳转到手机版

    随着智能手机的流行,4G时代来临,手机用户越来越多,在生活中甚至手机比电脑用的还多,当前开发的网站大都是PC和WAP版并存,但是很少有用户愿意去记住一个网站的两个端的不同域名,所以需要我们做一些设置, ...

  10. python什么时候加self,什么时候不加self

    1.self是什么,一般都说指对象本身,这样说了没了用,说了后还是很难懂,因为这样说了后,仍然完全搞不清楚,什么时候变量前需要加self,什么时候不需要加self. 造成很多人,已经怕了self,不停 ...