1.改宏,只有在configSUPPORT_STATIC_ALLOCATION==1时,TaskHandle_t xTaskCreateStatic方能编译
2两个函数未定义:1.vApplicationGetIdleTaskMemory
2.vApplicationGetTimerTaskMemory
static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
static StaticTask_t IdleTaskTCB;
static StackType_t TimerTaskStack[configMINIMAL_STACK_SIZE];
static StaticTask_t TimerTaskTCB;
//空闲任务所需内存
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
{
*ppxIdleTaskTCBBuffer=&IdleTaskTCB;
*ppxIdleTaskStackBuffer=IdleTaskStack;
*pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;
}
//定时器任务所需内存
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,
StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize )
{
*ppxTimerTaskTCBBuffer=&TimerTaskTCB;
*ppxTimerTaskStackBuffer=TimerTaskStack;
*pulTimerTaskStackSize=configMINIMAL_STACK_SIZE;
}
编写测试代码:
1.开始任务框架
2.任务一 任务二框架
TaskHandle_t StartTask_Handler;
//
void start_task( void * pvParameters );
void Task1_task( void * pvParameters );
void Task2_task( void * pvParameters );
//
#define task1_TASK_SIZE 128
#define task1_TASK_Priority 2
StackType_t task1TackStack[task1_TASK_Priority];
StaticTask_t task1TaskTCB;
#define task2_TASK_SIZE 128
#define task2_TASK_Priority 3
StackType_t task2TackStack[task2_TASK_SIZE];
StaticTask_t task2TaskTCB;
#define START_TASK_SIZE 128
#define START_TASK_Priority 1
StackType_t StartTackStack[START_TASK_SIZE];
StaticTask_t StartTaskTCB;
int main(void)
{
Cache_Enable(); //´ò¿ªL1-Cache
HAL_Init(); //³õʼ»¯HAL¿â
Stm32_Clock_Init(432,25,2,9); //ÉèÖÃʱÖÓ,216Mhz
delay_init(216); //ÑÓʱ³õʼ»¯
uart_init(115200); //´®¿Ú³õʼ»¯
LED_Init(); //³õʼ»¯LED
StartTask_Handler=xTaskCreateStatic((TaskFunction_t) start_task,
(char *) "start_task",
(uint32_t) START_TASK_SIZE,
(void *) NULL,
(UBaseType_t) START_TASK_Priority,
(StackType_t *) StartTackStack,
(StaticTask_t * ) &StartTaskTCB );
vTaskStartScheduler(); //¿ªÆôÈÎÎñµ÷¶È
}
void start_task( void * pvParameters )
{
StartTask_Handler=xTaskCreateStatic((TaskFunction_t) Task1_task,
(char *) "task1_task",
(uint32_t) task1_TASK_SIZE,
(void *) NULL,
(UBaseType_t) task1_TASK_Priority,
(StackType_t *) task1TackStack,
(StaticTask_t * ) &task1TaskTCB );
StartTask_Handler=xTaskCreateStatic((TaskFunction_t) Task2_task,
(char *) "Task2_task",
(uint32_t) task2_TASK_SIZE,
(void *) NULL,
(UBaseType_t) task2_TASK_Priority,
(StackType_t *) task2TackStack,
(StaticTask_t * ) &task2TaskTCB );
vTaskDelete(StartTask_Handler);
}
void Task1_task( void * pvParameters )
{
while(1)
{
LED0_Toggle;
vTaskDelay(1000);
}
}
void Task2_task( void * pvParameters )
{
while(1)
{
LED1_Toggle;
vTaskDelay(300);
}
}