📄 test0.c
字号:
/* Hitachi SH7709 UCOS-II demo */
/* TEST.C */
/* Kuan, Yeou-Fuh, July 1999 */
#include "includes.h"
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define TASK_STK_SIZE 256 /* Size of each task's stacks (# of WORDs) */
#define N_TASKS 5 /* Number of identical tasks */
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; /* Tasks stacks */
OS_STK TaskStartStk[TASK_STK_SIZE];
char TaskData[N_TASKS]; /* Parameters to pass to each task */
//OS_EVENT *RandomSem;
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void Task(void *data); /* Function prototypes of tasks */
void TaskStart(void *data); /* Function prototypes of Startup task */
void _putc ( int P );
void DbgStr ( char * );
void LEDUpperBit(void * data);
void LEDLowerBit(void * data);
void SendLEDData(void * data);
void Task1(void * data);
void Task2(void * data);
/********************************************************************************************************
FOR NEW TASK
*********************************************************************************************************/
#define LED (*(unsigned short*)0xB0C00000)
INT16U LED_DATA;
OS_EVENT * LEDSem;
OS_EVENT * AckMbox;
OS_EVENT * TxMbox;
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
void main ()
{
OSInit (); /* Initialize uC/OS-II */
// LED_DATA = 0x8100;
// LEDSem = OSSemCreate(1);
// AckMbox = OSMboxCreate((void *) 0);
// TxMbox = OSMboxCreate((void *) 0);
// StartTimer ( 0 );
/* highest priority task */
OSTaskCreate ( TaskStart, (void *) 0, (void *) &TaskStartStk [TASK_STK_SIZE - 1], 0 );
// OSTaskCreate (LEDUpperBit, (void *) 0, (void *) &TaskStk[0][TASK_STK_SIZE - 1], 5 );
// OSTaskCreate (LEDLowerBit, (void *) 0, (void *) &TaskStk[1][TASK_STK_SIZE - 1], 6 );
// OSTaskCreate (SendLEDData, (void *) 0, (void *) &TaskStk[2][TASK_STK_SIZE - 1], 7 );
// OSTaskCreate (Task1, (void *) 0, (void *) &TaskStk[3][TASK_STK_SIZE - 1], 8 );
// OSTaskCreate (Task2, (void *) 0, (void *) &TaskStk[4][TASK_STK_SIZE - 1], 9 );
OSStart (); /* Start multitasking */
}
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
void TaskStart (void *data)
{
OS_CPU_SR cpu_sr ;
int i;
data = data; /* Prevent compiler warning */
StartTimer ( 0 ); /* start OS tick timer */
/* this is done in the first task to run */
/* this task has the highest priority (0) */
// _putc ( 'A' );
// OSStatInit(); /* initialise the statistics task */
// _putc ( 'B' );
DbgStr("task starting...\n");
/*
OS_ENTER_CRITICAL();
OS_EXIT_CRITICAL();
*/
for ( i = 0; i < N_TASKS; ++i )
{
OSTaskCreate ( Task, (void *) (0x30 + i), (void *) &TaskStk [i][TASK_STK_SIZE - 1], i + 1 );
}
while ( 1 )
{
// _putc ( 'S' );
DbgStr("Task 0 is running");
_putc(10);_putc(13);
_putc(10);_putc(13);
OSTimeDly ( 60 );
}
}
void Task ( void * data )
{
while ( 1 )
{
DbgStr("Task ");
_putc ( (int) data );
DbgStr(" is running");
_putc(10);_putc(13);
OSTimeDly ( 30 ); /* Wait 500ms */
}
}
void LEDUpperBit(void * data)
{
INT16U LEDtmp;
INT8U err;
data = data;
for(;;)
{
OSSemPend(LEDSem,0,&err); // wait semaphores to access LED_DATA
LEDtmp = LED_DATA & 0xf000;
switch (LEDtmp ) // shit the upper 4 bit led to left
{
case(0x1000):
LEDtmp = 0x2000;
break;
case(0x2000):
LEDtmp = 0x4000;
break;
case(0x4000):
LEDtmp = 0x8000;
break;
default:
LEDtmp = 0x1000;
break;
}
LED_DATA = LED_DATA & 0x0fff;
LED_DATA = LED_DATA | LEDtmp;
LED = LED_DATA;
OSSemPost(LEDSem); // post the semaphores to let other task access LED_DATA
OSTimeDly ( 50 );
}
}
void LEDLowerBit(void * data)
{
INT16U LEDtmp;
INT8U err;
for(;;)
{
OSSemPend(LEDSem,0,&err); // wait semaphores to access LED_DATA
LEDtmp = LED_DATA & 0x0f00;
switch (LEDtmp ) // shit the lower 4 bit led to right
{
case(0x0800):
LEDtmp = 0x0400;
break;
case(0x0400):
LEDtmp = 0x0200;
break;
case(0x0200):
LEDtmp = 0x0100;
break;
default:
LEDtmp = 0x0800;
break;
}
LED_DATA = LED_DATA & 0xf0ff;
LED_DATA = LED_DATA | LEDtmp;
LED = LED_DATA;
OSSemPost(LEDSem); // post the semaphores to let other task access LED_DATA
OSTimeDly ( 50 );
}
}
void SendLEDData(void * data)
{
INT8U LEDtmp;
INT8U err;
int i;
for(;;)
{
OSSemPend(LEDSem,0,&err); // wait semaphores to access LED_DATA
DbgStr(" Current LED data is : ");
LEDtmp = (LED_DATA >> 8) & 0xff;
for(i=0 ; i<8 ; i++) // post LED_DATA to SCI
{
if((LEDtmp & 0x80) == 0x80)
{
DbgStr("1");
}
else
{
DbgStr("0");
}
LEDtmp = LEDtmp << 1;
}
_putc(10);_putc(13);
OSSemPost(LEDSem); // post the semaphores to let other task access LED_DATA
OSTimeDly ( 50 );
}
}
void Task1(void * data)
{
char txmsg;
char * rxmsg;
INT8U err;
data = data;
txmsg = 'A';
for(;;)
{
OSTimeDlyHMSM(0,0,4,0);
OSMboxPost(TxMbox, (void *) & txmsg);
rxmsg = OSMboxPend(AckMbox, 0, &err);
DbgStr(rxmsg);
// DbgStr("\n");
_putc(10);_putc(13);
txmsg ++;
if(txmsg == 'Z'){
txmsg = 'A';
}
}
}
void Task2(void * data)
{
char * rxmsg;
INT8U err;
data = data;
for(;;)
{
rxmsg = (char*)OSMboxPend(TxMbox, 0 , &err);
DbgStr(" received message is : ");
DbgStr(rxmsg);
// DbgStr("\n");
_putc(10);_putc(13);
OSTimeDlyHMSM(0,0,3,0);
OSMboxPost(AckMbox, (char *)" acknowledgement message received");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -