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头文件。