2021SC@SDUSC
文章目录
经过查阅资料,我发现TencentOS Tiny的不同版本对于消息队列的读写操作似乎是不同的,旧版本中没有等待机制,新版本中有等待机制也就是之前所说的pend-post机制,我将新旧版本的源码都找了出来做对比:
一. 旧版本中往消息队列中写入消息
TencentOS-tiny往消息队列中写入消息的函数tos_msg_queue_put
在文件tos_message_queue.c
里:
__API__ k_err_t tos_msg_queue_put(k_msg_queue_t *msg_queue, void *msg_addr, size_t msg_size, k_opt_t opt)
{
TOS_CPU_CPSR_ALLOC();
k_msg_t *msg;
#if TOS_CFG_OBJECT_VERIFY_EN > 0u
if (!knl_object_verify(&msg_queue->knl_obj, KNL_OBJ_TYPE_MSG_QUEUE)) {
return K_ERR_OBJ_INVALID;
}
#endif
TOS_CPU_INT_DISABLE();
msg = msgpool_alloc();
if (!msg) {
TOS_CPU_INT_ENABLE();
return K_ERR_MSG_QUEUE_FULL;
}
msg->msg_addr = msg_addr;
msg->msg_size = msg_size;
if (opt & TOS_OPT_MSG_PUT_LIFO) {
tos_list_add(&msg->list, &msg_queue->queue_head);
} else {
tos_list_add_tail(&msg->list, &msg_queue->queue_head);
}
TOS_CPU_INT_ENABLE();