首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
μC/OS-II在80196KC单片机上的移植 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 22:56:11 点击数:[] ![]() |
|||||
[本篇论文由上帝论文网为您收集整理,上帝论文网http://paper.5var.com将为您整理更多优秀的免费论文,谢谢您的支持] 关键词:80196KC; uC/OS-II;Tasking C;移植 Intel的80196KC系列单片机在中国国内有很大一批用户。支持80196KC的C编译器生产厂商主要有Tasking和IAR。但国内使用Tasking公司C编译器的用户较多。由于μC/OS-Ⅱ系统为源码公开的实时操作系统,因此是当前嵌入式系统开发的主要方法。但是,在μC/OS-Ⅱ网站上没有现成的移植实例。因此,有必要进行一次移植以使操作系统成为μC/OS-Ⅱ,这种移植采用的处理器为80196KC,而其编译器为Tasking c 196。 μC/OS-Ⅱ是一个源码公开的实时多任务操作系统,其工作流程如图1所示。图中,任务切换的核心是利用出栈指令将各个任务的工作现场再现,并利用子程序返回指令改变PC指针以完成任务的切换。移植的关键是如何构造任务堆栈及任务切换时的出栈顺序。任务区堆栈初始化主要是模拟任务被中断后的堆栈内容。 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、 在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 popframe01; } 还应注意,在其它中断服务程序中,如果没有定义局部变量,也应加上对框架寄存器的保护。如果有局部变量,编译器会自动对框架寄存器进行保护。在编写OSIntCtxSw()函数时应当注意,由于OS-IntCtxSw()是在OSIntExit()中调用的,且在调 Tags: |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |