1 uC/OS-II的版本和C8051F020单片机的集成开发环境
C/OS-II内核使用了V2.52版本.虽然Silicon Lab公司免费提供C8051F系列单片机的集成开发环境,由于使用习惯,笔者还是选择了 Vision2 V2.38A版本,C编译器版本是C51.exe V7.06,汇编器的版本是A51.exe V7.07.适配器使用Silicon Lab公司的EC2,需要说明的是,要在Keil uVision2 IDE中调试C8051F系列单片机,必须安装动态链接库.
2 uC/OS-II在C8051F020单片机上的移植
移植工作就是更改OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM这几个文件.在说明这几个文件之前,先说明两点注意事项.(1)可重入函数.单片机内部堆栈空间有限,C51提供一种压缩栈的方式,当递归调用这个函数时,会导致变量被覆盖,所以在实时应用中,要用关键字reentrant将函数声明成可重入函数,把每次函数调用时的局部变量单独保存起来.但函数中不可以使用BOOL变量,因为在LARGE编译模式下,KEIL默认将所有变量定位到外部RAM的最高处,而MCS-51系列的MCU中只有内部20H-2FH的地址可以位寻址.(2)C51的关键字和uC/OS-II定义变量的矛盾."pdata","data"在uC/OS-II中用做一些函数的形参,但它同时又是C51的关键字,在编译时导致语法错误,通过把"pdata"改成"ppdata","data"改成"ddata"解决了此问题.
2.1 OS_CPU.H文件
这个文件主要是与处理器相关的宏定义和数据类型声明.如前面提到的,不能使用bit型变量,把BOOLEAN型定义成unsigned char型.另外8位MCU数据宽度和堆栈宽度都是8位,分别将OS_STK和OS_CPU_SR定义成unsigned char型.uC/OS-II提供了3种处理临界代码的方法,这里使用第一种,即通过对寄存器EA开关中断.MCS-51系列MCU的堆栈是从下向上递增的,定义OS_STK_GROWTH = 0.
2.2 OS_CPU_C.C文件
这个文件主要是完成OSTaskStkInit().在uC/OS-II中,任务是一个无限循环,任务之间也不会互相调用,但是uC/OS-II总是执行优先级最高的任务,假定当前有一个更高优先级的任务进入就绪状态,为了保证原来低优先级任务的完整性,uC/OS-II为每个任务建立了任务堆栈,就相当于函数调用时保存返回地址和参数一样,用来保存当前任务的状态,保证任务切换能和函数调用一样正确.只不过函数调用时函数堆栈的操作过程是编译器自动完成的,而任务切换时需要模拟一个和编译器类似的任务堆栈的操作过程.实际上,uC/OS-II的移植工作主要就是解决这个问题,OSTaskStkInit()完成任务栈初始化,后面介绍的OS_CPU_A.ASM文件完成3种不同条件下的任务切换操作.
图1列出了应用任务堆栈和MCS-51单片机的系统堆栈结构,左边是MCS-51单片机的系统堆栈,右边是应用任务的堆栈.MCS-51单片机系统堆栈是满递增栈,定义MCS51Sp为系统堆栈指针,定义MCS51SpTop为系统堆栈在内部RAM块的起始地址.初始化时把堆栈指针指向0x60H地址,即MCS51Sp = MCS51SpTop = 0x60H.需要保存的寄存器共有13个,应用任务入栈操作具体过程如下:(1),把所有的寄存器压入系统堆栈;(2),计算系统堆栈的深度(SP- MCS51SpTop),并且保存到任务堆栈的栈顶;(3)把系统堆栈所有的内容保存到任务堆栈,这里既包括在(1)中入栈的13个寄存器也包括程序运行时需要保存的参数(斜线填充部分).应用任务出栈操作具体过程如下:(1),从任务堆栈的栈顶得到要进行出栈的深度;把任务堆栈所有内容恢复到系统堆栈;(2),把13个寄存器出栈(还剩下程序指针PC);(3),执行RETI命令,把系统堆栈中的地址恢复到程序指针PC.
错误!链接无效. 图1任务堆栈和系统堆栈
OSTaskStkInit()的函数原型为 OS_STK *OSTaskStkInit(void (*task)(void *pd),void *pdata, OS_STK *ptos, INT16U opt);其中task指向应用任务的起始地址,pdata是应用任务传递的参数指针,ptos是任务堆栈的栈顶指针,需要说明的是,MCS-51单片机的堆栈是递增的,所以这个指针应该指向任务堆栈的低地址,在OSTaskCreat()中调用这个函数时opt没有意义,将opt设置为0.OSTaskStkInit()中,主要保存新建任务栈的起始地址(2个字节),也就是在图1右半部分的虚线部分,由于任务还没有被调度,MCU的状态字并不具有实际意义.
- c8051f020定时器 > uC/OS-II的版本和C8051F020单片机的集成开发环境
-
uC/OS-II的版本和C8051F020单片机的集成开发环境
下载该文档 文档格式:DOC 更新时间:2007-09-02 下载次数:0 点击次数:1文档基本属性 文档语言: Simplified Chinese 文档格式: doc 文档作者: USER 关键词: 主题: 备注: 点击这里显示更多文档属性 经理: 单位: USER 分类: 创建时间: 上次保存者: 修订次数: 编辑时间: 文档创建者: 修订: 加密标识: 幻灯片: 段落数: 字节数: 备注: 演示格式: 上次保存时间:
- 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
- DOC格式下载
- 更多文档...
-
上一篇:第39卷第1 期
下一篇:检测芯片内温度
点击查看更多关于c8051f020定时器的相关文档
- 您可能感兴趣的
- c8051f040定时器捕捉 c8051f020 c8051f020单片机 c8051f020应用笔记 c8051f020中文资料 c8051f020pdf c8051f020引脚功能 c8051f020的外围电路 c8051f020电路原理
- 大家在找
-
- · 驾驶员模拟题库a2
- · 西安培华校园网
- · 可爱电脑鼠标指针下载
- · 现代化工导论课件
- · 傲慢与偏见电影2005
- · 机械振动论文
- · dnf单机版修改器下载
- · 山东省临沂徐立娜
- · 九年级物理杠杆课件
- · 水利党建工作先进事迹
- · dsp与fpga招聘
- · 统计学试题及答案
- · 深圳社保帐户注册
- · 宝马m3挑战赛操作
- · 到哪儿学养猪技术
- · 如何制作幻灯片视频
- · 北京通州租房
- · EasyFit9V2.0
- · www.1861.com
- · 2012经济类联考大纲
- · linlan97@hotmail.com
- · 30岁帅哥qq头像
- · 视频分割专家
- · 土工膜焊接培训
- · 国珍松花钙奶粉好吗
- · 出生日期与五行万年历
- · 小学数学上册说课稿
- · 高碳铬铁电炉操作规程
- · 2010会计职称成绩查询
- · 51单片机开发板带网口
- 赞助商链接