μC/OS-II在80196KC单片机上的移植

发布者:张延强最新更新时间:2011-12-28 关键字:80196KC  uCOS-II  Tasking  移植 手机看文章 扫描二维码
随时随地手机看文章

Intel的80196KC系列单片机在中国国内有很大一批用户。支持80196KC的C编译器生产厂商主要有Tasking和IAR。但国内使用Tasking公司C编译器的用户较多。由于μC/OS-Ⅱ系统为源码公开的实时操作系统,因此是当前嵌入式系统开发的主要方法。但是,在μC/OS-Ⅱ网站上没有现成的移植实例。因此,有必要进行一次移植以使操作系统成为μC/OS-Ⅱ,这种移植采用的处理器为80196KC,而其编译器为Tasking c 196。

1 μC/OS-Ⅱ的工作原理

μC/OS-Ⅱ是一个源码公开的实时多任务操作系统,其工作流程如图1所示。图中,任务切换的核心是利用出栈指令将各个任务的工作现场再现,并利用子程序返回指令改变PC指针以完成任务的切换。移植的关键是如何构造任务堆栈及任务切换时的出栈顺序。任务区堆栈初始化主要是模拟任务被中断后的堆栈内容。

2 80196KC的工作状态

80196KC是Intel公司的16位单片机,和程序运行密切相关的寄存器有指令计数器PC、堆栈指针sp、程序状态寄存器PSW、中断屏蔽寄存器INTMASK和INTMASK1以及窗口寄存器WSR(以下将程序状态寄存器PSW、中断屏蔽寄存器INTMASK和INTMASK1、窗口寄存器WSR统称为程序状态字)。它们可在执行子程序调用call指令时自动将pc进栈,并在子程序返回调用RET指令时自动将pc出栈。由于80196KC有16位的寻址能力,故这一动作有2个字节进(出)栈,其中push a指令将程序状态字进栈,pop a指令将程序状态字出栈。这一动作共有4个字节进(出)栈。另外push a动作会将PSW中的中断允许位清零,故通常用push a关闭中断,而用pop a恢复中断允许。由于80196KC的时钟节拍是特定的周期性中断,当每个时钟节拍到来时,系统将对任务延时做一次裁决。因此,在这个时钟节拍可采用80196KC中的软件定时器中断。

 

3 Tasking c编译器的工作细节

带参数的函数调用编译后的主要操作是先将参数进栈,然后执行call指令。在函数入口处将堆栈中的参数倒入寄存器tmp0、tmp2、tmp4和tmp6以进行操作(以下称临时寄存器)的原因主要是,堆栈一般位于RAM区,而对RAM区操作不如对寄存器操作快。如果该函数有局部变量,局部变量也是分配在堆栈中。Tasking c编译器一般用一寄存器frame01(以下称框架寄存器)对局部变量进行访问,在函数返回时执行ret操作,并对SP指针进行调整,以跳过函数参数在堆栈中的位置。中断调用和函数调用类似,中断本身虽没有参数,但进中断后要对临时寄存器进行保护。因此,应在进中断后执行push a操作,并在中断返回时使临时寄存器出栈(注意出栈顺序),然后再次执行pop a和ret操作。图2所示为堆栈区的一般结构。

4 移植的细节

在OSTaskStkInit()中,任务堆栈区的构造特点是80196KC的堆栈区由高向低增长,最高处是任务的入口参数,接着是PC指针和程序状态字。如前所述,任务切换时要对临时寄存器和框架寄存器进行保护。明确了任务堆栈的构造后,编写任务启动函数(指OSStaart函数)和任务切换函数(指OS_TAASK_SW和OSIntCtxSw函数)的关键是,在得到了最高优先级的任务堆栈指针后,如何按正确的顺序出栈,直到PC指针。其中OS_TASK_SW,函数在切换任务之前还要编写对当前任务的现场进行保护的程序,而OSIntCtxSw,不用,因为中断函数用C写成,而OSIntCtxSw,是在中断中调用的,因此,Tasking C编译器在进中断时已自动对其保护。同时还应注意,由于在中断服务程序中没有定义局部变量,这使得Tasking C编译器不能对框架寄存器进行保护,因此,对这一寄存器的保护应在设计时自己加上。

#pragma interrupt

(OSTickISR=OS TICK ISR VECTOR)

void OSTickISR(void)

{

asm push ?frame01;

OSIntNesting++;

hso command=0x19;

AD Timer Count+=5000;

hso time = AD Timer Count;

OSTimeTick();

OSIntExit();

asm pop?frame01;

}

