📄 main.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 + -