μC/OS-II在凌阳单片机SPCE061A上的移植

[09-12 17:52:20]   来源:http://www.88dzw.com  单片机学习   阅读:8890

文章摘要:3.1 任务切换凌阳SPACE061A单片机有R1~R5 五个通用寄存器,还有1个SR(CPU状态寄存器),再加上PC,总共有7个CPU内部寄存器在任务切换时需要保存。μCOS-II系统调用OSCtxSw( )来实现任务的切换,下面给出其部分代码:_OSCtxSw:PUSHALL // 将所有寄存器压栈OSIntCtxSw_in:// 求出系统堆栈的长度 ,并将其存入R2R1=SPR2=OSStkStartR1+=1R2=R2-R1R1=[_OSTCBCμγ]// R1≤OSTCBStkPtr, R1 为任//务堆栈的头指针R1=[R1] // 首先将系统堆栈长度保存在任//务堆栈中[R1]=

μC/OS-II在凌阳单片机SPCE061A上的移植,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com

3.1 任务切换

  凌阳SPACE061A单片机有R1~R5 五个通用寄存器,还有1个SR(CPU状态寄存器),再加上PC,总共有7个CPU内部寄存器在任务切换时需要保存。μCOS-II系统调用OSCtxSw( )来实现任务的切换,下面给出其部分代码:

_OSCtxSw:

PUSHALL // 将所有寄存器压栈

OSIntCtxSw_in:

// 求出系统堆栈的长度 ,并将其存入R2

R1=SP

R2=OSStkStart

R1+=1

R2=R2-R1

R1=[_OSTCBCμγ]// R1≤OSTCBStkPtr, R1 为任

//务堆栈的头指针

R1=[R1] // 首先将系统堆栈长度保存在任

//务堆栈中

[R1]=R2

R3=OSStkStart // 得到堆栈的起始地址

// 保存系统堆栈到任务堆栈

save_stack:

R3-=1

R1+=1

R4=[R3]

[R1]=R4

R2-=1

JNZ save_stack

CALL _OSTaskSwHook

R1=[_OSTCBHighRdy]

[_OSTCBCur]=R1

R1=[_OSPrioHighRdy]

[_OSPrioCur]=R1

JMP OSCtxSw_in

3.2 μCOS-II系统时钟

  以凌阳SPCE061A单片机的TMB2时基信号作为系统时钟,每经历一个时钟节拍的时间将产生一次中断,在中断服务子程序中会调用OSTickISR()函数,汇编代码如下:

_OSTickISR:

PUSHALL

R1=0x0001

test R1,[P_INT_Ctrl]

JZ OUT

R1=0x0001

[P_INT_Clear]=R1

CALL _OSIntEnter

CALL _OSTimeTick

CALL _OSIntExit

OUT:

R1=0x0001

[P_INT_Clear]=R1

POPALL

RETI

结 语

  RTOS是当今嵌入式应用的热点。应用RTOS,可以提高产品的可靠性,降低研发周期。μCOS-II具有很好的实时性和很小的代码量,因此掌握μCOS-II的移植方法是相当重要的。本文移植修改的源代码请参见本刊网络补充版(http://www.88dzw.com)。




上一页  [1] [2] 


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行