最全FreeRTOS常用函数总结,可直接参考。
FreeRTOS函数参考手册摘要 本文档提供了FreeRTOS实时操作系统核心功能的API参考,包含四大类关键函数: 任务管理 xTaskCreate:动态创建任务 vTaskDelete:删除指定任务 vTaskDelay:任务延时 uxTaskPriorityGet:获取任务优先级 内存管理 pvPortMalloc:分配内存 vPortFree:释放内存 队列操作 xQueueCreate:
FreeRTOS 函数参考手册
一、任务管理函数
1. xTaskCreate - 创建任务
功能描述:动态创建一个任务
函数原型:
BaseType_t xTaskCreate(
TaskFunction_t pxTaskCode,
const char * const pcName,
const configSTACK_DEPTH_TYPE usStackDepth,
void * const pvParameters,
UBaseType_t uxPriority,
TaskHandle_t * const pxCreatedTask
)
参数说明:
| 参数 | 描述 |
|---|---|
| pxTaskCode | 任务函数指针,任务函数原型为void TaskFunction(void *pvParameters) |
| pcName | 任务名称,用于调试,长度不超过configMAX_TASK_NAME_LEN |
| usStackDepth | 任务栈大小,单位为word,如128表示128个word(512字节) |
| pvParameters | 传递给任务函数的参数 |
| uxPriority | 任务优先级,范围0~(configMAX_PRIORITIES-1) |
| pxCreatedTask | 用于保存任务句柄的指针,可设为NULL |
返回值:
pdPASS:创建成功- 其他:创建失败(通常因内存不足)
参数取值示例:
TaskHandle_t xTaskHandle;
xTaskCreate(
vMyTaskFunction, // 任务函数
"MyTask", // 任务名称
128, // 栈大小128 word
NULL, // 无参数
osPriorityNormal, // 正常优先级
&xTaskHandle // 保存任务句柄
);
2. vTaskDelete - 删除任务
功能描述:删除指定任务
函数原型:
void vTaskDelete(TaskHandle_t xTaskToDelete)
参数说明:
| 参数 | 描述 |
|---|---|
| xTaskToDelete | 要删除的任务句柄,NULL表示删除自身 |
返回值:无
参数取值示例:
// 在其他任务中删除指定任务
vTaskDelete(xOtherTaskHandle);
// 在任务自身中删除自己
vTaskDelete(NULL);
3. vTaskDelay - 任务延时
功能描述:使任务进入阻塞状态指定时间
函数原型:
void vTaskDelay(const TickType_t xTicksToDelay)
参数说明:
| 参数 | 描述 |
|---|---|
| xTicksToDelay | 延时的Tick数,可使用pdMS_TO_TICKS(100)转换为100ms |
返回值:无
参数取值示例:
// 延时500ms
vTaskDelay(pdMS_TO_TICKS(500));
// 延时10个Tick
vTaskDelay(10);
4. uxTaskPriorityGet - 获取任务优先级
功能描述:获取指定任务的优先级
函数原型:
UBaseType_t uxTaskPriorityGet(const TaskHandle_t xTask)
参数说明:
| 参数 | 描述 |
|---|---|
| xTask | 任务句柄,NULL表示获取自身优先级 |
返回值:任务优先级
参数取值示例:
UBaseType_t priority = uxTaskPriorityGet(xTaskHandle);
二、内存管理函数
1. pvPortMalloc - 分配内存
功能描述:从堆中分配内存
函数原型:
void *pvPortMalloc(size_t xWantedSize)
参数说明:
| 参数 | 描述 |
|---|---|
| xWantedSize | 要分配的内存大小(字节) |
返回值:
- 非NULL:分配成功,返回内存指针
- NULL:分配失败
参数取值示例:
uint8_t *buffer = (uint8_t *)pvPortMalloc(100);
if (buffer != NULL) {
// 使用buffer
}
2. vPortFree - 释放内存
功能描述:释放已分配的内存
函数原型:
void vPortFree(void *pv)
参数说明:
| 参数 | 描述 |
|---|---|
| pv | 要释放的内存指针,必须是pvPortMalloc返回的指针 |
返回值:无
参数取值示例:
vPortFree(buffer);
三、队列操作函数
1. xQueueCreate - 创建队列
功能描述:动态创建一个队列
函数原型:
QueueHandle_t xQueueCreate(
UBaseType_t uxQueueLength,
UBaseType_t uxItemSize
)
参数说明:
| 参数 | 描述 |
|---|---|
| uxQueueLength | 队列长度(可存储的项目数) |
| uxItemSize | 每个项目的大小(字节) |
返回值:
- 非NULL:创建成功,返回队列句柄
- NULL:创建失败
参数取值示例:
QueueHandle_t xQueue = xQueueCreate(10, sizeof(int));
2. xQueueSend - 向队列发送数据(任务版本)
功能描述:向队列尾部发送数据,任务版本
函数原型:
BaseType_t xQueueSend(
QueueHandle_t xQueue,
const void *pvItemToQueue,
TickType_t xTicksToWait
)
参数说明:
| 参数 | 描述 |
|---|---|
| xQueue | 队列句柄 |
| pvItemToQueue | 要发送的数据指针 |
| xTicksToWait | 阻塞时间(Tick数),0表示不阻塞,portMAX_DELAY表示一直阻塞 |
返回值:
pdPASS:发送成功errQUEUE_FULL:队列已满,发送失败
参数取值示例:
int data = 42;
xQueueSend(xQueue, &data, portMAX_DELAY);
3. xQueueSendFromISR - 向队列发送数据(ISR版本)
功能描述:向队列尾部发送数据,ISR版本
函数原型:
BaseType_t xQueueSendFromISR(
QueueHandle_t xQueue,
const void *pvItemToQueue,
BaseType_t *pxHigherPriorityTaskWoken
)
参数说明:
| 参数 | 描述 |
|---|---|
| xQueue | 队列句柄 |
| pvItemToQueue | 要发送的数据指针 |
| pxHigherPriorityTaskWoken | 用于标记是否需要任务切换,ISR中需传入&xHigherPriorityTaskWoken |
返回值:
pdPASS:发送成功pdFAIL:发送失败
参数取值示例:
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
int data = 42;
xQueueSendFromISR(xQueue, &data, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
4. xQueueReceive - 从队列接收数据(任务版本)
功能描述:从队列头部接收数据,任务版本
函数原型:
BaseType_t xQueueReceive(
QueueHandle_t xQueue,
void *const pvBuffer,
TickType_t xTicksToWait
)
参数说明:
| 参数 | 描述 |
|---|---|
| xQueue | 队列句柄 |
| pvBuffer | 接收数据的缓冲区指针 |
| xTicksToWait | 阻塞时间(Tick数) |
返回值:
pdPASS:接收成功errQUEUE_EMPTY:队列已空,接收失败
参数取值示例:
int receivedData;
if (xQueueReceive(xQueue, &receivedData, portMAX_DELAY) == pdPASS) {
// 处理receivedData
}
四、信号量操作函数
1. xSemaphoreCreateBinary - 创建二进制信号量
功能描述:创建一个二进制信号量
函数原型:
SemaphoreHandle_t xSemaphoreCreateBinary(void)
参数说明:无
返回值:
- 非NULL:创建成功,返回信号量句柄
- NULL:创建失败
参数取值示例:
SemaphoreHandle_t xBinarySem = xSemaphoreCreateBinary();
2. xSemaphoreGive - 释放信号量(任务版本)
功能描述:释放信号量,任务版本
函数原型:
BaseType_t xSemaphoreGive(SemaphoreHandle_t xSemaphore)
参数说明:
| 参数 | 描述 |
|---|---|
| xSemaphore | 信号量句柄 |
返回值:
pdTRUE:释放成功pdFALSE:释放失败(二进制信号量已为1时)
参数取值示例:
xSemaphoreGive(xBinarySem);
3. xSemaphoreTake - 获取信号量(任务版本)
功能描述:获取信号量,任务版本
函数原型:
BaseType_t xSemaphoreTake(
SemaphoreHandle_t xSemaphore,
TickType_t xTicksToWait
)
参数说明:
| 参数 | 描述 |
|---|---|
| xSemaphore | 信号量句柄 |
| xTicksToWait | 阻塞时间(Tick数) |
返回值:
pdTRUE:获取成功pdFALSE:获取失败(超时或信号量为0)
参数取值示例:
if (xSemaphoreTake(xBinarySem, portMAX_DELAY) == pdTRUE) {
// 访问临界资源
xSemaphoreGive(xBinarySem);
}
五、互斥量操作函数
1. xSemaphoreCreateMutex - 创建互斥量
功能描述:创建一个互斥量
函数原型:
SemaphoreHandle_t xSemaphoreCreateMutex(void)
参数说明:无
返回值:
- 非NULL:创建成功,返回互斥量句柄
- NULL:创建失败
参数取值示例:
SemaphoreHandle_t xMutex = xSemaphoreCreateMutex();
2. xSemaphoreGive - 释放互斥量(任务版本)
功能描述:释放互斥量,任务版本
函数原型:
BaseType_t xSemaphoreGive(SemaphoreHandle_t xSemaphore)
参数说明:
| 参数 | 描述 |
|---|---|
| xSemaphore | 互斥量句柄 |
返回值:
pdTRUE:释放成功pdFALSE:释放失败
参数取值示例:
xSemaphoreGive(xMutex);
3. xSemaphoreTake - 获取互斥量(任务版本)
功能描述:获取互斥量,任务版本
函数原型:
BaseType_t xSemaphoreTake(
SemaphoreHandle_t xSemaphore,
TickType_t xTicksToWait
)
参数说明:
| 参数 | 描述 |
|---|---|
| xSemaphore | 互斥量句柄 |
| xTicksToWait | 阻塞时间(Tick数) |
返回值:
pdTRUE:获取成功pdFALSE:获取失败
参数取值示例:
if (xSemaphoreTake(xMutex, portMAX_DELAY) == pdTRUE) {
// 访问临界资源
xSemaphoreGive(xMutex);
}
六、事件组操作函数
1. xEventGroupCreate - 创建事件组
功能描述:创建一个事件组
函数原型:
EventGroupHandle_t xEventGroupCreate(void)
参数说明:无
返回值:
- 非NULL:创建成功,返回事件组句柄
- NULL:创建失败
参数取值示例:
EventGroupHandle_t xEventGroup = xEventGroupCreate();
2. xEventGroupSetBits - 设置事件组位(任务版本)
功能描述:设置事件组中的指定位,任务版本
函数原型:
EventBits_t xEventGroupSetBits(
EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet
)
参数说明:
| 参数 | 描述 |
|---|---|
| xEventGroup | 事件组句柄 |
| uxBitsToSet | 要设置的位掩码,如`(1 << 0) |
返回值:设置前的事件组值
参数取值示例:
xEventGroupSetBits(xEventGroup, (1 << 0));
3. xEventGroupWaitBits - 等待事件组位(任务版本)
功能描述:等待事件组中的指定位,任务版本
函数原型:
EventBits_t xEventGroupWaitBits(
EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToWaitFor,
const BaseType_t xClearOnExit,
const BaseType_t xWaitForAllBits,
TickType_t xTicksToWait
)
参数说明:
| 参数 | 描述 |
|---|---|
| xEventGroup | 事件组句柄 |
| uxBitsToWaitFor | 等待的位掩码 |
| xClearOnExit | 是否在返回前清除位:pdTRUE清除,pdFALSE不清除 |
| xWaitForAllBits | 等待方式:pdTRUE等待所有位,pdFALSE等待任意位 |
| xTicksToWait | 阻塞时间(Tick数) |
返回值:满足条件的事件组值
参数取值示例:
EventBits_t events = xEventGroupWaitBits(
xEventGroup,
(1 << 0) | (1 << 1),
pdTRUE,
pdFALSE,
portMAX_DELAY
);
七、任务通知函数
1. xTaskNotifyGive - 发送任务通知(递增通知值)
功能描述:向任务发送通知,通知值递增1
函数原型:
BaseType_t xTaskNotifyGive(TaskHandle_t xTaskToNotify)
参数说明:
| 参数 | 描述 |
|---|---|
| xTaskToNotify | 目标任务句柄 |
返回值:pdPASS
参数取值示例:
xTaskNotifyGive(xTargetTaskHandle);
2. ulTaskNotifyTake - 获取任务通知(递减通知值)
功能描述:获取任务通知,通知值递减1或清零
函数原型:
uint32_t ulTaskNotifyTake(
BaseType_t xClearCountOnExit,
TickType_t xTicksToWait
)
参数说明:
| 参数 | 描述 |
|---|---|
| xClearCountOnExit | 退出时操作:pdTRUE清零,pdFALSE递减1 |
| xTicksToWait | 阻塞时间(Tick数) |
返回值:获取的通知值
参数取值示例:
uint32_t notificationValue = ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
八、软件定时器函数
1. xTimerCreate - 创建软件定时器
功能描述:创建一个软件定时器
函数原型:
TimerHandle_t xTimerCreate(
const char * const pcTimerName,
const TickType_t xTimerPeriodInTicks,
const UBaseType_t uxAutoReload,
void * const pvTimerID,
TimerCallbackFunction_t pxCallbackFunction
)
参数说明:
| 参数 | 描述 |
|---|---|
| pcTimerName | 定时器名称 |
| xTimerPeriodInTicks | 定时周期(Tick数) |
| uxAutoReload | 是否自动重加载:pdTRUE自动重加载,pdFALSE一次性 |
| pvTimerID | 定时器ID,可用于回调函数区分定时器 |
| pxCallbackFunction | 定时器回调函数 |
返回值:
- 非NULL:创建成功,返回定时器句柄
- NULL:创建失败
参数取值示例:
TimerHandle_t xTimer = xTimerCreate(
"MyTimer",
pdMS_TO_TICKS(1000), // 1000ms周期
pdTRUE, // 自动重加载
NULL,
vTimerCallback
);
2. xTimerStart - 启动软件定时器(任务版本)
功能描述:启动软件定时器,任务版本
函数原型:
BaseType_t xTimerStart(
TimerHandle_t xTimer,
TickType_t xTicksToWait
)
参数说明:
| 参数 | 描述 |
|---|---|
| xTimer | 定时器句柄 |
| xTicksToWait | 阻塞时间(Tick数) |
返回值:
pdPASS:启动成功pdFAIL:启动失败
参数取值示例:
xTimerStart(xTimer, portMAX_DELAY);
九、中断相关函数
1. taskENTER_CRITICAL - 进入临界区(屏蔽中断)
功能描述:进入临界区,屏蔽低优先级中断
函数原型:
void taskENTER_CRITICAL(void)
参数说明:无
返回值:无
参数取值示例:
taskENTER_CRITICAL();
// 访问临界资源
taskEXIT_CRITICAL();
2. vTaskSuspendAll - 暂停任务调度
功能描述:暂停任务调度器,禁止任务切换
函数原型:
void vTaskSuspendAll(void)
参数说明:无
返回值:无
参数取值示例:
vTaskSuspendAll();
// 执行不希望被任务切换打断的操作
xTaskResumeAll();
十、调试函数
1. vApplicationMallocFailedHook - 内存分配失败回调
功能描述:内存分配失败时调用的回调函数
函数原型:
void vApplicationMallocFailedHook(void)
参数说明:无
返回值:无
参数取值示例:
void vApplicationMallocFailedHook(void) {
// 内存分配失败处理,如打印日志、复位系统等
for(;;); // 卡死等待调试
}
2. vApplicationStackOverflowHook - 栈溢出回调
功能描述:任务栈溢出时调用的回调函数
函数原型:
void vApplicationStackOverflowHook(
TaskHandle_t xTask,
char *pcTaskName
)
参数说明:
| 参数 | 描述 |
|---|---|
| xTask | 栈溢出的任务句柄 |
| pcTaskName | 任务名称 |
返回值:无
参数取值示例:
void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) {
// 栈溢出处理,如打印任务信息、复位系统等
for(;;); // 卡死等待调试
}
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)