freertos中常用api总结


1. 任务管理 (Task Management)

  • xTaskCreate(): 创建任务

    • 功能: 动态创建一个新的任务,并将其加入到 FreeRTOS 的任务调度器中。

    • 常用场景: 在系统初始化阶段或运行时动态创建任务,用于执行不同的功能模块。

    • 关键参数

      :

      • pvTaskCode: 指向任务函数的指针,任务代码的入口。
      • pcName: 任务名称,字符串形式,方便调试和追踪。
      • usStackDepth: 任务堆栈大小,以字 (word) 为单位,需要根据任务需求合理配置。
      • pvParameters: 传递给任务函数的参数,void 指针类型,可以传递任意类型数据。
      • uxPriority: 任务优先级,数值越大优先级越高,FreeRTOS 会根据优先级进行任务调度。
      • pxCreatedTask: 任务句柄指针,用于存储创建的任务句柄,后续操作任务时需要使用该句柄。
  • vTaskDelete(): 删除任务

    • 功能: 删除指定的任务。可以删除自身任务或其它任务。

    • 常用场景: 任务执行完成后不再需要,或者需要动态管理任务生命周期时。

    • 关键参数

      :

      • xTaskToDelete: 要删除的任务句柄。如果为 NULL,则删除自身任务。
  • vTaskDelay(): 任务延时

    • 功能: 使当前任务进入阻塞态,延时指定的时间。

    • 常用场景: 周期性任务的延时,或在不需要立即执行的任务中加入延时以降低 CPU 占用率。

    • 关键参数

      :

      • xTicksToDelay: 延时的时间,以 tick 为单位。tick 的时间长度由 configTICK_RATE_HZ 配置宏定义,例如 configTICK_RATE_HZ 为 1000,则 1 tick 为 1ms。
  • vTaskSuspend(): 挂起任务

    • 功能: 将指定的任务挂起,使其进入挂起态,不再参与任务调度。

    • 常用场景: 暂时停止某个任务的执行,例如调试时暂停某个功能模块。

    • 关键参数

      :

      • xTaskToSuspend: 要挂起的任务句柄。如果为 NULL,则挂起自身任务。
  • vTaskResume(): 恢复任务

    • 功能: 恢复被挂起的任务,使其进入就绪态,重新参与任务调度。

    • 常用场景: 与 vTaskSuspend() 配对使用,在需要时恢复被挂起的任务。

    • 关键参数

      :

      • xTaskToResume: 要恢复的任务句柄。
  • uxTaskGetStackHighWaterMark(): 获取任务堆栈剩余空间

    • 功能: 获取任务堆栈当前剩余空间的大小,用于评估堆栈使用情况,避免堆栈溢出。

    • 常用场景: 调试阶段或性能优化时,检查任务堆栈是否足够,预防潜在的堆栈溢出问题。

    • 关键参数

      :

      • xTask: 要查询的任务句柄。如果为 NULL,则查询自身任务。
  • pcTaskGetName(): 获取任务名称

    • 功能: 获取指定任务的任务名称字符串。

    • 常用场景: 调试信息输出,日志记录等,方便识别任务。

    • 关键参数

      :

      • xTaskToQuery: 要查询的任务句柄。如果为 NULL,则查询自身任务。

