#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;
INT8U err;
char buf[10]= {0} ;
char *ss ;
INT8U Times = 0;
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*)0);
OSTaskCreate(Start_task,(void *)0,&Start_task_stk[START_TASK_STK_SIZE - 1],START_TASK_PRIO);
OSStart();
return 0;
}
void Start_task(void *p_arg)
{
BSP_Init();
systick_init(); //必须在OSStart()后才能调用时钟节拍
OSTaskCreate(task1,0,&task1_stk[TASK1_STK_SIZE - 1],TASK1_PRIO);
OSTaskCreate(task2,0,&task2_stk[TASK2_STK_SIZE - 1],TASK2_PRIO);
while(1)
{
OSTaskSuspend(OS_PRIO_SELF);
}
}
static void task1(void *p_arg)
{
p_arg=p_arg;
while(1)
{
OSSemPend(Sem,0,&err);
// sprintf(buf,"%d",Times);
led_on(LED1);
led_off(LED2);
OSMboxPost(My_Box,buf);
Times ++;
if(Times >255)
{
Times = 0;
}
OSTimeDlyHMSM (0, 0, 0, 500 );
}
}
static void task2(void *p_arg)
{
p_arg = p_arg;
while(1)
{
ss=OSMboxPend(My_Box,10,&err);
led_on(LED2);
led_off(LED1);
printf("任务切换次数 %s\r\n",ss);
OSTimeDlyHMSM (0, 0, 0, 500);
}
} |