Nucleus源码分析--Mailbox.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

kabudou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档