关闭
搜索
搜索
本版
帖子
用户
热搜:
程序员
简洁模式
高级模式
用户组: 游客
消息
提醒
新听众
我关注的
帖子
道具
勋章
任务
设置
退出
请
登录
后使用快捷导航
没有帐号?
立即注册
设为首页
收藏本站
开启辅助访问
切换到窄版
登录
or
立即注册
快捷导航
搜索
首页
论坛
BBS
MCU单片机技术
程序员交流
新手福利之学习Ucos II移植篇
[复制链接]
作者:
hjkkjh110
版块:
›
嵌入式操作系统
›
其他嵌入式相关
发布时间:
2018-7-22 22:36:00
810
0
返回列表
hjkkjh110
当前离线
新手上路
新手上路, 积分 14, 距离下一级还需 36 积分
新手上路
新手上路, 积分 14, 距离下一级还需 36 积分
积分
14
发消息
楼主
电梯直达
hjkkjh110
发表于 2018-7-22 22:36:00
|
只看该作者
|
倒序浏览
|
阅读模式
要使μC/OS-Ⅱ正常运行,处理器必须满足以下要求:
“
1. 处理器的C编译器能产生可重入代码。2. 用C语言就可以打开和关闭中断。3. 处理器支持中断,并且能产生定时中断(通常在10至100Hz之间)。4. 处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈5. 处理器有将堆栈指针和其它CPU寄存器读出和存储到堆栈或内存中的指令。百度一下“可重入代码”。可重入代码(Reentry code)也叫纯代码(Pure code)是一种允许多个进程同时访问的代码。
Ucos II 是一个可抢占式内核,有这样的要求也是可以理解的。要不这个任务调用了这段代码,它是完整的,等到下一个任务调用它的时候,它就变成残缺的了,下一任务还怎么办?写到这里,不禁想起了少女的第一次.
看上面的要求蛮多的,其实实际应用中是很少有不兼容UCos II 的微处理器的。所以大家可以放心地,大胆地,使劲地,尽情地,淫荡地使用UCos II.
总得来说,移植ucos II 到一个芯片上,只需要修改下面三个文件:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。
具体来说,移植主要包括以下几项内容
(1).OS_CPU.H :用#define设置一些常量的值,声明10个数据类型,用#define声明三个宏。(2).OS_CPU_C.C : 用C语言编写六个简单的函数。(3).OS_CPU_A.ASM : 编写四个汇编语言函数。
乍看起来,移植ucos II的工作量及难度都非常小。但对一个初学者来说,这也不是件轻松的事。它要求对微处理器,汇编和UCoS II 都非常熟悉。在Mcu21同学的项目里,Mcu21同学极好地发扬了拿来主义精神,直接参照了周立功提供的模板。
我们已经知道移植UCos II,是需要修改三个文件:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。
下面以移植到lPC2292上为例,理解下移植过程。
(1).首先看OS_CPU.H这个文件
下图是我项目中的OS_CPU.H文件,可以看到,它包括两部分的代码,第一部分是定义与编译器无关的数据类型,第二部分是与ARM7体系结构相关的定义。
为什么要定义数据类型呢?
因为不同的微处理器有不同的字长,所以μC/OS-Ⅱ的移植包括了一系列的类型定义以确保其可移植性。这也是第一部分程序的作用。程序用有这样的一句#define OS_STK_GROWTH 1 /* 堆栈是从上往下长的 */
这一句程序有什么作用?
它的作用是定义堆栈方向,绝大多数的微处理器和微控制器的堆栈是从上往下长的。但是某些处理器是用另外一种方式工作的。μC/OS-Ⅱ被设计成两种情况都可以处理,只要在结构常量OS_STK_GROWTH中指定堆栈的生长方式(如下所示)就可以了。置OS_STK_GROWTH为0表示堆栈从下往上长。置OS_STK_GROWTH为1表示堆栈从上往下长。
(2).其次看OS_CPU_C.C这个文件
在这个文件里我们需要编写以下六个函数OSTaskStkInit()//初始化任务堆栈结构OSTaskCreateHook()//允许用户或使用用户的移植实例的用户扩展μC/OS-Ⅱ的功能OSTaskDelHook()//该函数在把任务从μC/OS-Ⅱ的内部任务链表中解开之前被调用OSTaskSwHook()//当发生任务切换的时候调用OSTaskSwHook()OSTaskStatHook()//用户可以用OSTaskStatHook()来扩展统计功能OSTimeTickHook()OSTaskTimeHook()在每个时钟节拍都会被OSTaskTick()调用事实上,上面的六个函数只有OSTaskStkInit()是必须编写的,而其它的五个函数只需定义就可。在我的项目里OS_CPU_C.C,也编写了OSTaskStkInit()这个函数。
(3).最后看OS_CPU_A.ASM这个文件
这个文件都是汇编,绝对可以让你看得醉生欲死,欲罢不能,你懂我的。在OS_CPU_A.ASM这个文件里要求用户编写四个简单的汇编语言函数:OSStartHighRdy()OSCtxSw()OSIntCtxSw()// OSIntCtxSw()是μC/OS-Ⅱ(和μC/OS)中唯一的与编译器相关的函数OSTickISR()
编写上面四个函数要求对cpu的工作原理有深入的理解。
特别推荐
全面解析开关电源 你想知道的都在这里
看过这100个知识点,模电其实也不难
手环和微信上的计步原来是这么玩起来的...
中国电子网微信号:weixin21ic
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
立即注册
收藏
0
相关帖子
•
长文|花了两天时间整理了STM32中的一些C语言知识点
•
深入理解高性能网络开发路上的绊脚石-同步阻塞网络IO
•
Linux上TCP的几个内核参数调优
•
Linux运维入门教程07-01-Linux网络原理及基础设置
•
Linux内核继续打造WWAN子系统发展通用驱动并加强扩展能力
•
干货|深度剖析C语言的main函数
•
红帽linux[基础命令]特殊变量列表
•
如何在内核中操作某个文件?
•
利用BATS测试Bash脚本和库|Linux中国
•
《Linux内核编码风格》官方手册最新中译本
回复
使用道具
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
表情
@朋友
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
招聘&找工作
快速回复
返回顶部
返回列表