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。