2. 队列管理 (Queue Management)

  • xQueueCreate(): 创建队列

    • 功能: 创建一个新的队列,用于任务间或 ISR 与任务间的数据传递。

    • 常用场景: 任务间通信,数据缓冲,消息传递。

    • 关键参数

      :

      • uxQueueLength: 队列的长度,即队列可以存储的最大消息数量。
      • uxItemSize: 队列中每个消息的长度,以字节为单位。如果消息是结构体,则为结构体的大小。
  • xQueueSend() / xQueueSendToBack(): 发送消息到队列尾部 (前者是宏定义,后者是函数)。

    • 功能: 向队列的尾部发送一条消息。

    • 常用场景: 任务向队列发送数据。

    • 关键参数

      :

      • xQueue: 要发送消息的队列句柄。
      • pvItemToQueue: 指向要发送的消息数据的指针。
      • xTicksToWait: 阻塞等待时间,如果队列已满,任务将阻塞等待,直到队列有空间或超时。设置为 0 表示非阻塞发送,队列满则立即返回错误。portMAX_DELAY 表示永久阻塞等待。
  • xQueueSendToFront(): 发送消息到队列头部

    • 功能: 向队列的头部发送一条消息。
    • 常用场景: 发送高优先级消息,需要优先处理的消息。
    • 参数: 与 xQueueSend() 类似。
  • xQueueReceive(): 接收队列消息

    • 功能: 从队列中接收一条消息。

    • 常用场景: 任务从队列接收数据。

    • 关键参数

      :

      • xQueue: 要接收消息的队列句柄。
      • pvBuffer: 指向接收消息数据缓冲区的指针。
      • xTicksToWait: 阻塞等待时间,如果队列为空,任务将阻塞等待,直到队列有消息或超时。设置为 0 表示非阻塞接收,队列空则立即返回错误。portMAX_DELAY 表示永久阻塞等待。
  • uxQueueMessagesWaiting(): 获取队列中消息数量

    • 功能: 获取当前队列中已有的消息数量。

    • 常用场景: 查询队列状态,判断队列是否为空或已满。

    • 关键参数

      :

      • xQueue: 要查询的队列句柄。
  • vQueueDelete(): 删除队列

    • 功能: 删除指定的队列,释放队列占用的内存。

    • 常用场景: 队列不再需要时,释放资源。

    • 关键参数

      :

      • xQueueToDelete: 要删除的队列句柄。

3. 信号量管理 (Semaphore Management)

  • xSemaphoreCreateBinary(): 创建二值信号量

    • 功能: 创建一个二值信号量,初始状态可以为可用或不可用。二值信号量只能取 0 和 1 两个值。
    • 常用场景: 互斥访问共享资源,任务同步 (例如事件触发)。
    • 返回: 信号量句柄,创建失败返回 NULL
  • xSemaphoreCreateCounting(): 创建计数信号量

    • 功能: 创建一个计数信号量,可以设定最大计数值和初始计数值。计数信号量可以允许多个任务访问资源 (但访问数量有限制)。

    • 常用场景: 资源计数,例如控制访问具有多个槽位的资源池 (例如缓冲区管理)。

    • 关键参数

      :

      • uxMaxCount: 信号量的最大计数值。
      • uxInitialCount: 信号量的初始计数值。
    • 返回: 信号量句柄,创建失败返回 NULL

  • xSemaphoreCreateMutex(): **创建互斥信号量 (互斥锁)**。

    • 功能: 创建一个互斥信号量,用于保护共享资源,防止多个任务同时访问造成数据竞争。互斥信号量具有优先级继承机制,可以避免优先级反转问题。
    • 常用场景: 保护临界区,例如访问共享外设、全局变量等。
    • 返回: 互斥信号量句柄,创建失败返回 NULL
  • xSemaphoreTake(): 获取信号量

    • 功能: 尝试获取信号量,如果信号量不可用,则任务进入阻塞态等待信号量可用。

    • 常用场景: 任务访问共享资源前,先获取信号量。

    • 关键参数

      :

      • xSemaphore: 要获取的信号量句柄。
      • xTicksToWait: 阻塞等待时间,如果信号量不可用,任务将阻塞等待,直到信号量可用或超时。portMAX_DELAY 表示永久阻塞等待。
  • xSemaphoreGive(): 释放信号量

    • 功能: 释放信号量,使信号量可用。

    • 常用场景: 任务访问完共享资源后,释放信号量,允许其他任务访问。

    • 关键参数

      :

      • xSemaphore: 要释放的信号量句柄。
  • vSemaphoreDelete(): 删除信号量

    • 功能: 删除指定的信号量,释放信号量占用的内存。

    • 常用场景: 信号量不再需要时,释放资源。

    • 关键参数

      :

      • xSemaphoreToDelete: 要删除的信号量句柄。

