Nucleus源码分析Mailbox.docx

上传人:b****5 文档编号:30133415 上传时间:2023-08-05 格式:DOCX 页数:19 大小:241.32KB
下载 相关 举报
Nucleus源码分析Mailbox.docx_第1页
第1页 / 共19页
Nucleus源码分析Mailbox.docx_第2页
第2页 / 共19页
Nucleus源码分析Mailbox.docx_第3页
第3页 / 共19页
Nucleus源码分析Mailbox.docx_第4页
第4页 / 共19页
Nucleus源码分析Mailbox.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Nucleus源码分析Mailbox.docx

《Nucleus源码分析Mailbox.docx》由会员分享,可在线阅读,更多相关《Nucleus源码分析Mailbox.docx(19页珍藏版)》请在冰豆网上搜索。

Nucleus源码分析Mailbox.docx

Nucleus源码分析Mailbox

 

Nucleus源码分析--Mailbox模块

 

大唐微电子技术有限公司

邵壮

页数

修改后版本

修改者

修改日期

修改说明

备注

Documentinformation

FileLocation

D:

\××××\×××××××.doc(请说明在文档服务器上的位置)

Lastsaved

2005-1-414:

35

目录

1.概述3

1.1功能描述3

1.2文件信息3

2.实现原理4

2.1邮箱结构4

2.2邮箱管理4

2.3邮箱挂起管理4

3.数据结构5

3.1MB_MCB邮箱控制块5

3.2MB_SUSPEND邮箱挂起控制块5

3.3模块变量(全局)5

4.程序分析6

4.1接口函数映射表6

4.2MBC.C程序6

4.2.1MBC_Create_Mailbox6

4.2.2MBC_Delete_Mailbox7

4.2.3MBC_Send_To_Mailbox8

4.2.4MBC_Receive_From_Mailbox10

4.2.5MBC_Cleanup12

4.3MBS.C程序13

4.3.1MBS_Reset_Mailbox13

4.3.2MBS_Broadcast_To_Mailbox14

4.4其它16

4.4.1MBD.C16

4.4.2MBI.C16

4.4.3MBF.C17

4.4.4MBCE.C17

4.4.5MBSE.C17

1.

概述

1.1功能描述

邮箱是一种低负荷传递消息的机制。

每个邮箱可容纳一条4*32位字的消息。

通过值的收发来完成消息的传递。

发送消息的请求拷贝消息值到邮箱,接受消息请求又从邮箱中将消息取出来。

收发邮件的服务有几种挂起选择:

无条件被挂起、超时挂起和不挂起。

任务因为邮箱挂起可能有几种原因。

如果任务试图从一个空的邮箱里接收邮件,它将被挂起等待。

如果一个任务试图向一个非空邮箱发送邮件也可能被挂起。

当邮箱完成了任务的请求后,被挂起的任务就将被恢复。

例如,假设一个任务因为等待从邮箱接收消息而被挂起。

当消息发到了邮箱,任务就会恢复。

  多个任务会因某个邮箱而被挂起。

对挂起的任务的调度方法可以采用FIFO或者优先权,这根据邮箱建立时设置而定。

如果邮箱支持FIFO挂起,任务恢复的顺序与他们挂起的顺序一致。

如果邮箱支持优先级挂起,任务的恢复按照告优先级到低优先级的顺序。

1.2文件信息

