使用计数型信号量设计
2,相关函数的API
一、队列:
1,创建队列函数
osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size,
const osMessageQueueAttr_t *attr);
msg_count
:
队列中消息的最大数量,即队列的最大容量。
msg_size
:
单个消息的大小(以字节为单位)。
osMessageQueueAttr_t:队列的属性
2,写队列函数
osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr,
uint8_t msg_prio, uint32_t timeout);
mq_id
:
目标消息队列的id。
msg_ptr
:
指向要发送的消息的指针。
msg_prio
:
消息的优先级。
timeout
: 超时时间,以毫秒为单位。
返回值类型:osStatus_t(判断是否写入成功)
3,
读队列函数
osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t
*msg_prio, uint32_t timeout);
mq_id
:
目标消息队列的id。
msg_ptr
:
指向接收消息的指针。
msg_prio
:
优先级的指针,可以为
NULL
。
timeout
:超时时间,以毫秒为单位。
返回值类型:osStatus_t(判断是否读取成功)
二、信号量
1,创建信号量
osSemaphoreId_t osSemaphoreNew (uint32_t max_count, uint32_t initial_count,
const osSemaphoreAttr_t *attr);
max_count
:信号量的最大计数。
initial_count
:信号量的初始计数。
2,获取信号量
osStatus_t osSemaphoreAcquire (osSemaphoreId_t semaphore_id, uint32_t timeout);
sem_id
:信号量的id。
timeout :等待信号量的超时时间。
返回值类型:osStatus_t(判断获取是否成功)
3,释放信号量
osStatus_t osSemaphoreRelease (osSemaphoreId_t semaphore_id);
sem_id
:信号量的句柄,通过
osSemaphoreNew
返回。
返回值类型:osStatus_t(判断释放是否成功)
三、互斥量
1,创建互斥量
osMutexId_t osMutexNew(const osMutexAttr_t *attr);
attr :互斥量的属性。
2,获取互斥量
osStatus_t osMutexAcquire(osMutexId_t mutex_id, uint32_t timeout);
mutex_id
:要获取的互斥量的id。
timeout :超时时间,通常以毫秒为单位。
3,
释放互斥量
osStatus_t osMutexRelease(osMutexId_t mutex_id);
mutex_id
:要释放的互斥量的标识符。
四、事件组
1,创建事件组
osEventFlagsId_t osEventFlagsNew(const osEventFlagsAttr_t *attr);
attr :事件标志组的属性。
2,设置事件组
uint32_t osEventFlagsSet(osEventFlagsId_t ef_id, uint32_t flags)
ef_id
:事件标志组的id
flags
:要设置的事件标志位,可以使用按位或操作符
|
设置多个标志位。
2,等待事件组
uint32_t osEventFlagsWait(osEventFlagsId_t ef_id, uint32_t flags, uint32_t
options, uint32_t timeout);
ef_id
:事件标志组的id
flags
:要等待的事件标志位,可以使用按位或操作符
|
等待多个标志位。
options :等待标志的个数
timeout :等待的超时时间,单位是毫秒。