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

📄 test0.c

📁 Renesas(Hitachi SuperH)SH7708的UCOS2源码,uC/OS-II 版本2.52.
💻 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 + -