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

📄 main.c

📁 基于430单片机 UC-OS-II 信号量测试程序
💻 C
字号:
/*
*********************************************************************************************************
*                                                uC/OS-II
*                                          The Real-Time Kernel
*
*                              (c) Copyright 2002, Micrium, Inc., Weston, FL
*                                           All Rights Reserved
*
*                                                TI MSP430
*********************************************************************************************************
*/

#include "includes.h"
#include <SELCD.h>
#include <CLK.h>
#include <delay.h>
#include <key.h>


/*
*********************************************************************************************************
*                                               CONSTANTS
*********************************************************************************************************
*/

#define  TASK_STK_SIZE                  64       /* Size of each task's stacks (# of OS_STK entries)   */

/*
*********************************************************************************************************
*                                               VARIABLES
*********************************************************************************************************
*/
//unsigned char 
INT8U key;
INT8U pose;
INT8U err;


//EVENT
OS_EVENT *Fun_Semp;


//OS_STK
static OS_STK   TaskStartStk[TASK_STK_SIZE];
static OS_STK   FirstTaskStk[TASK_STK_SIZE];
static OS_STK   SecondTaskStk[TASK_STK_SIZE];
/*
*********************************************************************************************************
*                                           FUNCTION PROTOTYPES
*********************************************************************************************************
*/

void Fun(INT8U pose);

static void   TaskStart(void *data);                    /* Function prototypes of Startup task                */
static void   FirstTask(void *data);      
static void   SecondTask(void *data);   

/*$PAGE*/
/*
*********************************************************************************************************
*                                                MAIN
*********************************************************************************************************
*/


void  main (void)
{  
    WDTCTL = WDTPW + WDTHOLD;
    XT2_ON(0,0,0);
    OSInit();                                              /* Initialize uC/OS-II                      */
    Fun_Semp = OSSemCreate(0);
    OSTaskCreate(TaskStart,        (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 5);
    OSStart();                                             /* Start multitasking                      */
}

/*
*********************************************************************************************************
*                                            STARTUP TASK
*********************************************************************************************************
*/

void  TaskStart (void *pdata)
{ 
  #if OS_CRITICAL_METHOD == 3
       OS_CPU_SR cpu_sr;
  #endif
    pdata  = pdata;                                        /* Prevent compiler warning                 */
    OS_ENTER_CRITICAL();
    WDTCTL = WDT_MDLY_32;                                  /* Set time tick 32 mS                      */
    IE1   |= 0x01;                                         /* Enable Watchdog timer interrupts         */  
    _BIS_SR(GIE);                                          /* Application specific initialization      */
    LCD_Init();
    OS_EXIT_CRITICAL();
    OSTaskCreate(FirstTask,        (void *)0, &FirstTaskStk[TASK_STK_SIZE - 1], 6);
    OSTaskCreate(SecondTask,        (void *)0, &SecondTaskStk[TASK_STK_SIZE - 1], 7);
    OSTaskSuspend(OS_PRIO_SELF);
    while(1)
      ;
}



void FirstTask (void *pdata)
{  
   pdata  = pdata; 
    while(1)
    {
      OSSemPend(Fun_Semp,0,&err);
      Display_Array("fi",2,0x80+pose);
      pose++;
      Fun(pose);
      pose++;
      //OSSemPost(Fun_Semp);
      OSTimeDlyHMSM(0,0,10,0);
    }
}


void SecondTask(void *pdata)
{ 
  pdata  = pdata; 
  while(1)
  {
      //OSSemPend(Fun_Semp,0,&err);
      Display_Array("se",2,0x80+pose);
      pose++;
      Fun(pose);
      pose++;
      OSSemPost(Fun_Semp);
      OSTimeDlyHMSM(0,0,20,0);
  }
    
}


void Fun(INT8U pose)
{
  Display_Array("ou",2,0x80+pose);
}

⌨️ 快捷键说明

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