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

📄 os_cpu_c.c

📁 基于51单片机来实现UCOS用一个串口来看到实现阶段
💻 C
字号:
#include "includes.h"
void OSTaskStkInit(void  (*task)(void *pd)reentrant, 
			       OS_STKCB *stkcb, 
			       INT16U    opt
	               )reentrant
{
    OS_STK *stk;        
    opt = opt;
    stk  =stkcb->OSTKBtomPtr;         //用户栈最低有效地址

    *stk++   = 0x0f;			   //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
}
//=======================================================================
void TimeTickConfig(void)
{
    TMOD &= 0xf0;
    TMOD |= 0x01;
    TH0 = 0x3c;
    TH0 = 0xb0;
	ET0=1;
    TR0 = 1;
}
//=======================================================================
#if USE_Pre_ExternInt0
void ExternInt0(void)
{

}
#endif

#if USE_Pre_ExternInt1
void ExternInt1(void)
{

}
#endif

#if USE_Pre_TimeInt1
void Time1Int(void)
{

}
#endif

#if USE_Pre_SeryInt
void SeryInt(void)
{      
	INT8U c;
	if(TI){
		TI=0;
		if(*O_buf){
			SBUF=*O_buf;
			O_buf++;	
		}else{
			O_dex=0;
		}
	}
	
	if(RI){
	RI=0;
	c=SBUF;
		switch(c){
ESC:	case 0x0d :	if(I_dex==0)I_buf[0]=0x0d;	    //回车   	 
					OSSemPost(Sem1);
					break;
		 
		case 0x08 :                                 //退格
					if(I_dex!=0){
					I_dex--;
					SBUF=c;
					}
					break;
		
		case 0x1b : if(OSTCBCur->OSTCBPrio==2||OSTCBCur->OSTCBPrio==3){
						OSTaskSuspend(OSTCBCur->OSTCBPrio);
						I_dex=0;
						goto ESC ;
					 }
					 break;
		default:   				                    //其它 装入缓冲区
					I_buf[I_dex++]=c;
					SBUF=c;
					break;     
		}
	}
}
#endif
//=======================================================================
void OSTaskSwHook (void)reentrant
{
     OSTCBCur  = OSTCBHighRdy;
     OSPrioCur = OSPrioHighRdy;
}
//-----------------------------------------------------------------------
void OSTimeTickHook (void)reentrant
{

}
//-----------------------------------------------------------------------
void OSTaskCreateHook (OS_TCB *ptcb)reentrant
{
    ptcb = ptcb; 
}
//-----------------------------------------------------------------------
#if  OS_TASK_STAT_EN 
void OSTaskStatHook(void)reentrant
{

}
#endif

#if OS_TASK_DEL_EN
void OSTaskDelHook (OS_TCB *ptcb)reentrant
    {
        ptcb = ptcb;  
    }
#endif
//=======================================================================
#if OS_CPU_HOOKS_EN
    //--------------------------------------------
    void OSInitHookBegin (void)reentrant
    {
    }
    //--------------------------------------------
    void OSInitHookEnd (void)reentrant
    {
    }
    //--------------------------------------------
    void OSTCBInitHook (OS_TCB *ptcb)reentrant
    {
        ptcb = ptcb;
    }
    //--------------------------------------------
    void OSTickISRHook(void)reentrant
    {
	
    }
    //--------------------------------------------
    void OSRunningTrue(void)reentrant
    {
      OSRunning=TRUE;
    }
#endif

⌨️ 快捷键说明

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