20.0-uC/OS-III移植
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.C和BSP.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.C和BSP_INT.H
这些文件中用于存放与中断控制器相关的函数。
20.0-uC/OS-III移植的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- 在STM32F401上移植uC/OS的一个小问题 [原创]
STM32F401xx是意法半导体新推出的Cortex-M4内核的MCU,相较于已经非常流行的STM32F407xx和STM32F427xx等相同内核的MCU而言,其特点是功耗仅为128uA/MHz, ...
- uC/OS II原理分析及源码阅读(一)
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...
- 基于μC/OS—III的CC1120驱动程序设计
基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120 嵌入式操作系统 STM32F103ZE ...
- uc/os任务创建
问题描述: uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...
- uC/OS 的任务调度解析 (转)
uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...
- 关于uC/OS的简单学习(转)
1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...
- 【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理
LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr = SS:SP!!! ], SS ;将当前SS(栈的基地址)寄存器值存放至当前任务控制 ...
- 【原创】uC/OS II 任务切换原理
今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...
随机推荐
- Unity3D修改LWRP,HDRP的几项小问题及解决
最近在看Book of the Dead的demo,其中对HDPR进行修改以构建自己的SRP,于是自己尝试了下.. 一般直接去Github下载对应unity版本的SRP工程: https://gith ...
- Atitit 热烈庆祝读经器项目圆满完成
Atitit 热烈庆祝读经器项目圆满完成 1.1. 读经器项目简单介绍 1 1.2. 一万小时定律和十年一个专家定律 1 1.3. 获得加持前景 1 1.4. 核心源码 1 1.5. 项目git 2 ...
- vue及ElementUI环境搭建
1. nodejs安装及npm安装 下载地址:https://nodejs.org/en/download/ 选择windows Installer 下载完成后 运行node-v8.11.1-x64. ...
- eclipse is missing required source folder src/test/java
原因:maven的bug,不兼容eclipse 解决方法:右击工程,选择run-->maven-->build重新构建工程,就解决了.
- 【javascript】定时器组件
'use strict'; module.exports = function() { this.timer = {}; this.config = {}; // 初始化参数 this.init = ...
- class ObjectOutputStream也是过滤流,使节点流直接获得输出对象。
class ObjectOutputStream也是过滤流,使节点流直接获得输出对象. 最有用的方法:WriteObject(Object b) 用流传输对象称为对象的序列化,但并不使所有的对象都可以 ...
- Mybatis面试题整理(超详细)
1.什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement ...
- TensorFlow 1.4利用Keras+Estimator API进行训练和预测
Tensorflow 1.4中,Keras作为作为核心模块可以直接通过tf.keas进行调用,但是考虑到keras对tfrecords文件进行操作比较麻烦,而将keras模型转成tensorflow中 ...
- 手机访问PC网站自动跳转到手机版
随着智能手机的流行,4G时代来临,手机用户越来越多,在生活中甚至手机比电脑用的还多,当前开发的网站大都是PC和WAP版并存,但是很少有用户愿意去记住一个网站的两个端的不同域名,所以需要我们做一些设置, ...
- python什么时候加self,什么时候不加self
1.self是什么,一般都说指对象本身,这样说了没了用,说了后还是很难懂,因为这样说了后,仍然完全搞不清楚,什么时候变量前需要加self,什么时候不需要加self. 造成很多人,已经怕了self,不停 ...