还应注意,在其它中断服务程序中,如果没有定义局部变量,也应加上对框架寄存器的保护。如果有局部变量,编译器会自动对框架寄存器进行保护。在编写OSIntCtxSw()函数时应当注意,由于OS-IntCtxSw()是在OSIntExit()中调用的,且在调用OS-IntCtxSw()之前又有一个关中断的操作。因此,笔者采用push a方式来关闭中断,也就是说,切换到另一高优先级的任务后,会在当前任务中留下在OSIntC-txSw()和OSIntExit()调用的返回地址4个字节的垃圾和pusha关中断时进栈的4个字节垃圾(共8个字节)。因此,为了保证下次切换到该任务的正确性,应将SP指针加8,然后再进行任务切换。为加深对此的理解,可以做一假设:如果80196KC是24位(3个字节)寻址能力,在当前任务中会留下OSIntCtxSw()和OSIntExit()调用的返回地址的6个字节的垃圾,如果关中断直接采用asm di方式,而不牵扯到堆栈操作,此时SP应调整6个字节而不是8个字节。


5 正确性检验

图3是一个点灯程序的主任务流程。其6个灯中的每一个点灯操作都是一个单独任务。第一个灯每两个时钟节拍做一次异或操作。如果LED1每执行2次异或操作向任务2发一信号量2?每执行3次异或操作向任务3发一信号量3?每执行4次异或操作向任务4发一信号量4,每执行5次异或操作向任务5发一信号量5,每执行6次异或操作向任务6发一信号量6。那么,任务2到任务6在接到相应的信号量时将对自已控制的灯进行一次异或操作。理论分析,LED2到LED6的波形周期分别为LED1的2到6 倍。笔者曾用示波器对6 个灯的波形进行观察,其结果与理论分析相符,同时,在连续运行数天后,没有发现死机和复位,证明移植成功。

关键字:80196KC  uCOS-II  Tasking  移植 引用地址:μC/OS-II在80196KC单片机上的移植

上一篇:μC/OS-II在凌阳单片机SPCE061A上的移植
下一篇:基于51单片机的嵌入式SNMP代理器设计与实现

推荐阅读最新更新时间:2024-03-16 12:49

