博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
9.邮箱的使用
阅读量:4099 次
发布时间:2019-05-25

本文共 1394 字,大约阅读时间需要 4 分钟。

1.邮箱简介:

单个邮箱大小的限制:4字节,邮箱总大小:用户设置sizeof()/4

2.例程源码解析及邮箱的相关操作

    init初始化/creat创建        发送        接收        detach脱离/delete删除

邮箱控制块与存放邮件的内存池创建

/* 邮箱控制块 */static struct rt_mailbox mb;/* 用于放邮件的内存池 */static char mb_pool[128];

邮箱静态初始化:

rt_err_t result;    /* 初始化一个mailbox */    result = rt_mb_init(&mb,                        "mbt",                      /* 名称是mbt */                        &mb_pool[0],                /* 邮箱用到的内存池是mb_pool */                        sizeof(mb_pool) / 4,        /* 邮箱中的邮件数目,因为一封邮件占4字节 */                        RT_IPC_FLAG_FIFO);          /* 采用FIFO方式进行线程等待 */    if (result != RT_EOK)    {        rt_kprintf("init mailbox failed.\n");        return -1;    }

邮箱动态初始化

 
rt_mailbox_t mb_d;
mb_d=rt_mb_create("mb_d",32,RT_IPC_FLAG_FIFO);
if(RT_NULL==mb_d){rt_kprintf("creat mailbox failed.\n"); return -1;}

邮件的发送:

rt_mb_send(&mb, (rt_uint32_t)&mb_str1[0]);
//发送成功返回RT_EOK;如果邮箱已经满了,返回-RT_EFULL。
rt_mb_send_wait(rt_mailbox_t mb,                         rt_uint32_t  value,                         rt_int32_t   timeout)//发送成功返回RT_EOK;如果邮箱已经满了,返回-RT_EFULL。

邮件的接收:

if (rt_mb_recv(&mb, (rt_uint32_t *)&str, RT_WAITING_FOREVER) == RT_EOK)        {            rt_kprintf("thread1: get a mail from mailbox, the content:%s\n", str);            if (str == mb_str3)                break;            /* 延时10个OS Tick */            rt_thread_delay(10);        }

3.注意事项:

不能在中断中接收,会导致中断的挂起,但是可在中断中发送邮件  wait发送也不能在中断中使用

转载地址:http://giwsi.baihongyu.com/

你可能感兴趣的文章
Java编程基础:static的用法
查看>>
Java编程基础:抽象类和接口
查看>>
Java编程基础:异常处理
查看>>
Spring MVC中使用Thymeleaf模板引擎
查看>>
Spring Boot构建简单的微博应用
查看>>
Spring处理表单提交
查看>>
Spring MVC异常处理
查看>>
Leetcode 1180. Count Substrings with Only One Distinct Letter [Python]
查看>>
PHP 7 的五大新特性
查看>>
php实现socket(转)
查看>>
PHP底层的运行机制与原理
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
PHP7新特性 What will be in PHP 7/PHPNG
查看>>
比较strtr, str_replace和preg_replace三个函数的效率
查看>>
ubuntu 下编译PHP5.5.7问题:configure: error: freetype.h not found.
查看>>
PHP编译configure时常见错误 debian centos
查看>>
configure: error: Please reinstall the BZip2 distribution
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>