- 1、本文档共87页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
专题6无线传感器网络操作系统课件
模块结构 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 = {
文档评论(0)