保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

实时操作系统μC/OS-II在MCF5272上的移植


,(%a1) //OSTCBCur->OSTCBStkPtr=SP

jsr OSTaskSwHook //调和Hook钩子函数

/*OSTCBCur->OSTCBStkPtr=OSTCBHighRdy->OSTCBStkPtr*/

move.1 (OSTCBHighRdy),%a1

move.1 %a1,(OSTCBCur)

move.b (OSPrioHighRdy),%d0

move.b %d0,(OSPrioCur) //OSPrioCur=OSPrioHighRdy

move.1 (%a1),%a7 //SP=OSTCBCur->OSTCBStkPtr

movem.1 (%a7),%d0-%d7/%a0-%a6 //恢复CPU寄存器,切换到新任务

lea 60(%a7),%a7

rte

篇幅所限,其它三个函数就不述了。

3 μC/OS-II任务堆栈初始化

μC/OS-II

中每个任务都有自己的任务堆栈,在任务创建初期由OSTaskStkInit()初始化。初始化堆栈的目的就是模拟一次中断。任务堆栈中保存了任务代码的起始地址和一些CPU寄存器(初值是无关紧要的),这样一旦条件满足,就可以执行该任务了。MCF5272在中断发生时,会自动保存程序指针PC、状态寄存器SR以及其它一些信息,为四字帧结构。除此以外,%d0-%d7、%a0-%a6也必须按一定顺序入栈。OSTaskStkInit()在完成堆栈初始化后,还要返回栈顶指针以用于该任务控制块TCB结构的初始化。该程序使用C语言编写。

4 μC/OS-II系统时钟

MCF5272处理器内置了4个定时器,使用TIMER0产生周期10ms的定时中断作为系统时钟。当PIVR寄存器设置为0x40时,TIMER0为69号中断,在矢量表的相应位置需填入时钟服务程序OSTickISR()的入口地址,并初始化时钟:

volatile unsigned short*pTimer;

pTimer=(unsigned short*)(0x10000000+0x200); //指向TIMER0

/*复位时钟*/

*pTimer &=0xFFF9; //定时器处于STOP状态

*pTimer=(*pTimer & 0x00FF)|0xFA00;//预分频=250

*pTimer |=0x0018; //计数满自动清零,中断方式

pTimer[2]=165; //Set TRR=165

*pTimer=(*pTimer & 0xFFF9) |0x0004; //CLK=Master/16,启动

上述程序段时钟节拍的周期为:(1/66MHz)×250×164×16=0.01秒。实时性要求高的场合可以使用更为精细的时钟。TIMER0一旦完成初始化,就开始工作,但是要让中断发生,还必须设置ICR寄存器相应字段给该中断分配IPL(Interrupt Priority Level,中断优先级),并保证该中断没有初状态寄存器SR屏蔽。

该时钟初始化代码可以放在第一个μC/OS-II任务中,在OSStart()后执行。一旦内核可以进行正常的任务切换,移植工作也就基本完成了。

《实时操作系统μC/OS-II在MCF5272上的移植(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/167876.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。