4. 互斥量 (Mutex) 管理

  • 互斥信号量 xSemaphoreCreateMutex() 实际上就是互斥量,因此互斥量管理 API 与信号量管理 API 在互斥量部分是重合的。 常用的互斥量操作 API 实际上就是 xSemaphoreTake()xSemaphoreGive()

5. 事件组管理 (Event Group Management)

  • xEventGroupCreate(): 创建事件组

    • 功能: 创建一个事件组,用于任务间的事件同步。一个事件组可以包含多个事件标志位。
    • 常用场景: 多事件同步,一个任务需要等待多个事件发生后才能执行。
    • 返回: 事件组句柄,创建失败返回 NULL
  • xEventGroupSetBits(): 设置事件位

    • 功能: 设置事件组中指定的事件位。

    • 常用场景: 事件发生时,设置对应的事件位。

    • 关键参数

      :

      • xEventGroup: 要设置事件位的事件组句柄。
      • uxBitsToSet: 要设置的事件位掩码。可以使用位操作来设置多个事件位。
  • xEventGroupWaitBits(): 等待事件位

    • 功能: 等待事件组中指定的事件位被设置。

    • 常用场景: 任务等待指定的事件发生。

    • 关键参数

      :

      • xEventGroup: 要等待事件位的事件组句柄。
      • uxBitsToWaitFor: 要等待的事件位掩码。
      • xClearOnExit: 退出时是否清除等待的事件位。
      • xWaitForAllBits: 是否等待所有指定的事件位都被设置。
      • xTicksToWait: 阻塞等待时间。
    • 返回: 实际触发的事件位掩码。

  • xEventGroupClearBits(): 清除事件位

    • 功能: 清除事件组中指定的事件位。

    • 常用场景: 事件处理完成后,清除事件位,准备下一次事件触发。

    • 关键参数

      :

      • xEventGroup: 要清除事件位的事件组句柄。
      • uxBitsToClear: 要清除的事件位掩码。
  • vEventGroupDelete(): 删除事件组

    • 功能: 删除指定的事件组,释放事件组占用的内存。

    • 常用场景: 事件组不再需要时,释放资源。

    • 关键参数

      :

      • xEventGroupToDelete: 要删除的事件组句柄。

6. 软件定时器管理 (Software Timer Management)

  • xTimerCreate(): 创建软件定时器

    • 功能: 创建一个软件定时器,可以设置定时器周期和回调函数。

    • 常用场景: 周期性任务触发,延时操作,事件触发等。

    • 关键参数

      :

      • pcTimerName: 定时器名称,字符串形式。
      • xTimerPeriodInTicks: 定时器周期,以 tick 为单位。
      • uxAutoReload: 自动重载标志,pdTRUE 为自动重载 (周期定时器),pdFALSE 为单次触发定时器。
      • pvTimerID: 定时器 ID,用户自定义数据,可以传递给定时器回调函数。
      • pxCallbackFunction: 定时器回调函数指针,定时器超时后执行的函数。
    • 返回: 定时器句柄,创建失败返回 NULL

  • xTimerStart(): 启动定时器

    • 功能: 启动指定的定时器。

    • 常用场景: 在需要开始定时时启动定时器。

    • 关键参数

      :

      • xTimer: 要启动的定时器句柄。
      • xTicksToWait: 阻塞等待时间 (通常设置为 0 或 portMAX_DELAY,在定时器服务任务上下文中可以阻塞等待,在其他任务上下文中不应该阻塞等待)。
  • xTimerStop(): 停止定时器

    • 功能: 停止指定的定时器。

    • 常用场景: 在不需要定时器触发时停止定时器。

    • 关键参数

      :

      • xTimer: 要停止的定时器句柄。
      • xTicksToWait: 阻塞等待时间 (同 xTimerStart() )。
  • xTimerChangePeriod(): 修改定时器周期

    • 功能: 动态修改定时器的周期。

    • 常用场景: 在运行时根据需要调整定时器周期。

    • 关键参数

      :

      • xTimer: 要修改周期的定时器句柄。
      • xNewPeriodInTicks: 新的定时器周期,以 tick 为单位。
      • xTicksToWait: 阻塞等待时间 (同 xTimerStart() )。
  • xTimerIsTimerActive(): 判断定时器是否激活

    • 功能: 判断指定的定时器是否处于激活状态。

    • 常用场景: 查询定时器状态。

    • 关键参数

      :

      • xTimer: 要查询的定时器句柄。
    • 返回: pdTRUE 表示激活,pdFALSE 表示未激活。

  • xTimerDelete(): 删除定时器

    • 功能: 删除指定的定时器,释放定时器占用的内存。

    • 常用场景: 定时器不再需要时,释放资源。

    • 关键参数

      :

      • xTimerToDelete: 要删除的定时器句柄。
      • xTicksToWait: 阻塞等待时间 (同 xTimerStart() )。

