?? os_cpu_c.c
字號:
//*------------------------------------------------------------------------------------------------
//* 文件名 : os_cpu_c.c
//* 功能描述 : 用戶自定義的鉤子函數(shù)及任務(wù)堆棧初始化函數(shù)
//* 作者 : 焦海波
//* 版本 : 0.1
//* 建立日期、時間 : 2007/05/05 11:50
//* 最近修改日期、時間 :
//* 修改原因 :
//*------------------------------------------------------------------------------------------------
//*------------------------------------------ 頭文件 ----------------------------------------------
#include "/at91sam7x256/include/AT91SAM7X256.h"
#define OS_CPU_GLOBALS
#include "/uCOS-II/ucos_ii.h"
//*================================================================================================
//* 函 數(shù) 區(qū)
//*================================================================================================
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSTaskStkInit
//* 功能描述 : 初始化各任務(wù)堆棧,該函數(shù)由OSTaskCreate()或OSTaskCreateExt()調(diào)用
//* 入口參數(shù) : <pTaskEntry>[in] 指向任務(wù)的入口點
//* : <pvArg>[in] 傳遞給任務(wù)的參數(shù)
//* : <pstkTos>[in] 指向任務(wù)堆棧棧頂?shù)闹羔?//* : <u16Opt>[in] 保留
//* 出口參數(shù) : 返回當前的任務(wù)堆棧指針
//*------------------------------------------------------------------------------------------------
#define ARM_MODE_SVC_ARM 0x13
#define ARM_MODE_SVC_THUMB 0x33
OS_STK *OSTaskStkInit(void(*pTaskEntry)(void *pvArg), void *pvArg, OS_STK *pstkTos, INT16U u16Opt)
{
OS_STK *SP;
u16Opt = u16Opt; //* 避免編譯器警告信息
SP = pstkTos;
*SP = (INT32U)((INT32U)pTaskEntry & ~1); //* PC, 程序的入口
*(--SP) = (INT32U)0x14141414; //* LR, 即R14
*(--SP) = (INT32U)0x12121212; //* R12
*(--SP) = (INT32U)0x11111111; //* R11
*(--SP) = (INT32U)0x10101010; //* R10
*(--SP) = (INT32U)0x09090909; //* R9
*(--SP) = (INT32U)0x08080808; //* R8
*(--SP) = (INT32U)0x07070707; //* R7
*(--SP) = (INT32U)0x06060606; //* R6
*(--SP) = (INT32U)0x05050505; //* R5
*(--SP) = (INT32U)0x04040404; //* R4
*(--SP) = (INT32U)0x03030303; //* R3
*(--SP) = (INT32U)0x02020202; //* R2
*(--SP) = (INT32U)0x01010101; //* R1
*(--SP) = (INT32U)pvArg; //* R0, ARM使用R0-R3寄存器傳遞參數(shù),由于只有一個參數(shù),所以這里只使用了R0寄存器
if((INT32U)pTaskEntry & 0x00000001) //* 如果運行在Thumb模式
{
*(--SP) = (INT32U)ARM_MODE_SVC_THUMB; //* CPSR為Thumb模式
}
else
{
*(--SP) = (INT32U)ARM_MODE_SVC_ARM; //* CPSR為Thumb模式
}
return SP;
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSStartPIT
//* 功能描述 : 開啟內(nèi)核調(diào)度中斷
//* 入口參數(shù) : 無
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
//* 獲取定時器間隔計數(shù)值
#define __macGetCount(cDivVal) (((48000000/cDivVal)/1000)*(1000/OS_TICKS_PER_SEC) - 1)
void OSStartPIT(void)
{
INT32U u32PIVR;
u32PIVR = AT91C_BASE_PITC->PITC_PIVR; //* 再讀一次,以確保PIT啟動后不立即觸發(fā)中斷
AT91C_BASE_PITC->PITC_PIMR = AT91C_PITC_PITEN | AT91C_PITC_PITIEN | __macGetCount(16);
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSIntCtxSw
//* 功能描述 : 改變?nèi)蝿?wù)切換標志以通知進行任務(wù)切換
//* 入口參數(shù) : 無
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSIntCtxSw(void)
{
blIsNeedCtxSw = OS_TRUE;
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSTickISR
//* 功能描述 : 內(nèi)核調(diào)度中斷ISR
//* 入口參數(shù) : 無
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSTickISR(void)
{
INT32U u32PIVR;
OSTimeTick();
u32PIVR = AT91C_BASE_PITC->PITC_PIVR;
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSInitHookBegin
//* 功能描述 : 系統(tǒng)初始化開始鉤子函數(shù)
//* 入口參數(shù) : 無
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSInitHookBegin(void)
{
blIsNeedCtxSw = OS_FALSE;
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSInitHookEnd
//* 功能描述 : 系統(tǒng)初始化結(jié)束鉤子函數(shù)
//* 入口參數(shù) : 無
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSInitHookEnd(void)
{
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSTaskCreateHook
//* 功能描述 : 任務(wù)建立鉤子函數(shù)
//* 入口參數(shù) : <pTcb>[in/out] 指向任務(wù)正在建立時的任務(wù)控制塊的指針
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSTaskCreateHook(OS_TCB *pTcb)
{
pTcb = pTcb;
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSTaskDelHook
//* 功能描述 : 任務(wù)刪除鉤子函數(shù)
//* 入口參數(shù) : <pTcb>[in/out] 指向任務(wù)正在刪除時的任務(wù)控制塊的指針
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSTaskDelHook(OS_TCB *pTcb)
{
pTcb = pTcb;
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSTaskIdleHook
//* 功能描述 : 空閑任務(wù)鉤子函數(shù)
//* 入口參數(shù) : 無
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSTaskIdleHook(void)
{
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSTaskStatHook
//* 功能描述 : 統(tǒng)計任務(wù)鉤子函數(shù)
//* 入口參數(shù) : 無
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSTaskStatHook(void)
{
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSTaskSwHook
//* 功能描述 : 任務(wù)切換鉤子函數(shù)
//* 入口參數(shù) : 無
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSTaskSwHook(void)
{
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSTCBInitHook
//* 功能描述 : 任務(wù)控制塊初始化鉤子函數(shù)
//* 入口參數(shù) : <pTcb>[in/out] 指向任務(wù)正在建立時的任務(wù)控制塊(TCB)的指針
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSTCBInitHook(OS_TCB *pTcb)
{
pTcb = pTcb;
}
//*------------------------------------------------------------------------------------------------
//* 函數(shù)名稱 : OSTimeTickHook
//* 功能描述 : 時鐘節(jié)拍鉤子函數(shù)
//* 入口參數(shù) : 無
//* 出口參數(shù) : 無
//*------------------------------------------------------------------------------------------------
void OSTimeTickHook(void)
{
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -