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

📄 main.c

📁 8051单片机的ucos移植
💻 C
字号:
#include "includes.h"

#define TASK0_PRIO 0
#define TASK1_PRIO 1
#define TASK2_PRIO 2
#define TASK3_PRIO 3

#define TASK0_STK_SIZE 2048
#define TASK1_STK_SIZE 2048
#define TASK2_STK_SIZE 2048
#define TASK3_STK_SIZE 2048


void task0( void *pd );
void task1( void *pd );
void task2( void *pd );
void task3( void *pd );

INT8U task0_stack[TASK1_STK_SIZE];
INT8U task1_stack[TASK1_STK_SIZE];
INT8U task2_stack[TASK2_STK_SIZE];
INT8U task3_stack[TASK3_STK_SIZE];

OS_EVENT * mbox_1;
OS_EVENT * mbox_2;
OS_EVENT * mbox_3;



main()
{

	IE &= 0x7F;

	serinit( 9600 );

    IE &= 0x7F;

    OSInit();

    OSSetTimer();
    OSSetTickPerSec( OS_TICKS_PER_SEC );

    
    printf("uCOS-II 8051 Port Demo Program\n");

    mbox_1 = OSMboxCreate( (void*) 3 );
    mbox_2 = OSMboxCreate( (void*) 0 );
    mbox_3 = OSMboxCreate( (void*) 0 );


    OSTaskCreate( &task0, 0, (void*)(&task0_stack[2047]), TASK0_PRIO );
    OSTaskCreate( &task1, 1, (void*)(&task1_stack[2047]), TASK1_PRIO );
    OSTaskCreate( &task2, 2, (void*)(&task2_stack[2047]), TASK2_PRIO );
    OSTaskCreate( &task3, 3, (void*)(&task3_stack[2047]), TASK3_PRIO );


    OSStart(); 

    while( 1 );

}

void task0( void *pd )
{
   pd = pd;

   OSInterruptInit();

   while( 1 )
   {
      
      OS_ENTER_CRITICAL(); 
      printf("task 0 is running and then sleep, parameter = %d \n", (INT16U)pd );
      OS_EXIT_CRITICAL();

      OSTimeDly(1);
   } 
} 

void task1( void *pd )
{
   INT8U err;
   INT16U msg;
 
   pd = pd;

   while( 1 )
   {
      msg = (INT16U)OSMboxPend( mbox_1, 0, &err );
      
      OS_ENTER_CRITICAL(); 
      printf("task 1 got a message from task %d, parameter = %d \n", msg, (INT16U)pd );
      OS_EXIT_CRITICAL();

      OSMboxPost( mbox_2, (void*)1 );
   } 
} 


void task2( void *pd )
{
   INT8U err;
   INT16U msg;

   pd = pd;

   while( 1 )
   {
      msg = (INT16U)OSMboxPend( mbox_2, 0, &err );
      
      OS_ENTER_CRITICAL(); 
      printf("task 2 got a message from task %d, parameter = %d\n", msg, (INT16U)pd);
      OS_EXIT_CRITICAL();

      OSMboxPost( mbox_3, (void*)2 );
   } 
}

void task3( void *pd )
{
   INT8U err;
   INT16U msg;

   pd = pd;

   while( 1 )
   {
      msg = (INT16U)OSMboxPend( mbox_3, 0, &err );
      
      OS_ENTER_CRITICAL(); 
      printf("task 3 got a message from task %d, parameter = %d\n", msg, (INT16U)pd);
      OS_EXIT_CRITICAL();

      OSMboxPost( mbox_1, (void*)3 );
   } 
}

⌨️ 快捷键说明

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