Zephyr 中 Mailbox 的使用
来源:互联网 发布:sql 2005连接到服务器 编辑:程序博客网 时间:2024/05/29 07:09
Mailbox 是啥?
一般,在操作系统中,线程之间是要相互通信的,最简单的是叫做信号量,稍复杂一点的是 Mailbox。信号量用于通知对方一个简单的状态:可以通行或者不能通行,可以理解为这个信号量就是红绿灯,有红灯和绿灯两种状态,红灯表示你不能通行,绿灯表示你可以通行。用信号量时,一般是在信号量之外有约定,可以通行的情况下,是可以操作什么资源,这个“可以操作什么资源的信息”是没有在信号量上有记录的。Mailbox,中文翻译是邮箱,除了接收方地址以外,还有信里面的内容,传递了更多的信息。接收方发现邮箱中没有待处理的信件,则等待或者去干别的事情。发送方负责发送邮件,在发送前要确定接收方把所有邮件都处理完了。这里特别注意,一个mailbox同时只能传递一封邮件(即一个消息),这里不同于现实生活中的邮箱(现实生活中的邮箱可以塞很多邮箱,接收者可以累积多封邮件后一起处理,而zephyr中的mailbox则不同,发送方发送一个邮件后,只有等接收方处理完这个邮件后才能发送下一封邮件)。 发送方有两种方法来发送邮件: 1)发送后,等待对方接收,在等待时不能干其它事情,直到对方接收了这个消息后才继续去干活; 2)发送后,立即去干别的活,不管对方是否有接收完毕,但是,在发送下一封邮件前,要检查接收方是否接收了,如果没有接收,则不能发送。接收方对邮件的处理也有两种方法:1)查看是否有收到邮件,如果有收到,同时就把邮件取出来去处理掉;2)先查看,但是不去处理;待做了一些其它事情(也有可能没有做其它事情)后再去把邮件取出并处理。首先,需要先定义一个邮箱,让发送方和接收方都知道这个邮箱:用这个宏定义来定义邮箱: K_MBOX_DEFINE其次,对邮箱做初始化:k_mbox_init()发送方有两个函数可用(分别对应“发送后等待”和“发送后不等待”):k_mbox_put()k_mbox_async_put()接收方,统一用这个函数看邮箱:k_mbox_get()如果在调用上面这个函数时,其中一个参数为 NULL(用于存放接收的数据的地址空间),则先不处理消息,然后,再调用下面两个函数之一来处理消息:k_mbox_data_get()k_mbox_data_block_get()前者是普通的buffer机制,后者是 pool 机制。具体这两者的区别,请参考 zephyr 的官方文档。不属于本次讨论的范畴。
mailbox APIs (在 kernel.h中提供):
K_MBOX_DEFINEk_mbox_init()k_mbox_put()k_mbox_async_put()k_mbox_get()k_mbox_data_get()k_mbox_data_block_get()
阅读全文
0 0
- Zephyr 中 Mailbox 的使用
- 【DSP开发】mailbox的使用
- zephyr中net_buf的定义
- 在exchange 2007和2010中使用export-mailbox和import-mailbox导出导入邮箱数据。
- Python imap Gmail中各个mailbox的名字[
- Zephyr简单使用
- mailbox的controller
- mailbox的client
- Zephyr 教程:Zephyr 工程的介绍
- DSP中的Mailbox的学习
- DSP中的Mailbox的学习
- 关于akka的mailbox的size问题
- 使用 Eclipse 单步调试 Zephyr 程序
- DSP中的Mailbox的学习-dm642
- AKKA-源码-mailbox构建的主要逻辑
- mailbox数据发送和接收的过程
- make的一些变量(读zephyr Makefile)
- zephyr的执行上下文(多线程)
- 顺序栈
- u-boot通过nfs从服务器下载内核,并且启动内核,挂载根文件系统的方法
- 好玩的代码
- 怎样处理python爬虫中有中文的url
- 扩展欧几里得算法
- Zephyr 中 Mailbox 的使用
- Android动画学习(四)之属性动画学习
- android面试题,各大企业常见的android面试题之二
- 单链表寻找环,寻找环的入口点
- 从零开始react入门(一)
- JavaDay05数组
- poj3669 流星雨啊!
- android binder 通信
- DeepFace--Facebook的人脸识别&& FaceNet--Google的人脸识别