ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:346.62KB ,
资源ID:15904000      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15904000.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Nucleus源码分析PipeWord下载.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Nucleus源码分析PipeWord下载.docx

1、2. 实现原理 42.1 管道结构 42.2 管道管理 42.3 管道挂起管理 42.4 紧急挂起管理 53. 数据结构 53.1 PI_PCB 管道控制块 53.2 PI_SUSPEND 管道挂起控制块 53.3 模块变量(全局) 64. 程序分析 64.1 接口函数映射表 64.2 PIC.C程序 64.2.1 PIC_Create_Pipe 64.2.2 PIC_Delete_Pipe 74.2.3 PIC_Send_To_Pipe 104.2.4 PIC_Receive_From_Pipe 114.2.5 PIC_Cleanup 144.3 PIS.C程序 154.3.1 PIS_Re

2、set_Pipe 154.3.2 PIS_Send_To_Front_Of_Pipe 174.3.3 PIS_Broadcast_To_Pipe 184.4 其它 204.4.1 PID.C 204.4.2 PII.C 204.4.3 PIF.C 214.4.4 PICE.C 214.4.5 PISE.C 211. 概述功能描述管道提供了一种传输多种消息的机制。发送消息请求将消息拷贝到管道中,接收消息请求从管道中将消息取出来。消息即既可以放在管道的开头也可以放在管道尾。管道消息包含一个或多个bytes。既可以是固定长度的也可以是变长度的。消息格式的类型在管道建立的时候设置。变长消息管道需要在每

3、条消息的开头添加额外32位字符。此外接收变长消息管道的消息请求要声明最大消息尺寸,对定长消息请求声明实际消息尺寸。管道消息收发服务提供三种挂起方式:无条件被挂起、超时挂起和不被挂起。任务被管道挂起有几种原因。如果一个任务向一个空的管道请求消息,它就会被挂起。此外,一个任务试图向一个满管道发送消息,它也会被挂起。一旦管道可以满足挂起任务的要求,任务就将恢复运行。例如,假设一个任务由于等待管道里的一个消息而被挂起,一旦消息到达管道以后,挂起的任务将会恢复。多个任务可能被同一个管道挂起。任务按FIFO或Priority顺序被挂起,在管道建立的时候就设置好。如果管道支持FIFO挂起,任务恢复的顺序与他

4、们挂起的顺序一致。如果管道支持优先级挂起,任务的恢复按照告优先级到低优先级的顺序。管道消息可以被广播。这种服务类似于发送请求,所有都在等待此管道消息的任务都将得到一个广播消息。 文件信息管道组件(PI)包括9个文件,列表如下:文件名称内容描述PI_DEFS.H该文件定义PI组件特定的数据结构和常量PI_EXTR.H该文件定义PI组件的外部接口PID.C该文件定义PI组件的全局数据结构PII.C该文件包括PI组件的初始化代码PIF.C该文件包括提供PI组件信息的相关函数PIC.C该文件包括PI组件的核心函数PIS.C该文件包括PI组件的附加函数PICE.C该文件包括有错误检查的定义在PIC.C中

5、的函数PISE.C该文件包括有错误检查的定义在PIS.C中的函数2. 实现原理管道结构管道内消息可为定长或变长,变长消息时消息前有一个32位字指示消息长度。读指针pi_read指向第一个消息,写指针pi_write指向最后一个消息后。其结构如下:管道管理应用程序在创建管道前应建立一个NU_PIPE类型的控制块,空间由应用程序提供。所有已创建管道的控制块都将被加入由PID_Created_Pipes_List所指向的双向链表中,删除管道则将其从此双向链表中删除。结构如下图所示:模块变量PID_List_Protect用于保护对于此链表的多重访问。管道挂起管理当任务接收或发送消息至管道时,在任务栈

6、内会形成一个局部管道挂起控制块,若因此次调用而挂起,则将该控制块加入此管道的挂起链表。结构如下:当需从挂起恢复时,遍历此链表即可。紧急挂起管理当任务发送消息至管道中已有消息前时(PIS_Send_To_Front_Of_Pipe),在任务栈内会形成一个局部管道挂起控制块,若因此次调用而挂起,则将该控制块加入此管道的紧急挂起链表。当从管道中接收消息时,首先从此紧急链表中接收,保证发送的消息在已有消息前被接收。3. 数据结构PI_PCB 管道控制块typedef struct PI_PCB_STRUCT CS_NODE pi_created; /* 已创建管道双向链表结点 */ UNSIGNED

