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

📄 main.c

📁 嵌入式操作系统Salvo 在单片机C8051F350上的移植
💻 C
字号:
/************************************************************ 
Copyright (C) 1995-2002 Pumpkin, Inc. and its
Licensor(s). Freely distributable.

$Source: C:\\RCS\\d\\salvo\\tut\\tu6\\main.c,v $
$Author: aek $
$Revision: 3.10 $
$Date: 2003-07-08 23:15:13-07 $

Source for tutorial programs.

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

#include "main.h"
#include "salvo.h"

#define TASK_COUNT_P      OSTCBP(1) /* task #1        */
#define TASK_SHOW_P       OSTCBP(2) /*  ""  #2        */
#define TASK_BLINK_P      OSTCBP(3) /*  ""  #3        */


#define PRIO_COUNT        12        /* task priorities*/
#define PRIO_SHOW         10        /*  ""            */
#define PRIO_BLINK        2         /*  ""            */
#define MSG_UPDATE_PORT_P OSECBP(1) /* semaphore #1   */
#define BINSEM_UPDATE_RES    OSECBP(2)

unsigned int counter;

char CODE_B = 'B';
char CODE_C = 'C';

_OSLabel(TaskCount1)
_OSLabel(TaskShow1)
_OSLabel(TaskBlink1)


void TaskCount( void )
{
	counter = 0;

    for (;;) 
		{		
		    OS_WaitBinSem(BINSEM_UPDATE_RES, OSNO_TIMEOUT, TaskCount1);
						    
        counter++;

				OSSignalBinSem(BINSEM_UPDATE_RES);
        
				if(counter%60==0)
        //if ( !(counter & 0x01FF) )
        	OSSignalMsg(MSG_UPDATE_PORT_P, (OStypeMsgP) &CODE_C);
    
       //OS_Yield(TaskCount1);
			  OS_Delay(50, TaskCount1);
				
    }
}

void TaskShow( void )
{
    OStypeMsgP msgP;
    
    
    InitPORT();
    
    for (;;) 
		{
        OS_WaitMsg(MSG_UPDATE_PORT_P, &msgP, OSNO_TIMEOUT, TaskShow1);
        
        if ( *(char *)msgP == CODE_C ) 
				{
		 	      PORT = (PORT & ~0xFE) | ((counter >> 8) & 0xFE);
        }
        else
            PORT ^= 0x01;
			
			 //printf ("Task show runing\n");   
    }
}


void TaskBlink( void )
{
 	  OStypeErr err; 	
	 
		//unsigned char i;

    for (;;) 
		{
		    OS_WaitBinSem(BINSEM_UPDATE_RES, OSNO_TIMEOUT, TaskBlink1);
				
				if(counter>0)		    
           counter--;

				OSSignalBinSem(BINSEM_UPDATE_RES);	
		   					 

        err = OSSignalMsg(MSG_UPDATE_PORT_P, (OStypeMsgP) &CODE_B);	        
			
        if ( err == OSERR_EVENT_FULL ) 
				{
        	OS_SetPrio(PRIO_SHOW+1, TaskBlink2);
        	OSSignalMsg(MSG_UPDATE_PORT_P, (OStypeMsgP) &CODE_B);
        	OSSetPrio(PRIO_BLINK);
        }	


				//printf ("Task Blink runing\n");
	
        OS_Delay(20, TaskBlink1);

				//OS_Yield(TaskBlink1);
					  
        
    }
}




void Init_UART(void)
{	 	
    //SCON0  = 0x10;		        /* SCON: mode 1, 8-bit UART, enable rcvr      */
    //TMOD |= 0x20;             /* TMOD: timer 1, mode 2, 8-bit reload        */
    //TH1   = 0x96;					   /* TH1:  reload value for 19200 baud @ 49MHz   */
                
    //TR1   = 1;                  /* TR1:  timer 1 run                          */
    //TI0    = 1;                 /* TI:   set TI to send first char of UART    */
}




void Oscillator_Init()
{
    unsigned char i;

    OSCICN    = 0x83;
    FLSCL     = 0x10;
    CLKMUL    = 0x80;
    for (i = 0; i < 20; i++);    // Wait 5us for initialization
    CLKMUL    |= 0xC0;
    //while ((CLKMUL & 0x20) == 0);
    CLKSEL    = 0x02;
}



void main( void )
{

    Oscillator_Init();

    Init();

    Init_UART();

    OSInit();			
    
    OSCreateTask(TaskCount, TASK_COUNT_P, PRIO_COUNT);
    OSCreateTask(TaskShow,  TASK_SHOW_P,  PRIO_SHOW);
    OSCreateTask(TaskBlink, TASK_BLINK_P, PRIO_BLINK);		
    
    OSCreateMsg(MSG_UPDATE_PORT_P, (OStypeMsgP) 0);
		OSCreateBinSem(BINSEM_UPDATE_RES, 1); 
    
    OSEi(); // EA = 1
    
    for (;;)
      OSSched();
			
}

⌨️ 快捷键说明

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