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寄存器没有出栈和入栈指令,所以只能引 ...
随机推荐
- Linux内存、性能诊断中vmstat命令的详解
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存 交换情况,IO读写情况.相比top,通过vmstat可以看到 ...
- Fluent动网格【11】:弹簧光顺
动网格除了前面讲了很多的关于运动指定之外,另一个重要主题则为网格的更新. 在部件运动之后,不可避免的会造成网格形状的变化,如若不对网格加以控制,在持续运动的过程中,则可能造成网格极度变形.歪曲率过大, ...
- MySQL入门很简单-触发器
1.触发器是由事件来触发某个操作,这些事件包括insert语句.update语句和delete语句.当数据库系统执行这些事件时,会激活触发器执行相应操作.MySQL从5.0.2开始支持触发器.使用触发 ...
- [HBase Manual] CH2 Getting Started
Getting Started Getting Started 1. Introduction 2.Quick Start-Strandalone HBase 2.1 JDK版本选择 2.2 Get ...
- [HDFS Manual] CH3 HDFS Commands Guide
HDFS Commands Guide HDFS Commands Guide 3.1概述 3.2 用户命令 3.2.1 classpath 3.2.2 dfs 3.2.3 envvars 3.2.4 ...
- mui 浏览器一样自动缩放
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- 链路追踪工具之Zipkin学习小记
(接触了Zipkin,权将所了解或理解的记于此,以备忘) 分布式追踪系统 随着业务发展,系统拆分多个微服务.此时对于一个前端请求可能需要调用多个后端端服务才能完成,当整个请求变慢或不可用时,我们是无法 ...
- Tensorflow学习资源
https://tensorflow.google.cn/ 中文官网 https://www.w3cschool.cn/tensorflow_python/tensorflow_python-gnwm ...
- linux下python3调用c代码或者python3调用c++代码
前几篇的blog都是为了这个实验做基础,先说 原因是python调用数据库150w条数据22s,然后处理数据,其实就2个简单的for循环,65s 需求: 1. python调用c++函数 2. c++ ...
- 框架源码系列三:手写Spring AOP(AOP分析、AOP概念学习、切面实现、织入实现)
一.AOP分析 问题1:AOP是什么? Aspect Oriented Programming 面向切面编程,在不改变类的代码的情况下,对类方法进行功能增强. 问题2:我们需要做什么? 在我们的框架中 ...