7. 内存管理 (Memory Management)

  • pvPortMalloc(): 动态内存分配 (FreeRTOS 的内存分配函数)。

    • 功能: 从 FreeRTOS 的堆内存中分配指定大小的内存块。

    • 常用场景: 动态创建 FreeRTOS 对象 (例如队列、信号量、任务等) 或应用程序需要动态内存分配时。

    • 关键参数

      :

      • xWantedSize: 要分配的内存块大小,以字节为单位。
    • 返回: 指向分配的内存块的指针,分配失败返回 NULL

  • vPortFree(): 动态内存释放 (FreeRTOS 的内存释放函数)。

    • 功能: 释放由 pvPortMalloc() 分配的内存块。

    • 常用场景: 释放不再使用的动态分配内存,避免内存泄漏。

    • 关键参数

      :

      • pvBlockToFree: 指向要释放的内存块的指针,必须是由 pvPortMalloc() 分配的内存块。

8. 中断管理 (Interrupt Management)

  • xSemaphoreGiveFromISR(): 在中断服务例程 (ISR) 中释放信号量

    • 功能: 在 ISR 中释放信号量,用于通知任务发生了某个事件。

    • 常用场景: ISR 中检测到硬件事件,需要通知任务进行处理时。

    • 关键参数

      :

      • xSemaphore: 要释放的信号量句柄。
      • pxHigherPriorityTaskWoken: 输出参数,用于指示是否有更高优先级的任务因为释放信号量而进入就绪态,需要进行上下文切换。通常需要根据该参数判断是否需要手动触发上下文切换 (portYIELD_FROM_ISR()taskYIELD_FROM_ISR() )。
  • xQueueSendFromISR() / xQueueSendToBackFromISR(): 在 ISR 中发送消息到队列尾部

    • 功能: 在 ISR 中向队列发送消息,用于 ISR 与任务间的数据传递。

    • 常用场景: ISR 中接收到数据,需要传递给任务进行处理时。

    • 关键参数

      :

      • xQueue: 要发送消息的队列句柄。
      • pvItemToQueue: 指向要发送的消息数据的指针。
      • pxHigherPriorityTaskWoken: 输出参数,同 xSemaphoreGiveFromISR()
  • xQueueSendToFrontFromISR(): 在 ISR 中发送消息到队列头部

    • 功能: 在 ISR 中向队列头部发送消息。
    • 参数: 与 xQueueSendFromISR() 类似。
  • portYIELD_FROM_ISR() / taskYIELD_FROM_ISR(): 在 ISR 中触发上下文切换 (与具体的 FreeRTOS 移植有关)。

    • 功能: 在 ISR 中手动触发上下文切换,将 CPU 使用权交给更高优先级的就绪态任务。

    • 常用场景: 当 ISR 中释放信号量或发送消息到队列,导致更高优先级的任务进入就绪态时,需要触发上下文切换,立即执行高优先级任务,提高系统实时性。

    • 参数

      :

      • 无参数,根据 xSemaphoreGiveFromISR()xQueueSendFromISR()pxHigherPriorityTaskWoken 参数判断是否需要调用。

二、CMSIS-V2 RTOS API (在 STM32CubeMX 中常用)

