?? os_cpu_c.c
字號:
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
* 6808 Specific code
*
* File : OS_CPU_C.C
* By : Kerby Suhre
*********************************************************************************************************
*/
#define OS_CPU_GLOBALS
#include "includes.h"
unsigned int *OSTaskStkInit (void (*task)(void *pd), void *pdata, unsigned int *ptos, INT16U opt)
{
INT16U *stk;
opt = opt;
pdata = pdata;
stk = (INT16U *)ptos;
*--stk = (INT16U)(task);
*--stk = (INT16U)(0x00);
*--stk = (INT16U)(0x00);
return ((void *)stk);
}
#if OS_CPU_HOOKS_EN
#if OS_VERSION > 203
void OSInitHookBegin (void)
{
}
#endif
#if OS_VERSION > 203
void OSInitHookEnd (void)
{
}
#endif
void OSTaskCreateHook (OS_TCB *ptcb)
{
ptcb = ptcb;
}
void OSTaskDelHook (OS_TCB *ptcb)
{
ptcb = ptcb;
}
void OSTaskSwHook (void)
{
}
void OSTaskStatHook (void)
{
}
#if OS_VERSION > 203
void OSTCBInitHook (OS_TCB *ptcb)
{
ptcb = ptcb;
}
#endif
void OSTimeTickHook (void)
{
}
#if OS_VERSION >= 205
void OSTaskIdleHook (void)
{
}
#endif
#endif
/****************************************************選擇已經(jīng)就緒的最高優(yōu)先級任務(wù)運行******************************************
*******************************************************************************************************************************/
void OSStartHighRdy(void)
{
#if OS_CPU_HOOKS_EN > 0
OSTaskSwHook();//調(diào)用HOOK函數(shù)
#endif
asm
{
lda OSRunning //設(shè)置OSRunning變量,標(biāo)志進入多任務(wù)模式
inca
sta OSRunning
ldx OSTCBHighRdy //取得最高優(yōu)先級就緒任務(wù)TCB地址
stx OSTCBCur //保存到OSTCBCur中
pshx
ldx OSTCBHighRdy:1//保存地址的第二個字節(jié)
stx OSTCBCur:1
pulh
lda 0,X //載放就緒任務(wù)堆棧指針
psha
ldx 1,X //載入就緒任務(wù)堆棧指針第二個字節(jié)
pulh
txs
pulh //恢復(fù)索引寄存器內(nèi)容
rti //中斷返回,運行新任務(wù)
}
}
/******************************************中斷級任務(wù)調(diào)度函數(shù)**********************************************************************
該函數(shù)為一個中斷服務(wù)函數(shù),由SWI中斷產(chǎn)生
***********************************************************************************************************************************/
interrupt void OSCtxSw(void)
{
asm
{
tsx
pshx
pshh
ldx OSTCBCur
pshx
ldx OSTCBCur:1
pulh
pula
sta 0,x
pula
sta 1,x
};
#if OS_CPU_HOOKS_EN > 0
OSTaskSwHook(); //調(diào)用HOOK
#endif
asm
{
lda OSPrioHighRdy
sta OSPrioCur
ldx OSTCBHighRdy
stx OSTCBCur
pshx
ldx OSTCBHighRdy:1
stx OSTCBCur:1
pulh
lda 0,x
psha
ldx 1,x
pulh
txs
}
}
/*****************************************************時鐘節(jié)拍中斷服務(wù)程序*********************************************************
*********************************************************************************************************************************/
interrupt void OSTickISR(void)
{
TBCR_TACK=1;//清適時中斷標(biāo)志
OSIntEnter(); /*標(biāo)志進入中斷*/
if(OSIntNesting==1) //保存堆棧指針
{
asm
{
tsx
pshx
pshh
ldx OSTCBCur
pshx
ldx OSTCBCur:1
pulh
pula
sta 0,x
pula
sta 1,x
};
};
OSTimeTick(); /*調(diào)用時鐘節(jié)拍函數(shù)*/
OSIntExit();/*標(biāo)志退出中斷*/
}
/************************************************************中斷級任務(wù)切換函數(shù)*******************************************************
*************************************************************************************************************************************/
void OSIntCtxSw(void)
{
#if OS_CPU_HOOKS_EN > 0
OSTaskSwHook();
#endif
asm
{
lda OSPrioHighRdy
sta OSPrioCur
ldx OSTCBHighRdy
stx OSTCBCur
pshx
ldx OSTCBHighRdy:1
stx OSTCBCur:1
pulh
lda 0,x
psha
ldx 1,x
pulh
txs
pulh
rti
}
}
/*********************************************************************************************************************************
用戶自定義的中斷服務(wù)程序的結(jié)構(gòu)形式如下,在其中插入用戶自定義的代碼后,將函數(shù)添入中斷向量表的相應(yīng)位置即可
**********************************************************************************************************************************/
interrupt void USER_ISR(void)
{
OSIntEnter(); /*標(biāo)志進入中斷*/
if(OSIntNesting==1) //保存堆棧指針
{
asm
{
tsx
pshx
pshh
ldx OSTCBCur
pshx
ldx OSTCBCur:1
pulh
pula
sta 0,x
pula
sta 1,x
};
};
//=====================插入用戶自定義代碼===================================
//===========================================================================
OSIntExit();/*標(biāo)志退出中斷*/
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -