1.15作业

发布时间:2024年01月15日

使用计数型信号量设计:生产者和消费者模型????????????????????????????

总结今天学习的API函数,写出函数参数和返回值的意思,并且说明函数功能?????

创建队列

osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size,

const osMessageQueueAttr_t *attr);

uint32_t msg_count:队列中消息的最大数量

uint32_t msg_size:消息的大小

const osMessageQueueAttr_t *attr:队列的属性

返回消息队列的ID

队列写入函数

osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id,?const void *msg_ptr,?

uint8_t msg_prio, uint32_t timeout);

osMessageQueueId_t:消息队列的ID

?const void *msg_ptr:存储发送消息的指针

uint8_t msg_prio:消息的优先级

uint32_t timeout:超时时间

返回值:?

osOK : 如果消息成功发送到队列。

osErrorTimeoutResource : 如果在超时时间内未能将消息放入队列。

osErrorResource : 如果由于其他原因未能将消息放入队列。

读队列函数

osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t

*msg_prio, uint32_t timeout);

mq_id : 目标消息队列的标识符。

msg_ptr : 指向接收消息的缓冲区的指针。

msg_prio : 指向用于存储接收到的消息的优先级的指针,可以为NULL

timeout : 在等待队列中可用消息时的超时时间,以毫秒为单位。如果设置为0,则表示无限等待。

创建信号量

osSemaphoreId_t osSemaphoreNew (uint32_t max_count, uint32_t initial_count,

const osSemaphoreAttr_t *attr);

max_count :信号量的最大计数。它表示同一时间内可以有多少个任务能够同时获取该信号

量。

initial_count :信号量的初始计数。表示在创建信号量时,初始的可用资源数量。

返回值:

该函数返回一个类型为 osSemaphoreId_t 的信号量句柄,该句柄用于后续的信号量操作。

获取信号量

osStatus_t osSemaphoreAcquire (osSemaphoreId_t semaphore_id, uint32_t timeout);

sem_id :信号量的句柄,通过 osSemaphoreNew 返回。

timeout :等待信号量的超时时间,可以是一个时间值或特定的宏值,如 osWaitForever

表示一直等待, osNoWait 表示不等待,立即返回。

返回值

如果成功获取信号量,则返回 osOK

osSemaphoreId_t osSemaphoreNew (uint32_t max_count, uint32_t initial_count,

const osSemaphoreAttr_t *attr);

osStatus_t osSemaphoreAcquire (osSemaphoreId_t semaphore_id, uint32_t timeout);如果等待超时,则返回 osErrorTimeout

如果因为其他原因无法获取信号量,则返回相应的错误码。

释放信号量

osStatus_t osSemaphoreRelease (osSemaphoreId_t semaphore_id);

参数:

sem_id :信号量的句柄,通过 osSemaphoreNew 返回。

返回值:

如果成功释放信号量,则返回 osOK

如果释放失败,则返回相应的错误码。

创建互斥量

osMutexId_t osMutexNew(const osMutexAttr_t *attr);

返回值:

osMutexId_t :互斥量的标识符,用于后续对互斥量的操作。

参数:

attr :互斥量的属性,包括优先级、名称等。可以为 NULL ,表示使用默认属性。

获取互斥量

osStatus_t osMutexAcquire(osMutexId_t mutex_id, uint32_t timeout);

返回值:

osStatus_t :表示互斥量获取的状态,可能的取值包括 osOK osErrorResource (资源不可

用)、 osErrorTimeout (超时)等。

参数:

mutex_id :要获取的互斥量的标识符。

timeout :等待互斥量的最大时间,通常以毫秒为单位。可以为 osWaitForever 表示无限等待,

也可以是一个具体的时间值。

释放互斥量

osStatus_t osMutexRelease(osMutexId_t mutex_id);

返回值:

osStatus_t :表示互斥量释放的状态,通常为 osOK

参数:

mutex_id :要释放的互斥量的标识符。

创建事件组函数

返回值: 返回一个事件标志组的标识符(ID),用于后续对事件标志组的操作。

参数:

attr :事件标志组的属性,可以为 NULL 或者包含有关事件标志组的一些配置信息的指针。

如果为 NULL ,则使用默认属性。

设置事件组

uint32_t osEventFlagsSet(osEventFlagsId_t ef_id, uint32_t flags);

返回值: 返回设置之前的事件标志状态。

参数:

ef_id :事件标志组的标识符,是由 osEventFlagsNew 返回的。

flags :要设置的事件标志位,可以使用按位或操作符 | 设置多个标志位。

等待事件组

uint32_t osEventFlagsWait(osEventFlagsId_t ef_id, uint32_t flags, uint32_t

options, uint32_t timeout);

返回值: 返回实际发生的事件标志位,或者在超时时返回错误代码。

参数:

ef_id :事件标志组的标识符,是由 osEventFlagsNew 返回的。

flags :要等待的事件标志位,可以使用按位或操作符 | 等待多个标志位。

options :等待标志的选项,例如等待所有标志或者只等待任意一个标志。具体取值取决于

RTOS的实现。

timeout :等待的超时时间,单位是毫秒。如果设置为 osWaitForever ,则表示一直等

待,如果设置为0,则表示不等待。

? ? ? ? ? ? ??

文章来源:https://blog.csdn.net/2301_79965609/article/details/135608501
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。