CMSIS-V2 RTOS API 提供了一套标准化的 RTOS 接口,在 STM32CubeMX 中,如果您选择了 CMSIS_RTOS_V2,则可以使用 CMSIS-V2 标准接口来操作 FreeRTOS 内核对象。CMSIS-V2 RTOS API 实际上是对原生 FreeRTOS API 的一层封装,其底层实现仍然是调用原生 FreeRTOS API。

使用 CMSIS-V2 RTOS API 的好处是可以提高代码的可移植性,如果将来需要更换 RTOS,只需要修改 RTOS 适配层即可,应用程序代码可以基本保持不变。

以下是一些常用的 CMSIS-V2 RTOS API 接口,对应于原生 FreeRTOS API 的功能模块:

1. 任务管理 (Thread Management) (CMSIS-V2 中任务称为线程)

  • osThreadNew(): 创建线程 (对应 xTaskCreate() )。

    • 功能: 创建并启动一个新的线程。

    • 关键参数

      :

      • thread_def: 线程定义结构体指针,包含线程入口函数、名称、优先级、堆栈大小等信息。
      • thread_attr: 线程属性结构体指针,可以配置线程属性,例如堆栈、优先级等,可以设置为 NULL 使用默认属性。
    • 返回: 线程 ID (osThreadId_t),创建失败返回 NULL

  • osThreadTerminate(): 终止线程 (对应 vTaskDelete() )。

    • 功能: 终止指定的线程。

    • 关键参数

      :

      • thread_id: 要终止的线程 ID。
  • osDelay(): 线程延时 (对应 vTaskDelay() )。

    • 功能: 使当前线程进入延时状态。

    • 关键参数

      :

      • ticks: 延时的时间,以 tick 为单位。
  • osThreadSuspend(): 挂起线程 (对应 vTaskSuspend() )。

    • 功能: 挂起指定的线程。

    • 关键参数

      :

      • thread_id: 要挂起的线程 ID。
  • osThreadResume(): 恢复线程 (对应 vTaskResume() )。

    • 功能: 恢复被挂起的线程。

    • 关键参数

      :

      • thread_id: 要恢复的线程 ID。
  • osThreadGetStackSpace(): 获取线程堆栈剩余空间 (对应 uxTaskGetStackHighWaterMark() )。

    • 功能: 获取线程堆栈当前剩余空间的大小。

    • 关键参数

      :

      • thread_id: 要查询的线程 ID。
  • osThreadGetName(): 获取线程名称 (对应 pcTaskGetName() )。

    • 功能: 获取指定线程的线程名称字符串。

    • 关键参数

      :

      • thread_id: 要查询的线程 ID。

2. 队列管理 (Message Queue Management) (CMSIS-V2 中队列称为消息队列)

  • osMessageQueueNew(): 创建消息队列 (对应 xQueueCreate() )。

    • 功能: 创建一个新的消息队列。

    • 关键参数

      :

      • msg_count: 消息队列的长度,即队列可以存储的最大消息数量。
      • msg_size: 队列中每个消息的长度,以字节为单位。
      • queue_attr: 队列属性结构体指针,可以配置队列属性,可以设置为 NULL 使用默认属性。
    • 返回: 消息队列 ID (osMessageQueueId_t),创建失败返回 NULL

  • osMessageQueuePut(): 发送消息到消息队列尾部 (对应 xQueueSend() / xQueueSendToBack() )。

    • 功能: 向消息队列的尾部发送一条消息。

    • 关键参数

      :

      • mq_id: 要发送消息的消息队列 ID。
      • msg_ptr: 指向要发送的消息数据的指针。
      • timeout: 阻塞等待时间,以 tick 为单位。
  • osMessageQueueGet(): 接收消息队列消息 (对应 xQueueReceive() )。

    • 功能: 从消息队列中接收一条消息。

    • 关键参数

      :

      • mq_id: 要接收消息的消息队列 ID。
      • msg_ptr: 指向接收消息数据缓冲区的指针。
      • timeout: 阻塞等待时间,以 tick 为单位。
  • osMessageQueueGetCount(): 获取消息队列中消息数量 (对应 uxQueueMessagesWaiting() )。

    • 功能: 获取当前消息队列中已有的消息数量。

    • 关键参数

      :

      • mq_id: 要查询的消息队列 ID。
  • osMessageQueueDelete(): 删除消息队列 (对应 vQueueDelete() )。

    • 功能: 删除指定的消息队列。

    • 关键参数

      :

      • mq_id: 要删除的消息队列 ID。

