?? os_cpu.c
字號:
/*--------------------------------------------------------------------------------*-
* ck/OS
* 微處理器硬件相關文件
* -------------------------------
*
*文件名稱:OS_CPU.c
*
*作 者:馮耿超
*版 本:V1.1.2
*創建日期:2008年01月31日
*
*文件描述:OS_CPU.c文件主要包括三個內核函數:OS_Updata_Init()、OS_Tick_Updata()、
* OS_Start()、分別為系統時標刷新初始化,時鐘節拍更新,系統開始。本文件
* 與MCU的硬件緊密相關。
-*--------------------------------------------------------------------------------*/
#include "..\INC\OS_cfg.h"
#include "..\INC\OS_CPU.h"
#include "..\INC\OS_CORE.h"
#define CLOCK 22544384 // CPU configured for 22.544384 MHz clock
#define T0_Freq 200 // Timer 0 Reload Frequency
#define T0_LD ((unsigned short )(CLOCK / 16 / T0_Freq))
//定義任務結構數組
extern sTask OS_TCB[OS_MAX_TASK];
/*--------------------------------------------------------------------------------*-
*函數原型:OS_Updata_Init(void)
*
*輸入參數:無
*
*輸出參數:無
*
*返 回 值:無
*
*描 述:系統初始化,刪除所有的任務并設置時標長度
-*--------------------------------------------------------------------------------*/
void OS_Updata_Init(void)
{
IRQEN = 0x00000004; /* Configure Timer 0 */
T0LD = T0_LD; /* Timer reload value */
T0CON = 0xC0; /* Enable Timer0 */
}
/*--------------------------------------------------------------------------------*-
*函數原型:OS_Tick_Updata(void)
*
*輸入參數:無
*
*輸出參數:無
*
*返 回 值:無
*
*描 述:系統時標更新服務程序,使用定時計數器T0的中斷服務程序ISR產生時鐘節拍,
* 每更新一次時鐘節拍時遍歷一次任務,如果有任務就緒則將任務運行標志位
* 置位,中斷返回后執行該任務(必須在前一任務執行完交出CPU使用權時,該
* 任務才被執行)
-*--------------------------------------------------------------------------------*/
void IRQ_Handler(void) __irq
{
tByte Index;
if(IRQSIG & 0x00000004){
for(Index = 0;Index < OS_MAX_TASK;Index++)//遍歷任務
{
if(OS_TCB[Index].aTask)//是否存在任務
{
if(OS_TCB[Index].Delay == 0)//如果延遲時間為0開始執行一次任務
{
OS_TCB[Index].RunMe += 1;
if(OS_TCB[Index].Period)//如果周期非0,將周期付給延遲時間初值
{
OS_TCB[Index].Delay = OS_TCB[Index].Period;
}
}
else//延遲時間還沒到,延遲初值減1
{
OS_TCB[Index].Delay -=1;
}
}
}
}
T0CLRI = 1;
}
/*--------------------------------------------------------------------------------*-
*函數原型:OS_Start(void)
*
*輸入參數:無
*
*輸出參數:無
*
*返 回 值:無
*
*描 述:系統任務開始運行,開中斷
-*--------------------------------------------------------------------------------*/
void OS_Start(void)//任務開始
{
while(1)
{
OS_Assign_Task();
}
}
/*--------------------------------------------------------------------------------*-
-*-------------------------------End of file--------------------------------------*-
-*--------------------------------------------------------------------------------*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -