//空闲任务任务堆栈
static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
//空闲任务控制块
static StaticTask_t IdleTaskTCB;
//空闲任务API函数
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer,
uint32_t *pulIdleTaskStackSize )
{
*ppxIdleTaskStackBuffer = IdleTaskStack;
*ppxIdleTaskTCBBuffer = &IdleTaskTCB;
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}
//定时器任务任务堆栈
static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];
//定时器任务控制块
static StaticTask_t TimerTaskTCB;
//定时器任务API函数
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,
StackType_t **ppxTimerTaskStackBuffer,
uint32_t *pulTimerTaskStackSize )
{
*ppxTimerTaskStackBuffer = TimerTaskStack;
*ppxTimerTaskTCBBuffer = &TimerTaskTCB;
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
}
#define START_TASK_PRIO 1 //任务优先级
#define START_STK_SIZE 128 //任务堆栈大小
StackType_t Start_Task_Stack[START_STK_SIZE]; //任务堆栈
StaticTask_t Start_Task_TCB; //任务控制块
TaskHandle_t StartTask_Handle; //开始任务句柄
void start_task( void * pvParameters ); //任务函数
#define TASK1_PRIO 2
#define TASK1_STK_SIZE 128
StackType_t Task1_Stack[TASK1_STK_SIZE];
StaticTask_t Task1_TCB;
TaskHandle_t Task1_Handle;
void task1(void * pvParameters);
#define TASK2_PRIO 3
#define TASK2_STK_SIZE 128
StackType_t Task2_Stack[TASK2_STK_SIZE];
StaticTask_t Task2_TCB;
TaskHandle_t Task2_Handle;
void task2(void * pvParameters);
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 0-15一共16级优先级
delay_init(); //延时函数初始化
uart_init(115200); //初始化串口
LED_Init(); //初始化LED
StartTask_Handle = xTaskCreateStatic( (TaskFunction_t) start_task,
(char * ) "start_task",
(uint32_t ) START_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) START_TASK_PRIO,
(StackType_t * ) Start_Task_Stack,
(StaticTask_t *) &Start_Task_TCB );
vTaskStartScheduler(); //开启任务调度
}
//开始任务
void start_task( void * pvParameters )
{
taskENTER_CRITICAL(); //进入临界区
//创建任务1
Task1_Handle = xTaskCreateStatic( (TaskFunction_t) task1,
(char * ) "task1",
(uint32_t ) TASK1_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) TASK1_PRIO,
(StackType_t * ) Task1_Stack,
(StaticTask_t *) &Task1_TCB );
//创建任务2
Task2_Handle = xTaskCreateStatic( (TaskFunction_t) task2,
(char * ) "task2",
(uint32_t ) TASK2_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) TASK2_PRIO,
(StackType_t * ) Task2_Stack,
(StaticTask_t *) &Task2_TCB );
vTaskDelete(StartTask_Handle); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
//任务1
void task1(void * pvParameters)
{
while(1)
{
LED0 = !LED0;
vTaskDelay(500);
}
}
//任务2
void task2(void * pvParameters)
{
while(1)
{
LED1 = 0;
vTaskDelay(500);
LED1 = 1;
vTaskDelay(1000);
}
}
static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
//空闲任务控制块
static StaticTask_t IdleTaskTCB;
//空闲任务API函数
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer,
uint32_t *pulIdleTaskStackSize )
{
*ppxIdleTaskStackBuffer = IdleTaskStack;
*ppxIdleTaskTCBBuffer = &IdleTaskTCB;
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}
//定时器任务任务堆栈
static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];
//定时器任务控制块
static StaticTask_t TimerTaskTCB;
//定时器任务API函数
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,
StackType_t **ppxTimerTaskStackBuffer,
uint32_t *pulTimerTaskStackSize )
{
*ppxTimerTaskStackBuffer = TimerTaskStack;
*ppxTimerTaskTCBBuffer = &TimerTaskTCB;
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
}
#define START_TASK_PRIO 1 //任务优先级
#define START_STK_SIZE 128 //任务堆栈大小
StackType_t Start_Task_Stack[START_STK_SIZE]; //任务堆栈
StaticTask_t Start_Task_TCB; //任务控制块
TaskHandle_t StartTask_Handle; //开始任务句柄
void start_task( void * pvParameters ); //任务函数
#define TASK1_PRIO 2
#define TASK1_STK_SIZE 128
StackType_t Task1_Stack[TASK1_STK_SIZE];
StaticTask_t Task1_TCB;
TaskHandle_t Task1_Handle;
void task1(void * pvParameters);
#define TASK2_PRIO 3
#define TASK2_STK_SIZE 128
StackType_t Task2_Stack[TASK2_STK_SIZE];
StaticTask_t Task2_TCB;
TaskHandle_t Task2_Handle;
void task2(void * pvParameters);
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 0-15一共16级优先级
delay_init(); //延时函数初始化
uart_init(115200); //初始化串口
LED_Init(); //初始化LED
StartTask_Handle = xTaskCreateStatic( (TaskFunction_t) start_task,
(char * ) "start_task",
(uint32_t ) START_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) START_TASK_PRIO,
(StackType_t * ) Start_Task_Stack,
(StaticTask_t *) &Start_Task_TCB );
vTaskStartScheduler(); //开启任务调度
}
//开始任务
void start_task( void * pvParameters )
{
taskENTER_CRITICAL(); //进入临界区
//创建任务1
Task1_Handle = xTaskCreateStatic( (TaskFunction_t) task1,
(char * ) "task1",
(uint32_t ) TASK1_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) TASK1_PRIO,
(StackType_t * ) Task1_Stack,
(StaticTask_t *) &Task1_TCB );
//创建任务2
Task2_Handle = xTaskCreateStatic( (TaskFunction_t) task2,
(char * ) "task2",
(uint32_t ) TASK2_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) TASK2_PRIO,
(StackType_t * ) Task2_Stack,
(StaticTask_t *) &Task2_TCB );
vTaskDelete(StartTask_Handle); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
//任务1
void task1(void * pvParameters)
{
while(1)
{
LED0 = !LED0;
vTaskDelay(500);
}
}
//任务2
void task2(void * pvParameters)
{
while(1)
{
LED1 = 0;
vTaskDelay(500);
LED1 = 1;
vTaskDelay(1000);
}
}