更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
请根据RT-Thread邮箱的相关说明,完成邮箱线程通信的代码实现,相关说明及代码框架如下: 3. 接收邮件 线程调用rt_mb_recv () 可接收邮件,邮箱中有邮件时,接收线程立即取到邮件并返回RT_EOK,否则接收线程会根据超时时间挂起在等待线程链表上或直接返回 -RT_ERROR。rt_mb_recv () 函数说明见表10-3。 4. 删除邮箱 系统不再使用邮箱时,可以调用rt_mb_delete () 删除动态创建的邮箱,以释放内存资源。如果删除邮箱时,有线程挂起等待,则删除操作会先唤醒等待该邮箱的线程(等待的返回值是 -RT_ERROR),然后再释放邮箱的内存资源。rt_mb_delete () 函数见表10-4。 10.1.3 邮箱应用步骤 邮箱的应用有固定的步骤,以动态邮箱为例,包括如下4个步骤: 1)定义邮箱句柄:`rt_mailbox_t dmb = RT_NULL;`; 2)主线程创建邮箱:`dmb = rt_mb_create( "dmb", 10, RT_IPC_FLAG_FIFO);`; 3)线程1发送邮件:`rt_mb_send (dmb, (rt_ubase_t) value);`; 4)线程2接收邮件:`rt_mb_recv (dmb, (rt_ubase_t*) &value, RT_WAITING_FOREVER);`。 邮箱的具体步骤及示例程序如下: /* 1. 定义邮箱句柄 */ rt_mailbox_t dmb; void tid1_entry (void * paramenter) { int a = 100; char b[] = "hello RT-Thread!"; /* 其他操作 */ /* 3. 发送邮件 */ rt_mb_send (dmb, (rt_ubase_t) a); //发送整型数 rt_mb_send (dmb, (rt_ubase_t) b); //发送指针 /* 其他操作 */ } void tid2_entry (void * paramenter) { int a; char b[15]; /* 其他操作 */ /* 4. 接收邮件 */ rt_mb_recv (dmb, (rt_ubase_t*) &a, RT_WAITING_FOREVER); //接收整型数 rt_mb_recv (dmb, (rt_ubase_t*) b, RT_WAITING_FOREVER); //接收指针数据于b /* 其他操作 */ } int main (void) { rt_thread_t tid1, tid2; /* 2. 创建邮箱 */ dmb = rt_mb_create( "dmb",10, RT_IPC_FLAG_FIFO); tid1 = rt_thread_create( "tid1", tid1_entry, RT_NULL, 1024, 10, 10); tid2 = rt_thread_create( "tid2", tid2_entry, RT_NULL, 1024, 10, 10); rt_thread_startup (tid1); rt_thread_startup (tid2); return RT_EOK; }(含图)
1