邮箱组件(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中的函数

2.实现原理

2.1邮箱结构

每一邮箱空间为4*32b,仅放一条消息。

2.2邮箱管理

应用程序在创建邮箱前应建立一个NU_MAILBOX类型的控制块,空间由应用程序提供。

所有已创建邮箱的控制块都将被加入由MBD_Created_Mailboxs_List所指向的双向链表中,删除邮箱则将其从此双向链表中删除。

结构如下图所示:

模块变量MBD_List_Protect用于保护对于此链表的多重访问。

2.3邮箱挂起管理

当任务接收或发送消息至邮箱时,在任务栈内会形成一个局部邮箱挂起控制块,若因此次调用而挂起,则将该控制块加入此邮箱的挂起链表。

结构如下:

当需从挂起恢复时,遍历此链表即可。

 

3.数据结构

3.1MB_MCB邮箱控制块

typedefstructMB_MCB_STRUCT

{

CS_NODEmb_created;/*已创建邮箱双向链表结点*/

UNSIGNEDmb_id;/*内部MCBID*/

CHARmb_name[NU_MAX_NAME];/*邮箱名称*/

DATA_ELEMENTmb_message_present;/*当前消息标志*/

DATA_ELEMENTmb_fifo_suspend;/*挂起类型标志*/

#ifPAD_2

DATA_ELEMENTmb_padding[PAD_2];

#endif

UNSIGNEDmb_tasks_waiting;/*等待的任务数*/

UNSIGNED/*邮箱空间*/

mb_message_area[MB_MESSAGE_SIZE];

structMB_SUSPEND_STRUCT

*mb_suspension_list;/*挂起列表*/

}MB_MCB;

3.2MB_SUSPEND邮箱挂起控制块

typedefstructMB_SUSPEND_STRUCT

{

CS_NODEmb_suspend_link;/*挂起列表结点*/

MB_MCB*mb_mailbox;/*邮箱指针*/

TC_TCB*mb_suspended_task;/*挂起任务指针*/

UNSIGNED*mb_message_area;/*邮箱空间指针*/

STATUSmb_return_status;/*返回的状态*/

}MB_SUSPEND;

3.3模块变量(全局)

CS_NODE*MBD_Created_Mailboxes_List;//已创建邮箱链表头指针

UNSIGNEDMBD_Total_Mailboxes;//已创建邮箱数量

TC_PROTECTMBD_List_Protect;//防止已创建邮箱链表被多重访问

4.程序分析

4.1接口函数映射表

API函数

对应的内部函数

(NoErrorCheck)

对应的内部函数

(ErrorCheck)

NU_Create_Mailbox

MBC_Create_Mailbox

MBCE_Create_Mailbox

NU_Delete_Mailbox

MBC_Delete_Mailbox

MBCE_Delete_Mailbox

NU_Reset_Mailbox

MBS_Reset_Mailbox

MBSE_Reset_Mailbox

NU_Send_To_Mailbox

MBC_Send_To_Mailbox

MBCE_Send_To_Mailbox

NU_Broadcast_To_Mailbox

MBS_Broadcast_To_Mailbox

MBSE_Broadcast_To_Mailbox

NU_Receive_From_Mailbox

MBC_Receive_From_Mailbox

MBCE_Receive_From_Mailbox

NU_Established_Mailboxs

MBF_Established_Mailboxs

MBF_Established_Mailboxs

NU_Mailbox_Information

MBF_Mailbox_Information

MBF_Mailbox_Information

NU_Mailbox_Pointers

MBF_Mailbox_Pointers

MBF_Mailbox_Pointers

4.2MBC.C程序

4.2.1MBC_Create_Mailbox

函数原型:

STATUSMBC_Create_Mailbox(NU_MAILBOX*mailbox_ptr,CHAR*name,

OPTIONsuspend_type)

功能描述:

创建邮箱

扇入函数:

Application

MBCE_Create_Mailbox

扇出函数:

CSC_Place_On_List

[HIC_Make_History_Entry]

[TCT_Check_Stack]

TCT_Protect

TCT_Unprotect

输入参数:

mailbox_ptr邮箱控制块指针

name邮箱名字7个字符,以空字符结束

suspend_type挂起类型

返回值:

NU_SUCCESS成功完成函数调用

实现流程:

4.2.2MBC_Delete_Mailbox

函数原型:

STATUSMBC_Delete_Mailbox(NU_MAILBOX*mailbox_ptr)

功能描述:

删除邮箱并从已创建链表中移出

扇入函数:

Application

MBCE_Delete_Mailbox

扇出函数:

CSC_Remove_From_List

[HIC_Make_History_Entry]

[TCT_Check_Stack]

TCT_Protect

TCT_System_Protect

TCT_Unprotect

TCC_Resume_Task

TCT_Control_To_System

TCT_Set_Current_Protect

TCT_System_Unprotect

输入参数:

mailbox_ptrMailbox控制块指针

返回值:

NU_SUCCESS成功完成函数调用

4.2.3MBC_Send_To_Mailbox

函数原型:

STATUSMBC_Send_To_Mailbox(NU_MAILBOX*mailbox_ptr,VOID*message,

UNSIGNEDsuspend)

功能描述:

发送消息至邮箱

扇入函数:

Application

MBCE_Send_To_Mailbox

扇出函数:

CSC_Remove_From_List

[HIC_Make_History_Entry]

[TCT_Check_Stack]

TCT_System_Protect

TCT_Unprotect

TCC_Resume_Task

TCT_Control_To_System

TCT_System_Unprotect

CSC_Place_On_List

CSC_Priority_Place_On_List

TCC_Suspend_Task

TCC_Task_Priority

TCT_Current_Thread

输入参数:

mailbox_ptr邮箱控制块指针

message发送的消息

suspend_type挂起类型

返回值:

NU_SUCCESS表明service执行成功

NU_MAILBOX_FULL表明邮箱为满

NU_TIMEOUT超时

NU_MAILBOX_DELETED当任务被挂起时,邮箱被删除

NU_MAILBOX_RESET当任务被挂起时,邮箱被复位

实现流程:

4.2.4MBC_Receive_From_Mailbox

函数原型:

STATUSMBC_Receive_From_Mailbox(NU_MAILBOX*mailbox_ptr,

VOID*message,UNSIGNEDsuspend)

功能描述:

从邮箱接收消息

扇入函数:

Application

MBCE_Receive_From_Mailbox

扇出函数:

CSC_Remove_From_List

[HIC_Make_History_Entry]

[TCT_Check_Stack]

TCT_System_Protect

TCT_Unprotect

TCC_Resume_Task

TCT_Control_To_System

CSC_Place_On_List

CSC_Priority_Place_On_List

TCC_Suspend_Task

TCC_Task_Priority

TCT_Current_Thread

输入参数:

mailbox_ptr邮箱控制块指针

message接收消息指针

suspend_type挂起类型

返回值:

NU_SUCCESS表明service执行成功

NU_MAILBOX_EMPTY表明邮箱为空

NU_TIMEOUT超时

NU_MAILBOX_DELETED当任务被挂起时,邮箱被删除

NU_MAILBOX_RESET当任务被挂起时,邮箱被复位

实现流程:

4.2.5MBC_Cleanup

函数原型:

VOIDMBC_Cleanup(VOID*information)

功能描述:

移除挂起控制块

扇入函数:

TCC_Timeout

TCC_Terminate

扇出函数:

CSC_Remove_From_List

输入参数:

information挂起控制块指针

返回值:

实现流程:

将挂起控制块的返回状态置为NU_TIMEOUT后,将其从挂起链表中删除。

 

4.3MBS.C程序

4.3.1MBS_Reset_Mailbox

函数原型:

STATUSMBS_Reset_Mailbox(NU_MAILBOX*mailbox_ptr)

功能描述:

复位邮箱

扇入函数:

Application

MBSE_Reset_Mailbox

扇出函数:

TCC_Resume_Task

[HIC_Make_History_Entry]

[TCT_Check_Stack]

TCT_System_Protect

TCT_Unprotect

TCT_Control_To_System

输入参数:

mailbox_ptrMailbox控制块指针

返回值:

NU_SUCCESS成功完成函数调用

实现流程:

4.3.2MBS_Broadcast_To_Mailbox

函数原型:

STATUSMBS_Broadcast_To_Mailbox(NU_MAILBOX*mailbox_ptr,VOID*message,

UNSIGNEDsuspend)

功能描述:

发送广播消息至邮箱

扇入函数:

Application

MBSE_Broadcast_To_Mailbox

扇出函数:

CSC_Remove_From_List

CSC_Place_On_List

CSC_Priority_Place_On_List

[HIC_Make_History_Entry]

[TCT_Check_Stack]

TCT_System_Protect

TCT_Unprotect

TCC_Resume_Task

TCC_Suspend_Task

TCC_Task_Priority

TCT_Control_To_System

TCT_Current_Thread

输入参数:

mailbox_ptr邮箱控制块指针

message发送的消息

suspend_type挂起类型

返回值:

NU_SUCCESS表明service执行成功

NU_MAILBOX_FULL表明邮箱为满

NU_TIMEOUT超时

NU_MAILBOX_DELETED当任务被挂起时,邮箱被删除

NU_MAILBOX_RESET当任务被挂起时,邮箱被复位

实现流程:

4.4其它

4.4.1MBD.C

模块全局变量定义。

4.4.2MBI.C

模块初始化函数

VOIDMBI_Initialize(VOID)

函数功能:

初始化模块全局变量。

4.4.3MBF.C

获取模块信息函数

UNSIGNEDMBF_Established_Mailboxs(VOID);

函数功能:

得到已建立Mailbox的数量

STATUSMBF_Mailbox_Information(NU_MAILBOX*Mailbox_ptr,CHAR*name,

OPTION*enable,UNSIGNED*expirations,UNSIGNED*id,

UNSIGNED*initial_time,UNSIGNED*reschedule_time);

函数功能:

得到指定Mailbox的相关信息

UNSIGNEDMBF_Mailbox_Pointers(NU_MAILBOX**pointer_list,

UNSIGNEDmaximum_pointers);

函数功能:

建立一个系统中所有EstablishedMailboxs的指针列表

4.4.4MBCE.C

带参数有效性检验的MBS.C相关函数接口

STATUSMBCE_Create_Mailbox(NU_MAILBOX*mailbox_ptr,CHAR*name,

OPTIONsuspend_type)

函数功能:

若输入参数有效则调用MBC_Create_Mailbox

STATUSMBCE_Delete_Mailbox(NU_MAILBOX*mailbox_ptr)

函数功能:

若输入参数有效则调用MBC_Delete_Mailbox

STATUSMBCE_Send_To_Mailbox(NU_MAILBOX*mailbox_ptr,VOID*message,

UNSIGNEDsuspend)

函数功能:

若输入参数有效则调用MBC_Send_To_Mailbox

STATUSMBCE_Receive_From_Mailbox(NU_MAILBOX*mailbox_ptr,VOID*message,

UNSIGNEDsuspend)

函数功能:

若输入参数有效则调用MBC_Receive_From_Mailbox

4.4.5MBSE.C

带参数有效性检验的MBS.C相关函数接口

STATUSMBSE_Reset_Mailbox(NU_MAILBOX*Mailbox_ptr,

VOID(*expiration_routine)(UNSIGNED),

UNSIGNEDinitial_time,UNSIGNEDreschedule_time,

OPTIONenable);

函数功能:

若输入参数有效则调用MBS_Reset_Mailbox

STATUSMBSE_Broadcast_To_Mailbox(NU_MAILBOX*mailbox_ptr,

VOID*message,UNSIGNEDsuspend)

函数功能:

若输入参数有效则调用MBS_Broadcast_To_Mailbox

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1