|
|
| | -文章搜索 - 最新文章 - | |
在51系列单片机上移植uCOS-II |
| 发布时间:2003年2月10日 点击次数:1007 |
| 来源: 作者:巨龙公司交换系统事业部技术组 |
关键词:嵌入式实时多任务操作系统、uC/OS-II、C51 引言:随着各种应用电子系统的复杂化和系统实时性需求的提高,并伴随应用软件朝着系统化方向发展的加速,在16位/32位单片机中广泛使用了嵌入式实时操作系统。然而实际使用中却存在着大量8位单片机,从经济性考虑,对某些应用场合,在8位MCU上使用操作系统是可行的。从学习操作系统角度,uC/OS-II for 51即简单又全面,学习成本低廉,值得推广。 结语:μC/OS-II具有免费、简单、可靠性高、实时性好等优点,但也有缺乏便利开发环境等缺点,尤其不像商用嵌入式系统那样得到广泛使用和持续的研究更新。但开放性又使得开发人员可以自行裁减和添加所需的功能,在许多应用领域发挥着独特的作用。当然,是否在单片机系统中嵌入μC/OS-II应视所开发的项目而定,对于一些简单的、低成本的项目来说,就没必要使用嵌入式操作系统了。 uC/OS-II原理: TCB结构体中OSTCBStkPtr总是指向用户堆栈最低地址,该地址空间内存放用户堆栈长度,其上空间存放系统堆栈映像,即:用户堆栈空间大小=系统堆栈空间大小+1。 SP总是先加1再存数据,因此,SP初始时指向系统堆栈起始地址(OSStack)减1处(OSStkStart)。很明显系统堆栈存储空间大小=SP-OSStkStart。 任务切换时,先保存当前任务堆栈内容。方法是:用SP-OSStkStart得出保存字节数,将其写入用户堆栈最低地址内,以用户堆栈最低地址为起址,以OSStkStart为系统堆栈起址,由系统栈向用户栈拷贝数据,循环SP-OSStkStart次,每次拷贝前先将各自栈指针增1。 其次,恢复最高优先级任务系统堆栈。方法是:获得最高优先级任务用户堆栈最低地址,从中取出“长度”,以最高优先级任务用户堆栈最低地址为起址,以OSStkStart为系统堆栈起址,由用户栈向系统栈拷贝数据,循环“长度”数值指示的次数,每次拷贝前先将各自栈指针增1。 用户堆栈初始化时从下向上依次保存:用户堆栈长度(15),PCL,PCH,PSW,ACC,B,DPL,DPH,R0,R1,R2,R3,R4,R5,R6,R7。不保存SP,任务切换时根据用户堆栈长度计算得出。 OSTaskStkInit函数总是返回用户栈最低地址。 操作系统tick时钟我使用了51单片机的T0定时器,它的初始化代码用C写在了本文件中。 最后还有几点必须注意的事项。本来原则上我们不用修改与处理器无关的代码,但是由于KEIL编译器的特殊性,这些代码仍要多处改动。因为KEIL缺省情况下编译的代码不可重入,而多任务系统要求并发操作导致重入,所以要在每个C函数及其声明后标注reentrant关键字。另外,“pdata”、“data”在uCOS中用做一些函数的形参,但它同时又是KEIL的关键字,会导致编译错误,我通过把“pdata”改成“ppdata”,“data”改成“ddata”解决了此问题。OSTCBCur、OSTCBHighRdy、OSRunning、OSPrioCur、OSPrioHighRdy这几个变量在汇编程序中用到了,为了使用Ri访问而不用DPTR,应该用KEIL扩展关键字IDATA将它们定义在内部RAM中。 (4)重写OS_CPU_A.ASM A51宏汇编的大致结构如下: NAME 模块名 ;与文件名无关 ;定义重定位段 必须按照C51格式定义,汇编遵守C51规范。段名格式为:?PR?函数名?模块名 ;声明引用全局变量和外部子程序 注意关键字为“EXTRN”没有‘E’ 全局变量名直接引用 无参数/无寄存器参数函数 FUNC 带寄存器参数函数 _FUNC 重入函数 _?FUNC ;分配堆栈空间 只关心大小,堆栈起点由keil决定,通过标号可以获得keil分配的SP起点。切莫自己分配堆栈起点,只要用DS通知KEIL预留堆栈空间即可。 ?S |
|
|
|
|
[嵌入式系统] 相关文章: 集成了TI代码编译器套件的NI LabVIEW缩短了DSP设计周期简介:
National Instruments(美国国家仪器公司,简称NI)今天宣布LabVIEW DSP测试工具包(DSP Test Integration Toolkit)正式上市。有了这个软件,工程师们可以将NI LabVIEW图形化开发环境与德州仪器(TI)代码编译器套件(Code Composer Studio)开发工具结合使用,从而大大地缩短TI的数字信号处理(DSP)系统的测试和开发时间。 DSP系统设计过程的前期测试工作往往都是非常复杂又很耗时间,因此设计工程师们通常要等到系统模型完成以后才可以做验证工作。有了这一工具套件,工程师们就可以在LabVIEW中方便地将测量部分集成在设计...... 基于LabVIEW中DSP目标文件加载的实现
使用μC/OS-II操作系统的短信息电话机
LVDS接口电路及设计
多家消费类电子厂商应用数字多媒体处理平台推出灵活的多媒体产品
“蓝牙”技术孕育大市场
μC/OS-II在EP7312上的移植
新型高频大功率开关电源的监测仪表
德州仪器凭借 TMS320DA610 浮点 DSP 荣膺 EDN 亚洲年度最佳器件奖
用CPLD控制曼彻斯特编解码器 |
|
|
|