3. 信号量管理 (Semaphore Management)

  • osSemaphoreNew(): 创建信号量 (对应 xSemaphoreCreateBinary()xSemaphoreCreateCounting() )。

    • 功能

      : 创建一个信号量,可以创建二值信号量或计数信号量,根据

      max_signals

      参数决定。

      • 如果 max_signals 为 1,则创建二值信号量。
      • 如果 max_signals 大于 1,则创建计数信号量。
    • 关键参数

      :

      • max_signals: 信号量的最大计数数量 (二值信号量为 1,计数信号量大于 1)。
      • initial_signals: 信号量的初始计数数量。
      • semaphore_attr: 信号量属性结构体指针,可以配置信号量属性,可以设置为 NULL 使用默认属性。
    • 返回: 信号量 ID (osSemaphoreId_t),创建失败返回 NULL

  • osSemaphoreAcquire(): 获取信号量 (对应 xSemaphoreTake() )。

    • 功能: 尝试获取信号量。

    • 关键参数

      :

      • semaphore_id: 要获取的信号量 ID。
      • timeout: 阻塞等待时间,以 tick 为单位。
  • osSemaphoreRelease(): 释放信号量 (对应 xSemaphoreGive() )。

    • 功能: 释放信号量。

    • 关键参数

      :

      • semaphore_id: 要释放的信号量 ID。
  • osSemaphoreDelete(): 删除信号量 (对应 vSemaphoreDelete() )。

    • 功能: 删除指定的信号量。

    • 关键参数

      :

      • semaphore_id: 要删除的信号量 ID。

4. 互斥锁 (Mutex) 管理

  • osMutexNew(): 创建互斥锁 (对应 xSemaphoreCreateMutex() )。

    • 功能: 创建一个互斥锁。

    • 关键参数

      :

      • mutex_attr: 互斥锁属性结构体指针,可以配置互斥锁属性,可以设置为 NULL 使用默认属性。
    • 返回: 互斥锁 ID (osMutexId_t),创建失败返回 NULL

  • osMutexAcquire(): 获取互斥锁 (对应 xSemaphoreTake() )。

    • 功能: 尝试获取互斥锁。

    • 关键参数

      :

      • mutex_id: 要获取的互斥锁 ID。
      • timeout: 阻塞等待时间,以 tick 为单位。
  • osMutexRelease(): 释放互斥锁 (对应 xSemaphoreGive() )。

    • 功能: 释放互斥锁。

    • 关键参数

      :

      • mutex_id: 要释放的互斥锁 ID。
  • osMutexDelete(): 删除互斥锁 (对应 vSemaphoreDelete() )。

    • 功能: 删除指定的互斥锁。

    • 关键参数

      :

      • mutex_id: 要删除的互斥锁 ID。

5. 事件标志 (Event Flags) 管理 (CMSIS-V2 中事件组称为事件标志)

  • osEventFlagsNew(): 创建事件标志 (对应 xEventGroupCreate() )。

    • 功能: 创建一个事件标志组。

    • 关键参数

      :

      • ef_attr: 事件标志属性结构体指针,可以配置事件标志属性,可以设置为 NULL 使用默认属性。
    • 返回: 事件标志 ID (osEventFlagsId_t),创建失败返回 NULL

  • osEventFlagsSet(): 设置事件标志位 (对应 xEventGroupSetBits() )。

    • 功能: 设置事件标志组中指定的事件位。

    • 关键参数

      :

      • ef_id: 要设置事件位的事件标志 ID。
      • flags: 要设置的事件位掩码。
  • osEventFlagsWait(): 等待事件标志位 (对应 xEventGroupWaitBits() )。

    • 功能: 等待事件标志组中指定的事件位被设置。

    • 关键参数

      :

      • ef_id: 要等待事件位的事件标志 ID。
      • flags: 要等待的事件位掩码。
      • options: 等待选项,例如 osFlagsWaitAny (等待任意一个事件位被设置) 或 osFlagsWaitAll (等待所有指定的事件位都被设置)。
      • timeout: 阻塞等待时间,以 tick 为单位。
    • 返回: 实际触发的事件位掩码。

  • osEventFlagsClear(): 清除事件标志位 (对应 xEventGroupClearBits() )。

    • 功能: 清除事件标志组中指定的事件位。

    • 关键参数

      :

      • ef_id: 要清除事件位的事件标志 ID。
      • flags: 要清除的事件位掩码。
  • osEventFlagsDelete(): 删除事件标志 (对应 vEventGroupDelete() )。

    • 功能: 删除指定的事件标志组。

    • 关键参数

      :

      • ef_id: 要删除的事件标志 ID。

