FreeRTOS常用API
FreeRTOS的常用API主要按功能分为任务管理器、队列、信号量、软件定时器几大类。以下是核心接口的整理:
任务管理API(Task)
用于创建、删除和调度任务,是FreeRTOS最基础的部分。
xTaskCreat():动态创建一个新任务。需要传入任务函数指针、任务名、堆栈深度、参数、优先级和任务句柄指针。任务函数通常是一个死循环,不能返回。
vTaskDelay():将当前任务延时(阻塞)指定的tick数,让出CPU给其他就绪任务。
vTaskDelayUntil():用于实现固定周期的任务执行。它会计算下一次唤醒的绝对时间,适合需要严格周期性的控制任务。
xTakGetTickCount():获取系统启动以来的tick数,常用于超时判断或计算时间间隔。
vTaskDelete():删除一个任务。传入NULL表示删除当前任务自身。
uTaskGetStackHighWaterMark():获取任务运行以来的最小剩余堆栈空间。返回值越接近0,说明堆栈越危险,是调试堆栈溢出的工具。
队列API(Queue)
用于任务间或中断与任务间的数据传递(值拷贝)。
- xQueueCreat():创建一个队列。需要指定队列长度(能存多少个元素)和每个元素的大小(字节)。
- xQueueSend():向队列尾部发送数据。如果队列已满,可以根据超时参数选择等待或立即返回。
- xQueueReceive():从队列中读取并移除数据。如果队列为空,同样支持阻塞等待。
- ISR安全版本:在中断服务程序(ISR)中必须使用带FromISR后缀的接口,如xQueueSendFromISR()和xQueueReceiveFromISR()。特别注意,xQueueSendFromISR通常需要配合pxHigherPriorityTaskWoken参数来判断是否需要切换任务切换。
信号量/互斥锁API(Semaphore/Mutex)
用于任务同步或保护共享资源。
- xSemaphoreCreateBinary():创建二值信号量。通常用于任务同步(如中断通知任务处理数据),无优先级继承机制。
- xSemaphoreCreateMutex():创建互斥锁。专门用于保护共享资源。关键特性是支持优先级继承,能有效防止优先级反转问题。jjj
- xSemaphoreTake():获取(Take)信号量。如果信号量不可用,任务可选择阻塞等待。对于互斥锁,使用完必须xSemaphoreGive()归还。
软件定时器API(Timer)
由FreeRTOS内核的守护任务管理,不占用硬件定时器资源。
- xTimerCreate():创建软件定时器。需要指定周期、是否自动重载(周期性)以及回调函数。
- xTimerStart()/xTimerStop():启动或停止一个定时器。
这些接口的具体函数原型和参数细节(如configMAX_PRIORITIES限制),建议直接参考你所用的FreeRTOS版本配套的task.h、queue.h、semphr.h、和timer.h头文件。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 CCの日记!
评论