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寄存器没有出栈和入栈指令,所以只能引 ...
随机推荐
- OFTP简介
OFTP协议由欧洲汽车标准组织Odette创建,第一个版本于1986年发布,旨在用于当时可用的网络服务,主要是X.25服务.Odette还考虑到VAN(增值网络)服务可能是通信链的一部分.OFTP是汽 ...
- Android设备真实DPI与系统标示DPI——ldpi/mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi
1.设备真实DPI与系统标示DPI 2.drawable允许的标示DPI值 drawable文件的合法名称如下: 3.如何验证 Demo如下,建立不同dpi的drawa ...
- crawler_exa1
编辑中... #! /usr/bin/env python # -*- coding:utf-8 -*- # Author: Tdcqma ''' 网页爬虫,版本 2017-09-20 21:16 ' ...
- 通过itools安装ipa时,如果装不上提示"Mismatche...onIdentifierEntitlement"
最后安装ipa时,如果装不上提示"Mismatche...onIdentifierEntitlement",一定要卸载设备里的现有的微信app!!!!!!!!!!!!!还有就是,如 ...
- JavaScript异步并发请求问题
JavaScript异步并发请求问题 JS中如何处理多个ajax并发请求? jQuery的deferred对象详解 面试遇到的ajax请求串行和并行问题
- 利用opencv进行移动物体检测
进行运动物体检测就是将动态的前景从静态的背景中分离出来.将当前画面与假设是静态背景进行比较发现有明显的变化的区域,就可以认为该区域出现移动的物体.在实际情况中由于光照阴影等因素干扰比较大,通过像素直接 ...
- 如何查看github排行热度
github热门趋势 https://github.com/trending github star排行榜 github输入:star:>数字,来查看star数的仓库: 输入:location: ...
- JS 详解对象的继承
在学习这篇博文前,请先移步我的另外一篇博文:JS 一张图理解prototype.proto和constructor的关系,先弄清楚“原型链”,这样对于理解继承会非常有效. 注意:博文中提到的“属性”, ...
- Abp之工作单元与事务
环境:Abp1.2 疑问:没有调用工作单元的SaveChanges方法引起的事务提交时机的问题. 例如:有一个应用服务代码如下: public void CreatePhrase(PhraseCrea ...
- ALINX公众号
请大家加一下ALINX公众号,后续FPGA资料更新,活动信息,新产品发布将通过微信公众号进行第一时间通知.