main.c
来自「lpc214x_ucosii_280_Keil VERLED OSSem基于UC」· C语言 代码 · 共 152 行
C
152 行
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
** mcu123.com add keil
********************************************************************************************************/
#include "..\arm\config.h"
#include "cfg.h"
#define TaskStkLengh 64 //Define the Task0 stack length 定义用户任务0的堆栈长度
#define LED0 0X00000400
#define LED1 0X00000800
OS_STK TaskStk0 [TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈
OS_STK TaskStk1 [TaskStkLengh]; //Define the Task1 stack 定义用户任务1的堆栈
OS_EVENT *Uart0Point; //定义一个信号量指针,当建立一个信号量成功时,会返回一个非零的指针
void Task0(void *pdata); //Task0 任务0
void Task1(void *pdata); //Task1 任务1
int main (void)
{ UARTxInit(0,115200); //初始化串口0,115200 bps
sprintf(str,"UART0 IS SET 115200 BPS! \n\r");
UARTxSendStr(0,str);
OSInit ();
OSTaskCreate (Task0,(void *)0, &TaskStk0[TaskStkLengh - 1], 2); //建立任务0
OSTaskCreate (Task1,(void *)0, &TaskStk1[TaskStkLengh - 1], 3); //建立任务1
OSStart ();
return 0;
}
/*********************************************************************************************************
** Task0 任务0
********************************************************************************************************/
void Task0 (void *pdata)
{ uint8 err; //定义一个变量在OSSemPend(Uart0Point,0,&err)用到
uint8 sem=0x02; //定义一个非0的信号量 ,如果为0,则信号量无效
pdata = pdata;
TargetInit ();
IO0DIR|=LED0;
sprintf(str,"TASK0 IS OSSemCreate(sem) \n\r");
UARTxSendStr(0,str);
Uart0Point= OSSemCreate(sem); /* 建立信号量 */
if (Uart0Point == NULL)
{
while (1);
}
sprintf(str,"TASK0 IS OSSemCreate(sem) successful! \n\n\n\r\r\r"); /* 建立信号量成功 */
UARTxSendStr(0,str);
while (1)
{
sprintf(str,"TASK0 IS requisition UART0 \n\r");
UARTxSendStr(0,str);
OSSemPend(Uart0Point,0,&err); //请求信号量
if (&err!=OS_NO_ERR)
{
sprintf(str,"TASK0 requisition successful\n\r");
UARTxSendStr(0,str);
//--------------------------------------------------------------------------------
if ((IO0PIN & LED0) ==0)
{ IO0SET=IO0SET |LED0;
sprintf(str,"TASK0 IS RUNNING , P0.10=1\n\r");
}
else //led0闪烁
{ IO0CLR=IO0CLR|LED0 ;
sprintf(str,"TASK0 IS RUNNING , P0.10=0\n\r");
}
UARTxSendStr(0,str);
//--------------------------------------------------------------------------------
sprintf(str,"TASK0 Set Free UART0 \n\r");
UARTxSendStr(0,str);
OSSemPost(Uart0Point); //用完后,释放信号量
sprintf(str,"TASK0 IS Running OSTimeDly(OS_TICKS_PER_SEC/10)\n\n\n\r\r\r");
UARTxSendStr(0,str);
}
OSTimeDly(OS_TICKS_PER_SEC/2); //延时0.1秒
}
}
/*********************************************************************************************************
** Task1 任务1
********************************************************************************************************/
void Task1 (void *pdata)
{ uint8 err;
pdata = pdata;
TargetInit ();
IO0DIR|=LED1;
while (1)
{
sprintf(str,"TASK1 IS requisition UART0 \n\r");
UARTxSendStr(0,str);
OSSemPend(Uart0Point,0,&err); //请求信号量
if (&err!=OS_NO_ERR)
{
sprintf(str,"TASK1 requisition successful\n\r");
UARTxSendStr(0,str);
//--------------------------------------------------------------------------------
if ((IO0PIN & LED1) ==0)
{ IO0SET =IO0SET| LED1;
sprintf(str,"TASK1 IS RUNNING , P0.11=0\n\r");
}
else //led1闪烁
{ IO0CLR=IO0CLR|LED1 ;
sprintf(str,"TASK1 IS RUNNING , P0.11=0\n\r");
}
UARTxSendStr(0,str);
//-------------------------------------------------------------------------------- //用完后,释放信号量
//OSSemPost(Uart0Point); //用完后,释放信号量
sprintf(str,"TASK1 Set Free UART0 \n\r");
UARTxSendStr(0,str);
sprintf(str,"TASK1 IS Running OSTimeDly(OS_TICKS_PER_SEC/2)\n\n\n\r\r\r");
UARTxSendStr(0,str);
}
OSTimeDly(OS_TICKS_PER_SEC/2); //延时0.5秒
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?