FreeRTOS(3)常用API
==FreeRTOS中任务优先级数值越大,优先级越高,和HAL库相反==
1.创建任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask )
|
2.删除任务
删除一个用动态或者静态创建的的任务,被删除的任务不再存在,任务调度器无法再调度该任务。当一个任务被删除后,其所对应的句柄就不能再使用了。删除一个使用动态创建的(XTaskCreate( ))任务,其所申请的堆栈和控制块内存将会被释放掉。有静态方法创建的任务,所使用的堆栈就需要用户自己去释放掉所对应的内存,否则会导致内存泄漏。此函数的原型如下:
1 2
| void vTaskDelete( TaskHandle_t xTaskToDelete)
|
3.阻塞式延时函数
延时时间函数,相当于告诉操作系统,该任务延时一段时间后再执行,这段时间内去执行其他任务,并在某个时间点将该任务重新唤醒。这个时间点就是函数的入参,一般都是以**系统节拍为单位(FreeRTOS的系统节拍为1ms)**。可以用于高优先级任务死循环执行时,设置任务睡眠,以执行低优先级的任务。
1 2
| void vTaskDelay( const TickType_t xTicksToDelay )
|
4.空闲任务函数
当没有任务处于就绪态以及运行态时,系统将进行空闲任务(一般是回收资源),除了本身自带的空闲任务,用户可以通过写回调函数自定义空闲态的任务
步骤:
1.在config.h中
1
| #define configUSE_IDLE_HOOK 1
|
2.自己重写回调函数
1 2 3 4 5 6
| void vApplicationIdleHook( void ) { Num0=uxTaskGetNumberOfTasks(); Num1=uxTaskGetStackHighWaterMark(StartTask_Handler); Num2=uxTaskGetStackHighWaterMark(LEDTask_Handler); }
|
5.临界区
当代码进入临界区时,会失能所有中断,一般在Star_task时进入,在其他任务创建完成后退出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| void Start_task(void *pvParameters) { taskENTER_CRITICAL();
xTaskCreate( (TaskFunction_t)LED_task, (const char* )"LED_task", (uint16_t )LED_STK_SIZE, (void* )NULL, (UBaseType_t )LED_TASK_PRIO, (TaskHandle_t* )&LEDTask_Handler);
vTaskDelete(StartTask_Handler);
taskEXIT_CRITICAL(); }
|
6.其他辅助API

7.FreeRTOS与中断

通过该宏定义可以设置系统可管理的中断范围(在这些中断里能用FreeRTOS的API)
配置configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY为5,表示用户可以在抢占式优先级为5-15的中断里面调用FreeRTOS的API函数,抢占式优先级为0-4的中断里面是不允许调用的
参考
https://blog.csdn.net/weixin_42895086/article/details/120154812?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&utm_relevant_index=2
https://blog.csdn.net/weixin_44289254/article/details/118547203?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165008375116780265433273%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165008375116780265433273&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-118547203.142^v9^pc_search_result_control_group,157^v4^control&utm_term=freertos+api&spm=1018.2226.3001.4187