7、pi_id; /*内部PCB ID */ CHAR pi_nameNU_MAX_NAME; /*管道名称 */ DATA_ELEMENT pi_fixed_size; /* 定长消息标志 */ DATA_ELEMENT pi_fifo_suspend; /*挂起类型标志 */#if PAD_2 DATA_ELEMENT pi_paddingPAD_2;#endif UNSIGNED pi_pipe_size; /*总大小 */ UNSIGNED pi_messages; /* 消息数 */ UNSIGNED pi_message_size; /*每消息大小 */ UNSIGNED pi_ava

8、ilable; /* 空余字节数 */ BYTE_PTR pi_start; /*管道首 */ BYTE_PTR pi_end; /* 管道末 + 1 */ BYTE_PTR pi_read; /* 读指针 */ BYTE_PTR pi_write; /* 写指针 */ UNSIGNED pi_tasks_waiting; /* 等待任务数*/ struct PI_SUSPEND_STRUCT *pi_urgent_list; /* 紧急挂起链表 */ *pi_suspension_list; /*挂起链表 */ PI_PCB;PI_SUSPEND 管道挂起控制块typedef struct

9、PI_SUSPEND_STRUCT CS_NODE pi_suspend_link; /*挂起列表结点*/ PI_PCB *pi_pipe; /*管道指针 */ TC_TCB *pi_suspended_task; /*挂起任务指针 */ BYTE_PTR pi_message_area; /*管道空间指针*/ /* 请求消息大小 */ UNSIGNED pi_actual_size; /*消息实际大小 */ STATUS pi_return_status; /* 返回的状态 */ PI_SUSPEND;模块变量(全局)CS_NODE *PID_Created_Pipees_List; /已创

10、建管道链表头指针UNSIGNED PID_Total_Pipees; /已创建管道数量TC_PROTECT PID_List_Protect; /防止已创建管道链表被多重访问4. 程序分析接口函数映射表API函数对应的内部函数(No Error Check)(Error Check)NU_Create_PipePIC_Create_PipePICE_Create_PipeNU_Delete_PipePIC_Delete_PipePICE_Delete_PipeNU_Reset_PipePIS_Reset_PipePISE_Reset_PipeNU_Send_To_Front_Of_PipePI

11、S_Send_To_Front_Of_PipePISE_Send_To_Front_Of_PipeNU_Send_To_PipePIC_Send_To_PipePICE_Send_To_PipeNU_Broadcast_To_PipePIS_Broadcast_To_PipePISE_Broadcast_To_PipeNU_Receive_From_PipePIC_Receive_From_PipePICE_Receive_From_PipeNU_Established_PipesPIF_Established_PipesNU_Pipe_InformationPIF_Pipe_Informat

12、ionNU_Pipe_PointersPIF_Pipe_PointersPIC.C程序函数原型:STATUS PIC_Create_Pipe(NU_PIPE *pipe_ptr, CHAR *name, VOID *start_address, UNSIGNED pipe_size, OPTION message_type, UNSIGNED message_size, OPTION suspend_type)功能描述:创建管道扇入函数: Application PICE_Create_Pipe扇出函数:CSC_Place_On_List HIC_Make_History_Entry TCT_

13、Check_Stack TCT_Protect TCT_Unprotect 输入参数: pipe_ptr 管道控制块指针name 管道名字7个字符,以空字符结束 suspend_type 挂起类型 start_address 起始地址 pipe_size 空间大小 message_type 消息类型 message_size 消息大小 suspend_type 挂起类型返回值: NU_SUCCESS 成功完成函数调用实现流程:STATUS PIC_Delete_Pipe(NU_PIPE *pipe_ptr)删除管道并从已创建链表中移出 PICE_Delete_PipeCSC_Remove_From_List TCT_System_Protect TCC_Resume_TaskTCT_Control_To_System TCT

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

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