#include "includes.h"
static OS_STK Start_task_stk[START_TASK_STK_SIZE];
static OS_STK task1_stk[TASK1_STK_SIZE];
static OS_STK task2_stk[TASK2_STK_SIZE];
void task1(void * p_arg);
void task2(void * p_arg);
void Start_task(void * p_arg);
OS_EVENT *My_Box;
static INT32U Task1Msg,Task2Msg;
static void systick_init(void)
{
RCC_ClocksTypeDef rcc_clocks;
RCC_GetClocksFreq(&rcc_clocks);
SysTick_Config(rcc_clocks.HCLK_Frequency / OS_TICKS_PER_SEC);
}
int main(void)
{
SystemInit();
OSInit();
My_Box = OSMboxCreate((void*)&Task1Msg); //创建消息邮箱
OSTaskCreate(Start_task,(void *)0,&Start_task_stk[START_TASK_STK_SIZE - 1],START_TASK_PRIO);
OSStart();
return 0;
}
static void Start_task(void *p_arg)
{
BSP_Init();
systick_init();
OSTaskCreate(task1,0,&task1_stk[TASK1_STK_SIZE - 1],TASK1_PRIO);
OSTaskCreate(task2,0,&task2_stk[TASK2_STK_SIZE - 1],TASK2_PRIO);
while(1)
{
OSTimeDlyHMSM(0,0,0,200);
}
}
static void task1(void *p_arg)
{
INT8U err;
p_arg=p_arg;
while(1)
{
if(OSMboxPend(My_Box,0,&err)== (void *)&Task1Msg)
{
led_on(LED1);
led_off(LED2);
OSMboxPost(My_Box,(void *)&Task2Msg);
OSTimeDlyHMSM(0,0,0,200);
}
}
}
static void task2(void *p_arg)
{
INT8U err;
p_arg = p_arg;
if(OSMboxPend(My_Box,0,&err) == (void *)&Task2Msg) // 请求邮箱中的消息,如果没有消息则挂起该任务
{
while(1)
{
led_on(LED2);
led_off(LED1);
OSMboxPost(My_Box,(void *)&Task1Msg);
OSTimeDlyHMSM(0,0,0,200);
}
}
}
|