⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_cpu_c.c

📁 ucos-ii在C8051F020上的移植
💻 C
字号:
#define  OS_CPU_GLOBALS
#include "includes.h"





OS_STK  *OSTaskStkInit (void (*task)(void *pd), void *pdat, OS_STK *ptos, INT16U opt) KCREENTRANT
{
    OS_STK *stk;


        opt    = opt;                                     /* 'opt' is not used, prevent warning   */
        stk   =ptos;
		*stk++   = (INT16U)task & 0xFF;                   /* PCL         */
        *stk++   = (INT16U)task >> 8;                     /* PCH         */
        *stk++   = 0x00;                                  /* ACC         */
        *stk++   = 0x0a;                                  /* B         */
        *stk++   = 0x10;                                  /* DPH           */
        *stk++   = 0x01;                                  /* DPL          */
        *stk++   = 0x00;                                  /* PSW */
        *stk++   = 0x00;                                  /* R0 */
        *stk++   = (UBYTE)(pdat);                         /* R1   */
        *stk++   = (UBYTE)((UWORD)pdat >>8 );             /* R2          */
        *stk++   = (UBYTE)((ULONG)pdat >>16 );            /* R3          */
        *stk++   = 0x04;                                  /* R4          */
        *stk++   = 0x05;                                  /* R5          */
        *stk++   = 0x06;                                  /* R6         */
        *stk++   = 0x07;                                  /* R7         */
        *stk++   = 15;                                    /* DS = Current value of DS    */
        *stk++   = (INT16U)(ptos+128)>>8;
		*stk     = (INT16U)(ptos+128)&0xff;
	return ((OS_STK *)stk-2);
}



#if OS_CPU_HOOKS_EN


void OSTaskCreateHook (OS_TCB *ptcb) KCREENTRANT
{
    ptcb = ptcb;                       /* Prevent compiler warning                                     */
}


void OSTCBInitHook(OS_TCB *ptcb) KCREENTRANT
{
    ptcb = ptcb;                       /* Prevent compiler warning                                     */
   
}


void OSTaskSwHook (void) KCREENTRANT
{
   OS_STK *temp;
   temp=OSTCBCur->OSTCBStkPtr;
   if (*temp>MaxStk)
      MaxStk=*temp;
}
#if OS_TASK_STAT_EN
void OSTaskStatHook(void) KCREENTRANT
{
}
#endif
void OSInitHookBegin(void)KCREENTRANT
{
}

void OSInitHookEnd(void)KCREENTRANT
{
}
void OSTaskIdleHook(void)KCREENTRANT
{
}
#endif

void OSTimeTickHook(void)KCREENTRANT
{
}

void InitTimer0(void) KCREENTRANT
{
    TMOD=TMOD&0xF0;
    TMOD=TMOD|0x01;    //模式1(16位定时器),仅受TR0控制
    TH0=(INT16U)(SYS_TIMER_RELOAD)>>8;    //定义Tick=100次/秒(即0.01秒/次)
    TL0=(INT16U)(SYS_TIMER_RELOAD)&0xff;    //OS_CPU_A.ASM  和  OS_TICKS_PER_SEC
    ET0=1;       //允许T0中断
    TR0=1;   
}

//重装载定时器0
void ReloadTimer0(void)
{
	TF0=0;   
	TH0=(INT16U)(SYS_TIMER_RELOAD)>>8;    //定义Tick=100次/秒(即0.01秒/次)
    TL0=(INT16U)(SYS_TIMER_RELOAD)&0xff;    //OS_CPU_A.ASM  和  OS_TICKS_PER_SEC
    TR0=1;   
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -