?? os_cpu_c.c
字號:
#ifndef OS_MASTER_FILE
#include "includes.h"
#endif
void *OSTaskStkInit (void (*task)(void *pd), void *ppdata, void *ptos, INT16U opt) reentrant
{
OS_STK *stk;
ppdata = ppdata;
opt = opt; //opt沒被用到,保留此語句防止告警產生
stk = (OS_STK *)ptos; //用戶堆棧最低有效地址
*stk++ = 15; //用戶堆棧長度
*stk++ = (INT16U)task & 0xFF; //任務地址低8位
*stk++ = (INT16U)task >> 8; //任務地址高8位
*stk++ = 0x00; //PSW
*stk++ = 0x0A; //ACC
*stk++ = 0x0B; //B
*stk++ = 0x00; //DPL
*stk++ = 0x00; //DPH
*stk++ = 0x00; //R0
*stk++ = 0x01; //R1
*stk++ = 0x02; //R2
*stk++ = 0x03; //R3
*stk++ = 0x04; //R4
*stk++ = 0x05; //R5
*stk++ = 0x06; //R6
*stk++ = 0x07; //R7
//不用保存SP,任務切換時根據用戶堆棧長度計算得出。
*stk++=(INT16U)(ptos+MaxStkSize)>>8;
*stk++=(INT16U)(ptos+MaxStkSize)&0xff;
return ((void *)ptos);
}
#if OS_CPU_HOOKS_EN
void OSTaskCreateHook (OS_TCB *ptcb) reentrant
{
ptcb = ptcb; /* Prevent compiler warning */
}
//void OSTaskDelHook (OS_TCB *ptcb)
//{
//ptcb = ptcb; /* Prevent compiler warning */
//}
//void OSTaskSwHook(void)
//{
//}
//void OSTaskStatHook(void)
//{
//}
void OSTaskIdleHook(void) reentrant
{
}
void OSTimeTickHook (void) reentrant
{
}
#endif
#if OS_VERSION >= 204
void OSTCBInitHook(OS_TCB *ptcb) reentrant
{
ptcb = ptcb;
}
void OSInitHookEnd(void) reentrant
{
}
void OSInitHookBegin(void) reentrant
{
}
#endif
//初始化定時器0
void InitTimer0(void)
{
TMOD=TMOD&0xF0;
TMOD=TMOD|0x01; //模式1(16位定時器),僅受TR0控制
TH0=0x70; //定義Tick=50次/秒(即0.02秒/次)
TL0=0x00; //OS_CPU_A.ASM 和 OS_TICKS_PER_SEC
ET0=1; //允許T0中斷
TR0=1;
}
void serial_initial(void)
{
SCON=0x52;
TMOD=0x20;
TH1=0xf3;
TR1=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -