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寄存器没有出栈和入栈指令,所以只能引 ...
随机推荐
- CentOS 6.5 x64下安装VMware tools
[root@CentOS6 /]# mount /dev/cdrom /mnt mount: block device /dev/sr0 is write-protected, mounting re ...
- Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息
Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息 1.1. 异常的处理模式exit continue undo模式 1 1.2. 捕获所有异常使用 DECLARE ...
- Atitit 华为基本法 attilax读后感
Atitit 华为基本法 attilax读后感 “精神对物质的比重是三比一” 认可拿破仑的这句格言 在20多年中国商业和企业史上,一个最基本.也是最大的现象就是,为什么"中国制造" ...
- Android Studio系列-签名打包
本篇博客纪录使用Android Studio对项目进行签名打包,跟Eclipse大同小异,读者朋友注意其中到差别. 第一步 创建签名文件 第二步 填写签名参数 第三步 选择构建类型 第四步 查看生成第 ...
- python实现类似于Matlab中的magic函数
参考这篇文章的代码封装了一个类似Matlab中的magic函数,用来生成魔方矩阵. #!/usr/bin/env python # -*- coding: utf-8 -*- import numpy ...
- 【iCore4 双核心板_ARM】例程三十八:DSP MATH库测试
实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i,j; int res; ]; ; /* USER CODE END 1 */ /* ...
- PCL点云分割(3)
(1)Euclidean分割 欧几里德分割法是最简单的.检查两点之间的距离.如果小于阈值,则两者被认为属于同一簇.它的工作原理就像一个洪水填充算法:在点云中的一个点被“标记”则表示为选择在一个的集群中 ...
- JAVA获取apk包的package和launchable-activity名称(完善成EXE版)
出来混迟早是要还的. 在这一篇中https://www.cnblogs.com/sincoolvip/p/5882817.html,只是简单讲了一下获取apk包的package和launchable- ...
- OpenGL normalMap
参考zwqxin的博客 http://www.zwqxin.com/ shader 来自zwqxin,稍作修改 <-vertex-> attribute vec3 v_Pos; attr ...
- Scala 按名称参数调用函数 与 =>的用法
转自:http://blog.csdn.net/shenxiaoming77/article/details/54835679 通常情况下,函数的参数是传值参数:即参数的值在它被传递给函数之前被确定. ...