freertos常用API总结和基础概念理解
本文介绍了FreeRTOS实时操作系统的核心API函数,主要包括任务管理、队列操作、信号量、事件标志组、任务通知和软件定时器等功能模块。详细说明了各类函数的用途,如任务创建删除、队列读写、信号量操作等。同时概述了Tickless低功耗模式的相关配置项,包括进入/退出低功耗时的处理流程。还提供了内存管理相关函数,如内存申请释放和查询空闲内存大小。这些API为基于FreeRTOS的嵌入式开发提供了完整
1.什么是空闲任务:空闲任务是freertos自动创建的一个系统任务,它始终处于最低优先级,当系统没有其他用户任务需要运行时,空闲任务就会自动执行
2.什么是上下文切换:上下文切换是freertos保存当前任务运行状态,并恢复另一个任务运行状态的过程,本质上是cpu寄存器的保存和恢复
3.什么是任务调度:任务调度是freertos内核决定在任意时刻应该运行哪个就绪任务的决策过程,主要基于优先级调度算法
4.什么是rtos滴答时钟:rtos滴答时钟是freertos的时间基准,就像一个系统的心跳,通过定期的硬件定时器中断来驱动整个操作系统的运行和任务调度
5.什么是tcb控制块:tcb是freertos中用于描述和管理任务所有信息的结构体,可以理解为每个任务的“身份证”,包含了任务的完整状态信息
|
API函数 |
描述 |
|
xTaskCreate() |
动态方式创建任务 |
|
xTaskCreateStatic() |
静态方式创建任务 |
|
vTaskDelete() |
删除任务 |
|
函数 |
描述 |
|
uxTaskPriorityGet() |
获取任务优先级 |
|
vTaskPrioritySet() |
设置任务优先级 |
|
uxTaskGetNumberOfTasks() |
获取系统中任务的数量 |
|
uxTaskGetSystemState() |
获取所有任务状态信息 |
|
vTaskGetInfo() |
获取指定单个的任务信息 |
|
xTaskGetCurrentTaskHandle() |
获取当前任务的任务句柄 |
|
xTaskGetHandle() |
根据任务名获取该任务的任务句柄 |
|
uxTaskGetStackHighWaterMark() |
获取任务的任务栈历史剩余最小值 |
|
eTaskGetState() |
获取任务状态 |
|
vTaskList() |
以“表格”形式获取所有任务的信息 |
|
vTaskGetRunTimeStats() |
获取任务的运行时间 |
|
函数 |
描述 |
|
xQueueCreate() |
动态方式创建队列 |
|
xQueueCreateStatic() |
静态方式创建队列 |
|
函数 |
描述 |
|
xQueueSend() |
往队列的尾部写入消息 |
|
xQueueSendToBack() |
同 xQueueSend() |
|
xQueueSendToFront() |
往队列的头部写入消息 |
|
xQueueOverwrite() |
覆写队列消息(只用于队列长度为 1 的情况) |
|
xQueueSendFromISR() |
在中断中往队列的尾部写入消息 |
|
xQueueSendToBackFromISR() |
同 xQueueSendFromISR() |
|
xQueueSendToFrontFromISR() |
在中断中往队列的头部写入消息 |
|
xQueueOverwriteFromISR() |
在中断中覆写队列消息(只用于队列长度为 1 的情况) |
|
函数 |
描述 |
|
xQueueReceive() |
从队列头部读取消息,并删除消息 |
|
xQueuePeek() |
从队列头部读取消息 |
|
xQueueReceiveFromISR() |
在中断中从队列头部读取消息,并删除消息 |
|
xQueuePeekFromISR() |
在中断中从队列头部读取消息 |
|
函数 |
描述 |
|
xSemaphoreCreateBinary() |
使用动态方式创建二值信号量 |
|
xSemaphoreCreateBinaryStatic() |
使用静态方式创建二值信号量 |
|
xSemaphoreGive() |
释放信号量 |
|
xSemaphoreGiveFromISR() |
在中断中释放信号量 |
|
xSemaphoreTake() |
获取信号量 |
|
xSemaphoreTakeFromISR() |
在中断中获取信号量 |
|
函数 |
描述 |
|
xSemaphoreCreateCounting() |
使用动态方法创建计数型信号量。 |
|
xSemaphoreCreateCountingStatic() |
使用静态方法创建计数型信号量 |
|
uxSemaphoreGetCount() |
获取信号量的计数值 |
|
函数 |
描述 |
|
xSemaphoreCreateMutex() |
使用动态方法创建互斥信号量。 |
|
xSemaphoreCreateMutexStatic() |
使用静态方法创建互斥信号量。 |
|
函数 |
描述 |
|
xQueueCreateSet() |
创建队列集 |
|
xQueueAddToSet() |
队列添加到队列集中 |
|
xQueueRemoveFromSet() |
从队列集中移除队列 |
|
xQueueSelectFromSet() |
获取队列集中有有效消息的队列 |
|
xQueueSelectFromSetFromISR() |
在中断中获取队列集中有有效消息的队列 |
|
函数 |
描述 |
|
xEventGroupCreate() |
使用动态方式创建事件标志组 |
|
xEventGroupCreateStatic() |
使用静态方式创建事件标志组 |
|
xEventGroupClearBits() |
清零事件标志位 |
|
xEventGroupClearBitsFromISR() |
在中断中清零事件标志位 |
|
xEventGroupSetBits() |
设置事件标志位 |
|
xEventGroupSetBitsFromISR() |
在中断中设置事件标志位 |
|
xEventGroupWaitBits() |
等待事件标志位 |
|
xEventGroupSync() |
设置事件标志位,并等待事件标志位 |
|
函数 |
描述 |
|
xTaskNotify() |
发送通知,带有通知值 |
|
xTaskNotifyAndQuery() |
发送通知,带有通知值并且保留接收任务的原通知值 |
|
xTaskNotifyGive() |
发送通知,不带通知值 |
|
xTaskNotifyFromISR() |
在中断中发送任务通知 |
|
xTaskNotifyAndQueryFromISR() |
|
|
vTaskNotifyGiveFromISR() |
|
|
ulTaskNotifyTake() |
获取任务通知,可选退出函数时对通知值清零或减1 |
|
xTaskNotifyWait() |
获取任务通知,可获取通知值和清除通知值的指定位 |
|
函数 |
描述 |
|
xTimerCreate() |
动态方式创建软件定时器 |
|
xTimerCreateStatic() |
静态方式创建软件定时器 |
|
xTimerStart() |
开启软件定时器定时 |
|
xTimerStartFromISR() |
在中断中开启软件定时器定时 |
|
xTimerStop() |
停止软件定时器定时 |
|
xTimerStopFromISR() |
在中断中停止软件定时器定时 |
|
xTimerReset() |
复位软件定时器定时 |
|
xTimerResetFromISR() |
在中断中复位软件定时器定时 |
|
xTimerChangePeriod() |
更改软件定时器的定时超时时间 |
|
xTimerChangePeriodFromISR() |
在中断中更改定时超时时间 |
Tickless模式相关配置项(掌握)
|
配置项 |
说明 |
|
configUSE_TICKLESS_IDLE |
使能低功耗 Tickless 模式,默认0 |
|
configEXPECTED_IDLE_TIME_BEFORE_SLEEP |
系统进入相应低功耗模式的最短时长,默认2 |
|
configPRE_SLEEP_PROCESSING(x) |
在系统进入低功耗模式前执行的事务,比如关闭外设时钟 |
|
configPOST_SLEEP_PROCESSING(x) |
系统退出低功耗模式后执行的事务,比如开启之前关闭的外设时钟 |
|
函数 |
描述 |
|
void * pvPortMalloc( size_t xWantedSize ); |
申请内存 |
|
void vPortFree( void * pv ); |
释放内存 |
|
size_t xPortGetFreeHeapSize( void ); |
获取当前空闲内存的大小 |
更多推荐



所有评论(0)