利用FPGA解决TMS320C54x与SDRAM的接口问题
摘要:介绍了如何利用FPGA设计TMS320C54x系列芯片与TMS62812A SDRAM之间的接口。这种接口方法适合于需要外扩大容量存储器的应用场合。 关键词:FPGA TMS320C54x SDRM 接口 在DSP应用系统中,需要大量外扩存储器的情况经常遇到。例如,在数码相机和摄像机中,为了将现场拍摄的诸多图片或图像暂存下来,需要将DSP处理后的数据转移到外存中以备后用。从目前的存储器市场看,SDRAM由于其性能价格比的优势,而被DSP开发者所青睐。DSP与SDRAM直接接口是不可能的。FPGA(现场可编程门阵列)由于其具有使用灵活、执行速度快、开发工具丰富的特点而越来越多地出现在现场电路设计中。本文用FPGA作为接口芯
[应用]
单片机C语言数组的详细实例程序应用介绍
数组是由具有相同类型的数据元素组成的有序集合。数组是由数组名来表示的,数组中的数据由特定的下标来唯一确定。引入数组的目的,是使用一块连续的内存空间存储多个类型相同的数据,以解决一批相关数据的存储问题。数组与普通变量一样,也必须先定义,后使用。数组在C51语言的地位举足轻重,因此深入地了解数组是很有必要的。下面就对数组进行详细的介绍。 (1)一维数组 一维数组是最简单的数组,用来存放类型相同的数据。数据的存放是线性连续的。 用以下例程说明数组的建立、数据操作: #include /* ----------------------------------------------------- 此程序用以说明数组的建立、数据操作 -
[单片机]
单片机<font color='red'>C</font>语言数组的详细实例程序应用介绍
嵌入式操作系统Windows CE.NET在S3C2410平台上的移植
目前,嵌入式微处理器种类很多,嵌入式操作系统要支持尽可能多的处理器,这就要完成操作系统针对不同处理器的定制。   本文分析了嵌入式操作系统Windows CE。NET的特点,并利用工具Platform Builder 4。2完成了其在以ARM920T为核心的S3C2410处理器上的定制。   1 Windows CE系统和Platform Builder 4.2   Windows CE是微软推出的一个32位、多线程、多任务的嵌入式操作系统,是微软专门为信息设备、移动应用、嵌入式应用等设计的嵌入式模块型操作系统。用户可选择、组合和配置Windows CE。NET的模块和组件来创建用户版的操作系统。   W
[单片机]
嵌入式操作系统Windows CE.NET在S3<font color='red'>C</font>2410平台上的<font color='red'>移植</font>
(三)s3c2440——中断实验
一、进入中断前的准备:   1、保存进入中断前的环境   2、进入中断模式,设置中断模式下的栈 二、中断处理框图详解:             第一路:       当内部触发中断后,SUBSRCPND相应的位置1,代表某个中断发生。并且SRCPND的相应位也置1。       对于普通中断IRQ,当同时发生几个中断的时候,我们要通过优先级来决定哪个先执行,哪个后执行。       这时候,优先级高的先执行,此时INTPND相应位置1。中断服务函数中判断中断源时,可以通过       INTPND或者INTOFFSET来判断。     第二路:       外部中断发生的时候,直接在SRCPND处相应位置1,然后往后执行和
[单片机]
(三)s3<font color='red'>c</font>2440——中断实验
S3C2416裸机开发系列二十_Libjpeg的移植
jpeg格式是一种针对相片影像而广泛使用的一种失真压缩标准,其压缩技术十分先进,用有损压缩方式去除冗余的图像数据,在获得极高压缩率的同时,能展现十分丰富生动的图像,能用最少的磁盘空间得到较好的图像品质。由于其尺寸较小,能够较快地在网络上传输,因此在数码相机、网页等领域均广泛应用到jpeg图像格式。笔者此处就移植libjpeg开源库来应用jpeg作一个简单的介绍。 1. 代码准备 libjpeg源码,libjpeg是一个完全用c语言编写的库,包含了被广泛使用的jpeg编码、jpeg解码和其它的jpeg功能的实现,这个库由独立的jpeg工作组维护。请读者自行到官网下载最新的源码。 s3c2416启动代码工程,启动代码是s3c2416
[单片机]
基于AT89C2051单片机的超声波理疗仪的构成原理
0 引言 目前国内外的多数超声治疗仪(理疗型)普遍都是以连续正弦波(1~3 MHz)或脉冲正弦波(低频调制100 kHz左右)的方式进行工作,其输出声强≤3.0 W/cm2,所存在的问题是超声波主要作用于皮肤、肌肉和结缔组织,发射波形峰值高、穿透力差等,对较深病灶点的治疗效果不明显。因此,治疗和促进肌肉恢复和骨骼愈合需要很长的时间。本设计的理疗仪能产生波形峰值低、穿透力强的特定超声波能量,可以更加深层地作用于肌肉骨骼上,起到加速愈合的作用。本设计使用电路模块化的设计思路,并结合实际电路设计了一种简单适用的多参数超声波治疗仪。目前,该设计在国内外无类似的产品报道,产品设计原理涉及许多关于超声波对骨伤治疗的最前沿的研究成果和报道。 1
[单片机]
基于AT89<font color='red'>C</font>2051单片机的超声波理疗仪的构成原理
“熊猫”晶彩C系列能否挑起泰克基础示波器“百万销量”大梁?
“……买示波器确实犯难,如今浮躁的大环境,认真踏实干事的不多,工程师今天这个跳槽,明天那个跳槽,技术交接频繁,你说能出精品吗?就想买真正用心踏踏实实做示波器的厂家出的产品,比如泰克等国外厂家,但是价格又高,矛盾啊!” 以上这段发言是来自某电子爱好者论坛的一个真实帖子,从一个侧面反映了很多中国工程师购买示波器的心态:希望买到高品质但价格更低的示波器。泰克公司也在几年前就了解到类似的客户心声,因而推出了专门针对中国市场的“熊猫”TDS1000C-SC系列中文彩屏示波器。近日,该公司全面升级其经典款TDS1000/2000系列示波器,推出新一代“熊猫”晶彩C系列TDS2000C&TDS1000C-SC系列数字实时示波器,旨
[测试测量]
“熊猫”晶彩<font color='red'>C</font>系列能否挑起泰克基础示波器“百万销量”大梁?
基于80C51单片机和AD526运放实现防腐电源监控节点的设计
金属发生腐蚀的现象随处可见。腐蚀给金属材料造成的直接和间接损失是巨大的,以至造成灾难性的破坏事故,引起严重的环境污染。研究表明,因腐蚀造成的损失一般占国民生产总值的3%~4%,其中约有15%是可以通过现有的防腐技术避免的,而阴极保护技术的发展又是与防腐技术的进步分不开的。 防腐电源是阴极保护技术中最为关键的设备。由于易腐蚀的金属构件大部分分布在野外或者地下,并且分布范围广,如石油管道、输电线路、海上平台等,所以必然要求发展可靠性高、智能化的新型防腐电源,并且要求通过工业网远程采集现场数据,进行计算分析,实现远程控制,从而提高现场设备的可靠性,实现无人管理。 1、防腐电源系统的结构组成 阴极保护技术简单地说就是测量被保护金属
[单片机]
基于80<font color='red'>C</font>51单片机和AD526运放实现防腐电源监控节点的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved