MQ(message queue),从字面意思来看,本质是一个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。 在互联网架构中,MQ 是一种非常常见的上下游 “逻辑解耦 + 物理解耦” 的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ ,不用依赖其他服务。
在RT-Thread中,创建消息队列有两种主要方法:动态分配内存和静态分配内存。以下是详细的步骤和注意事项: 动态分配内存:rt_mq_create 📦 动态分配内存是指消息队列的内存是在函数内部分配的。你可以使用rt_mq_create函数来创建消息队列。这个函数的原型如下:rt_mq_t rt_mq_create(const char* name, rt_size_t m...
";staticcharmb_str3[]="over";ALIGN(RT_ALIGN_SIZE)staticcharthread1_stack[1024];staticstructrt_threadthread1;/* 线程 1 入口 */staticvoidthread1_entry(void*parameter){char*str;while(1){rt_kprintf("thread1: try to recv a mail\n");/* 从邮箱中收取邮件 */if(rt_mb_recv(&mb,(rt_uin...
线程挂起可以由多种方法实现:线程调用rt_thread_delay()、rt_thread_suspend()等函数接口可以使得线程主动挂起,放弃CPU使用权,当线程调用rt_sem_take(),rt_mb_recv()等函数时,资源不可使用也会导致调用线程被动挂起。 当线程已经是挂起态的时候无法调用rt_thread_suspend()函数,已经是挂起态的线程调用rt_thread_...
如果使用rt_mq_create创建消息队列,消息队列池自动根据消息体大小msg_size和消息队列最多容纳的消息数量max_msgs计算。 但如果使用rt_mq_init初始化消息队列,消息队列池的内存msgpool需要用户提供,这个时候,需要注意消息池内存大小pool_size。根据下面的公式计算得出: ...
1rt_err_t rt_mq_delete(rt_mq_t mq); 1. (1)入口参数: mq:消息队列对象的句柄。 (2)返回值: RT_EOK:成功。 3、创建静态消息队列函数:创建静态消息队列和《RT-Thread编程指南》所讲的初始化静态消息队列是一样的,静态消息队列对象的内存是在系统编译时由编译器分配的,一般放于读数据段或未初始化数据...
如果使用 `rt_mq_create` 创建消息队列,消息队列池自动根据消息体大小 `msg_size` 和消息队列最多容纳的消息数量 `max_msgs` 计算。 但如果使用 `rt_mq_init` 初始化消息队列,消息队列池的内存 `msgpool` 需要用户提供,这个时候,需要注意消息池内存大小 `pool_size`。根据下面的公式计算得出: ...
rt_mutex_create rt_mutex_trytake rt_mutex_delete rt_event_create rt_event_delete rt_mb_create rt_mb_delete rt_mq_create rt_mq_delete 完成量 rt_completion_wait 队列类 rt_wqueue_wait rt_data_queue_push rt_data_queue_pop 延时 rt_thread_sleep ...
typedefstructrt_messagequeue *rt_mq_t; 从上到下依次为: 对象结构体 消息池开始地址 消息大小(字节),最大消息数目 记录消息个数的变量 表头指针,表尾指针,空闲节点指针 发送方线程挂起节点 再来看看它的相关函数: /*创建函数,返回一个消息队列句柄(rt_mq_t)*/rt_mq_t rt_mq_create(constchar*name,//名...
使用rt_mq_create 创建消息队列: #include<rtthread.h>#defineMSG_SIZEsizeof(int)#defineMAX_MSGS5voidexample_thread_entry(void*parameter){rt_mq_tqueue=rt_mq_create("my_queue",MSG_SIZE,MAX_MSGS,RT_IPC_FLAG_FIFO);if(queue==RT_NULL){rt_kprintf("Failed to create message queue!\n");return...