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

📄 main.c

📁 Real Time Operating System for Hi-Tech C compiler.
💻 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   */


unsigned int counter;

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

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

void TaskCount( void )
{
	counter = 0;

    for (;;) {
        counter++;
        
        if ( !(counter & 0x01FF) )
        	OSSignalMsg(MSG_UPDATE_PORT_P, (OStypeMsgP) &CODE_C);
    
        OS_Yield(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; 
    }
}


void TaskBlink( void )
{
	OStypeErr err;
	
	
    for (;;) {
        OS_Delay(50, TaskBlink1);

        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);
        }
        
    }
}

void main( void )
{
    Init();
    
    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); 
    
    OSEi(); 
    
    for (;;)
      OSSched();
}

⌨️ 快捷键说明

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