- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
模块结构 static int8_t module(void *state, Message *msg)//消息处理函数 { app_state_t *s = (app_state_t *) state; switch (msg-type){ //下面实现了对不同消息的处理 case MSG_INIT: { s-pid = msg-did; // 初始化模块具体的状态,如定时器等 return SOS_OK; } ………//其他消息的处理 case MSG_FINAL: // 释放模块占用的资源 { return SOS_OK; } default: return -EINVAL; } return SOS_OK; } 模块交互( Module Interaction) 在下面的几种情形下,模块间会发生交互: 模块间消息传递。 对一个函数的直接调用,这个函数被另一个模块所注册。 模块调用内核函数ker-*实现对系统内核的调用 SOS中的消息都是异步的,模块发出一个消息后,该消息便被放入了消息队列。SOS主调度循环从优先级队列中取得消息并将消息传递给目标模块的消息处理程序 模块之间的直接函数调用用于实现模块间需要同步运行的操作。SOS使用了函数注册和订阅机制实现了直接函数调用 模块交互… 模块A调用通过消息调用模块B 模块A直接调用模块B 模块函数指针表 Dynamic Linking Module A Module B Message Passing 消息 缓冲区 Module A Module B 函数注册 static mod_header_t mod_header SOS_MODULE_HEADER = { .mod_id = TREE_ROUTING_PID, //模块的id号 .state_size = sizeof(tree_route_state_t), //模块状态占有的空间 .num_timers = 2, //使用了2个定时器 .num_sub_func = 0, // 没有订阅其他函数 .num_prov_func = 1, //提供了一个函数供其他函数订阅 .code_id = ehtons(TREE_ROUTING_PID),//代码ID .platform_type = HW_TYPE, .processor_type = MCU_TYPE, .module_handler = tree_routing_module, //模块的消息处理函数 .funct = { [0] = {tr_get_hdr_size, Cvv0, TREE_ROUTING_PID, MOD_GET_HDR_SIZE_FID}, }, }; 函数注册 模块头中的.funct指明了Tree_routing模块提供给其他模块的函数的信息 第一个参数是该模块提供给其他模块的函数名 第二个参数是函数的原型信息 第三个参数和第四个参数分别是模块ID和函数ID 原型信息编码了基类型信息和是否含有动态内存的参数 函数订阅 ……动态订阅 两种方法:一种是静态的,另一种是动态的 静态订阅是指模块在编译时指定它要调用的函数 static mod_header_t mod_header SOS_MODULE_HEADER = { ……//省略 .num_sub_func = 1, //订阅了一个函数 .num_prov_func = 0, //没有提供给其他模块可订阅的函数 ……//省略 .funct = { [0] = {error_8, Cvv0, TREE_ROUTING_PID, MOD_GET_HDR_SIZE_FID}, } }; 函数订阅……动态订阅 动态函数订阅 :使用动态函数订阅时,只需在模块头中指明原型信息,并且模块ID和函数ID均使用系统预定义的运行时ID static mod_header_t mod_header SOS_MODULE_HEADER = {
您可能关注的文档
- 专升本《混凝土结构设计》_08017450试卷_20160512150540.docx
- 专升本《桥梁工程》模拟题试卷.doc
- 专升本《数字电子技术》_试卷_答案.doc
- 中华人民共和国史辅导课程03.ppt
- 中华任姓字辈源流.doc
- 中华孝道的伦理精神及社会功能.doc
- 中化国际3600DWT特涂化学品船规格书.doc
- 中环英语解读.docx
- 中级财会CashandReceivables现金及应收账款.ppt
- 中级财会业务题例题.doc
- 最新人教版初中初一七年级生物上册植物光合作用吸收二氧化碳释放氧气精品课件.ppt
- 专题10_金属元素单质及其重要化合物.ppt
- 最新人教版九年级上册化学课件_第6单元_课题1_金刚石、石墨和C60课件_新人教版.ppt
- 专题10+二次函数的图象、性质和应用-备考2016年中考山东省各地数学模拟优质试题分项汇编(无答案).doc
- 最新人教版九年级上册化学课件4第四单元_自然界的水复习课件1_(新版)新人教版.ppt
- 专题10热和能(答案).doc
- 专题13:三角形问题.doc
- 专题13环境保护.ppt
- 最新人教版九年级上册化学课件6.1《金刚石、石墨和C60》完整.ppt
- 专题14环境保护.docx
原创力文档


文档评论(0)