全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com)
1. 邮箱其实是一个环形队列;
2. 使用场景上,邮箱主要是用来实现异步单向的一些消息或者数据处理的。在处理机制上,支持多对多的机制。
3. 与同步信号消息相比,传递消息的范围没有限制,不再是0,-1与-2这三个,可以支持更多。
1. 邮箱会结合buffer来用,而buffer也是环形的buffer,如果空间用满了之后继续请求使用会导致线程的等待。
2. 使用的过程中,由于又像是单向的,一般会有两个线程分别等待彼此的邮箱读写操作。
3. 如果邮箱进行了reset,那么在进行resume之前,任何操作都会失败,返回已经复位的消息提示。
这里的API分为发和收两部分。
接下来的这个例子,我不在进行文档标注,直接来通过代码来做一个标注分析。
最初的这一部分定义,我把叫做buffer的变量加了一个mailbox后缀,这样后面看代码的时候能够更好理解这些信息代表的含义。
这部分是例程中的一个中断,中断负责的主要工作其实还是获取通信的数据以及状态。在这里的设计示范说明中,如果通过ISR发现了错误,那么会对填充邮箱进行复位。如果是收到了消息,那么会先把消息填充到对应的buffer中,这个buffer就是软件自己控制的不分了。之后,把这部分buffer的信息绑定到释放buffer信息的邮箱之中。绑定的方式就是发送一个邮箱消息。
这是一个通过邮箱消息获取信号处理网络信息的一个设计模板。在这里面,先从填充邮箱中获取信息,如果检查到了邮箱RESET,那么需要进行错误处理。如果检查到有正常的信号,那么处理接收到的数据。处理完之后,说明现在的邮箱对应的buffer释放了一个。因此,给free buffer邮箱发送一个消息用以表征有新的资源可用了。
这一部分,主要还是邮箱对象以及线程的初始化或者创建。比较常规的一些操作。
以上就是邮箱的基本机制以及使用情况,看起来比较适合实现由小数据组合起来的长数据报文。后续的设计中,也可以尝试使用一下看看。