- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Nucleus源码分析--Mailbox
Nucleus源码分析--Mailbox模块
大唐微电子技术有限公司
邵壮
页数 修改后版本 修改者 修改日期 修改说明 备注
Document information File Location D:\××××\×××××××.doc(请说明在文档服务器上的位置) Last saved 2005-1-4 14:35
目 录
1. 概述 3
1.1 功能描述 3
1.2 文件信息 3
2. 实现原理 4
2.1 邮箱结构 4
2.2 邮箱管理 4
2.3 邮箱挂起管理 4
3. 数据结构 5
3.1 MB_MCB 邮箱控制块 5
3.2 MB_SUSPEND 邮箱挂起控制块 5
3.3 模块变量(全局) 5
4. 程序分析 6
4.1 接口函数映射表 6
4.2 MBC.C程序 6
4.2.1 MBC_Create_Mailbox 6
4.2.2 MBC_Delete_Mailbox 7
4.2.3 MBC_Send_To_Mailbox 8
4.2.4 MBC_Receive_From_Mailbox 10
4.2.5 MBC_Cleanup 12
4.3 MBS.C程序 13
4.3.1 MBS_Reset_Mailbox 13
4.3.2 MBS_Broadcast_To_Mailbox 14
4.4 其它 16
4.4.1 MBD.C 16
4.4.2 MBI.C 16
4.4.3 MBF.C 17
4.4.4 MBCE.C 17
4.4.5 MBSE.C 17
概述
功能描述
邮箱是一种低负荷传递消息的机制。每个邮箱可容纳一条4 *32位字的消息。通过值的收发来完成消息的传递。发送消息的请求拷贝消息值到邮箱,接受消息请求又从邮箱中将消息取出来。
收发邮件的服务有几种挂起选择:无条件被挂起、超时挂起和不挂起。
任务因为邮箱挂起可能有几种原因。如果任务试图从一个空的邮箱里接收邮件,它将被挂起等待。如果一个任务试图向一个非空邮箱发送邮件也可能被挂起。当邮箱完成了任务的请求后 ,被挂起的任务就将被恢复。例如,假设一个任务因为等待从邮箱接收消息而被挂起。当消息发到了邮箱,任务就会恢复。 多个任务会因某个邮箱而被挂起。对挂起的任务的调度方法可以采用FIFO或者优先权,这根据邮箱建立时设置而定。如果邮箱支持FIFO挂起,任务恢复的顺序与他们挂起的顺序一致。如果邮箱支持优先级挂起,任务的恢复按照告优先级到低优先级的顺序。
文件信息
邮箱组件(MB)包括9个文件,列表如下:
文件名称 内容描述 MB_DEFS.H 该文件定义MB组件特定的数据结构和常量 MB_EXTR.H 该文件定义MB组件的外部接口 MBD.C 该文件定义MB组件的全局数据结构 MBI.C 该文件包括MB组件的初始化代码 MBF.C 该文件包括提供MB组件信息的相关函数 MBC.C 该文件包括MB组件的核心函数 MBS.C 该文件包括MB组件的附加函数 MBCE.C 该文件包括有错误检查的定义在MBC.C中的函数 MBSE.C 该文件包括有错误检查的定义在MBS.C中的函数
实现原理
邮箱结构
每一邮箱空间为4*32b,仅放一条消息。
邮箱管理
应用程序在创建邮箱前应建立一个NU_MAILBOX类型的控制块,空间由应用程序提供。
所有已创建邮箱的控制块都将被加入由MBD_Created_Mailboxs_List所指向的双向链表中,删除邮箱则将其从此双向链表中删除。结构如下图所示:
模块变量MBD_List_Protect用于保护对于此链表的多重访问。
邮箱挂起管理
当任务接收或发送消息至邮箱时,在任务栈内会形成一个局部邮箱挂起控制块,若因此次调用而挂起,则将该控制块加入此邮箱的挂起链表。结构如下:
当需从挂起恢复时,遍历此链表即可。
数据结构
MB_MCB 邮箱控制块
typedef struct MB_MCB_STRUCT
{
CS_NODE mb_created; /* 已创建邮箱双向链表结点 */
UNSIGNED mb_id; /*内部 MCB ID */
CHAR mb_name[NU_MAX_NAME]; /* 邮箱名称 */
DATA_ELEMENT mb_message_present; /* 当前消息标志 */
原创力文档


文档评论(0)