消息队列概念和具体使用方法详见zephyr中文文档,此处不再赘述,仅整理一些api供查阅
宏 | 简述 |
---|---|
K_MSGQ_FLAG_ALLOC | |
K_MSGQ_DEFINE(q_name, q_msg_size, q_max_msgs, q_align) | 定义一个消息队列 |
api | brief |
---|---|
void k_msgq_init(struct k_msgq *msgq, char *buffer, size_t msg_size, uint32_t max_msgs) | 初始化一个消息 |
int k_msgq_alloc_init(struct k_msgq *msgq, size_t msg_size, uint32_t max_msgs) | 为一个消息分配堆内存 |
int k_msgq_cleanup(struct k_msgq *msgq) | 释放堆内存 |
int k_msgq_put(struct k_msgq *msgq, const void *data, k_timeout_t timeout) | 往消息中发送数据 |
int k_msgq_get(struct k_msgq *msgq, void *data, k_timeout_t timeout) | 从消息中获取数据 |
int k_msgq_peek(struct k_msgq *msgq, void *data) | 监控消息,获取数据 |
int k_msgq_peek_at(struct k_msgq *msgq, void *data, uint32_t idx) | 从指定的索引中获取消息 |
void k_msgq_purge(struct k_msgq *msgq) | 清除消息队列 |
uint32_t k_msgq_num_free_get(struct k_msgq *msgq) | 获取队列中可用大小 |
void k_msgq_get_attrs(struct k_msgq *msgq, struct k_msgq_attrs *attrs) | 获取消息队列的属性 |
uint32_t k_msgq_num_used_get(struct k_msgq *msgq) | 获取队列中消息数 |
个人理解:k_msgq_alloc_init函数的作用就是将消息放到堆内存,如果不用这个函数申请内存,只用k_msgq_init,默认消息就在栈空间。