优秀国外设计网站优化服务平台
实验目的:学会xTaskCreateStatic()和vTaskDelete()的使用
实验设计:将设计四个任务:start_task、task1、task2、task3
四个任务功能如下:start_task 用来创建其他的三个任务
task1 实现LED0每500ms闪烁一次
task2 实现LED1每500ms闪烁一次
task3 判断按键KEY0是否按下,按下则删掉task1
修改开始任务函数
/* 开始任务函数-用来创建其他的三个任务*/ void start_task( void * pvParameters) {taskENTER_CRITICAL();/*进入临界区--关闭中断,任务切换就不会进行*//*创建任务1*///vTaskDelete(start_task_handler);//这两句作用一样vTaskDelete(NULL);taskEXIT_CRITICAL();/*退出临界区--开始任务切换-开启任务调度-限制性任务优先级最高的任务*/ }
修改入口函数
/** *@brief FreeRTOS例程入口函数 *@param 无 *@retval 无 */ void freertos_demo(void) {vTaskStartScheduler();//开启任务调度器 }
- 需将configSUPPORT_STATIC_ALLOCATION配置为1
- 定义空闲任务&定时器任务的任务堆栈及TCB
- 实现两个接口函数
- vApplicationGetldleTaskMemory()--空闲内存分配函数
- vApplicationGetTimerTaskMemory()--软件定时器任务内存分配函数
/*空闲任务配置*/ StaticTask_t idle_task_tcb; StackType_t idle_task_stack[configMINIMAL_STACK_SIZE];/*软件定时器任务配置*/ StaticTask_t timer_task_tcb; StackType_t timer_task_stack[configTIMER_TASK_STACK_DEPTH];/*空闲任务内存分配*/ void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,//空闲任务任务控制块,手动分配内存StackType_t ** ppxIdleTaskStackBuffer,//空闲任务堆栈地址uint32_t * pulIdleTaskStackSize ) //空闲任务堆栈大小/*lint !e526 Symbol not defined as it is an application callback. */ {*ppxIdleTaskTCBBuffer = &idle_task_tcb;*ppxIdleTaskStackBuffer = idle_task_stack;*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE; }/*软件定时器内存分配*/ void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,StackType_t ** ppxTimerTaskStackBuffer,uint32_t * pulTimerTaskStackSize ) {*ppxTimerTaskTCBBuffer = &timer_task_tcb;*ppxTimerTaskStackBuffer = timer_task_stack;*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH; }
- 将内存分配函数放入到demo.c里
- 定义函数入口参数