6. 定时器 (Timer) 管理 (CMSIS-V2 中软件定时器称为定时器)

  • osTimerNew(): 创建定时器 (对应 xTimerCreate() )。

    • 功能: 创建一个定时器。

    • 关键参数

      :

      • callback: 定时器回调函数指针。
      • type: 定时器类型,osTimerOnce (单次触发) 或 osTimerPeriodic (周期触发)。
      • timer_attr: 定时器属性结构体指针,可以配置定时器属性,可以设置为 NULL 使用默认属性。
    • 返回: 定时器 ID (osTimerId_t),创建失败返回 NULL

  • osTimerStart(): 启动定时器 (对应 xTimerStart() )。

    • 功能: 启动指定的定时器。

    • 关键参数

      :

      • timer_id: 要启动的定时器 ID。
      • period: 定时器周期,以 tick 为单位。
  • osTimerStop(): 停止定时器 (对应 xTimerStop() )。

    • 功能: 停止指定的定时器。

    • 关键参数

      :

      • timer_id: 要停止的定时器 ID。
  • osTimerIsRunning(): 判断定时器是否运行 (对应 xTimerIsTimerActive() )。

    • 功能: 判断指定的定时器是否处于运行状态。

    • 关键参数

      :

      • timer_id: 要查询的定时器 ID。
    • 返回: true 表示运行,false 表示停止。

  • osTimerDelete(): 删除定时器 (对应 xTimerDelete() )。

    • 功能: 删除指定的定时器。

    • 关键参数

      :

      • timer_id: 要删除的定时器 ID。

7. 内存管理 (Memory Pool Management) (CMSIS-V2 中没有直接对应 pvPortMalloc()vPortFree() 的标准 API,CMSIS-V2 提供了内存池管理,用于管理固定大小的内存块,如果需要动态内存分配,仍然需要使用原生 FreeRTOS 的 pvPortMalloc()vPortFree() 或者 C 标准库的 malloc()free() )

  • osMemoryPoolNew(): 创建内存池

    • 功能: 创建一个内存池,用于管理固定大小的内存块。

    • 关键参数

      :

      • block_count: 内存池中内存块的数量。
      • block_size: 每个内存块的大小,以字节为单位。
      • mp_attr: 内存池属性结构体指针,可以配置内存池属性,可以设置为 NULL 使用默认属性。
    • 返回: 内存池 ID (osMemoryPoolId_t),创建失败返回 NULL

  • osMemoryPoolAlloc(): 从内存池分配内存块

    • 功能: 从内存池中分配一个内存块。

    • 关键参数

      :

      • mp_id: 要分配内存的内存池 ID。
      • timeout: 阻塞等待时间,以 tick 为单位。
    • 返回: 指向分配的内存块的指针,分配失败返回 NULL

  • osMemoryPoolFree(): 释放内存块到内存池

    • 功能: 将从内存池分配的内存块释放回内存池。

    • 关键参数

      :

      • mp_id: 要释放内存的内存池 ID。
      • block: 指向要释放的内存块的指针。
  • osMemoryPoolDelete(): 删除内存池

    • 功能: 删除指定的内存池。

    • 关键参数

      :

      • mp_id: 要删除的内存池 ID。

文章作者: LsWorld
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LsWorld !
评论
  目录