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

📄 ucos_ii.c

📁 在C8051F120内移植uCOS-II
💻 C
字号:
//******************************************************************
#define  OS_GLOBALS

#include <includes.h>

OS_STK Vacation[0x20]    _at_ 0x60;


//******************************************************************
//* mytest system TI0mer initial
#define   TIME_10mS     (OS_TICKS_PER_SEC /100)
#define   TIME_50mS     (OS_TICKS_PER_SEC /20 )
#define   TIME_100mS    (OS_TICKS_PER_SEC /10 )
#define   TIME_200mS    (OS_TICKS_PER_SEC /5  )
#define   TIME_500mS    (OS_TICKS_PER_SEC /2  )
#define   TIME_1S       (OS_TICKS_PER_SEC)
#define   TIME_2S       (OS_TICKS_PER_SEC * 2)
#define   TIME_3S       (OS_TICKS_PER_SEC * 3)
#define   TIME_4S       (OS_TICKS_PER_SEC * 4)
#define   TIME_5S       (OS_TICKS_PER_SEC * 5)

//******************************************************************
//* mytest system crystalloid
#define   XA_CRYSTAL_FREQ   (INT32U)(22118400L)

//******************************************************************
//* SCR crystalloid
#define	  CFG_SCR_4	SCR&0x03 
#define	  CFG_SCR_16	SCR&0x07
#define	  CFG_SCR_64	SCR&0x0B

#define	  OS_CFG_SCR	CFG_SCR_4

//******************************************************************
//* mytest system 
#define   TASK_STK_SIZE   128 //* 128 word
#define   NUMBER_TASKS    2   

//******************************************************************
//* mytest task stack define
OS_STK  xdata   AnPrintfStk[TASK_STK_SIZE];
OS_STK  xdata   BnPrintfStk[TASK_STK_SIZE];
//OS_STK          Vacation[0x30]            _at_ 0x50;

//******************************************************************
//* OS_EVENT
OS_EVENT xdata * AnPrintfWait;
OS_EVENT xdata * BnPrintfWait;



//******************************************************************

INT8U  xdata   OSCtxSwCtrMax; 
INT8U  xdata   AnPrintfData[]   = {0xC4,0xE3,0xBA,0xC3,0xA3,0xAC,0xCE,0xD2,
                           0xCA,0xC7,0xC8,0xCE,0xCE,0xF1,0x41,0x6E,
                           0x5C,0x6E};
INT8U  xdata   BnPrintfData[]   = {0xC4,0xE3,0xBA,0xC3,0xA3,0xAC,0xCE,0xD2,
                           0xCA,0xC7,0xC8,0xCE,0xCE,0xF1,0x42,0x6E,
                           0x5C,0x6E};

//-------------------------------------------------------------------
void  TimeTickInitial(void);
void  AnPrintf(void *dataptr);   //* Startup Task          
void  BnPrintf(void *dataptr);   //* 8 IdenTI0cal Tasks 
void  Serial_initialize(void);
//staTI0c void XAInit (void);
//staTI0c void TI0merInit (INT8U tmr, INT16U freq, INT8U prio);
//staTI0c void SeryComm0Init (INT16U baud);
//******************************************************************

//******************************************************************
void main (void)
{
    //XAInit(); //* XA ConfiguraTI0on  
	   
	WDTCN = 0xDE;

    WDTCN = 0xAD; 
	                     
    OSInit(); //* Initialize uC/OS-II, The Real-TI0me Kernel 
    
    BnPrintfWait = OSSemCreate(0); 
    
    OSTaskCreateExt(AnPrintf,(void *)0,&AnPrintfStk[TASK_STK_SIZE-1],0x01,0x00,&AnPrintfStk[0],TASK_STK_SIZE,(void*)0,0);

    OSTaskCreateExt(BnPrintf,(void *)0,&BnPrintfStk[TASK_STK_SIZE-1], 0x02,0x00,&BnPrintfStk[0],TASK_STK_SIZE,(void*)0,0);
 
    TimeTickConfig();
    Serial_initialize();
	OSStart(); 
	while(1)          
	;
} 

void  AnPrintf(void *dataptr)
{   
    
    INT8U i;
    INT8U err;
    dataptr = dataptr;
    while(1)
    {

        for(i=0;i<18;)
        {   
            if(TI0)
            {
            	TI0= 0;
            	SBUF0 = AnPrintfData[i];
	        i++;    
	    }
          
        }
        OSSemPend(BnPrintfWait,10,&err);
	
    }
    
}

//******************************************************************
void  BnPrintf(void *dataptr)
{
    
    INT8U i;
    dataptr = dataptr;
    EA =1;
    while(1)
    {

    	TI0 = 1;
        for(i=0;i<18;)
        {   if(TI0)
            {
            	TI0 = 0;
            	SBUF0 = BnPrintfData[i];
            	i++;
	     }
        
        }
        
	OSSemPost(BnPrintfWait);
	
    }
   
}
void Serial_initialize()
{
    SCON0  = 0x50;  //* SCON: mode 1, 8-bit UART, enable rcvr */
    TMOD |= 0x20;  //* TMOD: TI0mer 1, mode 2, 8-bit reload */
    TH1   = 0xfd;  //* TH1:  reload value for 1200 baud @ 16MHz */
    TR1   = 1;     //* TR1:  TI0mer 1 run */
    TI0    = 1;     //* TI0:   set TI0 to send first char of UART */
}

⌨️ 快捷键说明

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