前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OSEK直接网络管理(四)

OSEK直接网络管理(四)

作者头像
xbai921031
发布2022-05-25 15:26:49
1.1K0
发布2022-05-25 15:26:49
举报

NM全局状态转换图

图1 NM全局状态转换示意

NM状态转换模式

(1)NMActive - NMPassive

在网络中,节点可以根据其自身的需求,中止其在网络中的通信。

每个节点都有一个静默状态的标识(silent mark),通过在应用层中设置这个标识,来决定是否参与网络通信。

  • silent mark置为1,表示节点希望进入NMPassive状态,节点即停止发送ring消息及参与逻辑环的循环过程;
  • silent mark置为0,表示节点进入NMActive状态,继续参与逻辑环循环过程

图2 NMActive和NMPassive状态转换

注意上述状态转换是网络进入NMOn以后的一个子状态,而NMOn状态机中,有两种并行的状态转换过程。

(2)NMBusSleep - NMAwake

NM进入NMOn状态以后,会首先进入NMInit完成初始化,随后即进入NMAwake状态,直到所有节点不再有通信需求的时候,会进入NMBueSleep状态。

每个节点都有一个睡眠标识(sleep mark),可以被应用层置位或者清零。

服务

描述

睡眠标识(sleep mark)

GotoMode(BusSleep)

进入睡眠状态

1

GotoMode(Awake)

退出睡眠状态

0

在每个ring消息中,有一位表示这个睡眠标识,即sleep.ind。

在网络进入睡眠状态前,网络中的每一个节点都必须将sleep.ind置位,直到逻辑环中的所有节点都置位了这个标识,那么睡眠请求将会通过置位sleep.ack来确认。再经过TWaitBusSleep的时间延时后,完成状态的跳转。

图3 NMAwake(NMNormal)和NMBusSleep之间的转换

上述状态图展示了在NMAwake状态中,NMNormal子状态与NMBusSleep之间的转换,在子状态NMLimpHome状态下也可以与NMBusSleep之间进行转换。

我们知道NMLimpHome状态是在NM唤醒的时候,出现错误的一个状态,这个状态与NMBusSleep之间的转换与NMNormal状态与NMBusSleep之间的转换是类似的。

每个节点的limphome消息中也包含sleep.ind这个位,每个节点轮流置位这个标识,直到sleep.ack位被置位,等待TWaitBusSleep时间后进入睡眠状态。

与NMNormal状态稍有不同的是,NMLimpHome还有一种方式可以直接进入睡眠状态,就是在TMax时间后,如果没有接收到有效的ring消息,网络状态也会跳转至睡眠状态(图3箭头部分)。

图4 NMAwake(NMLimpHome)和NMBusSleep之间的转换

NM状态还有很多形式的转换,这里就不一一列举了,读者可以参考文档OSEK/VDX Network Management Version 2.5.3中page41-page45,有详细的状态跳转的示意图。

资料请移步:

链接:https://pan.baidu.com/s/1gGnZkYV0CBmKErp_M_Nxdg

提取码:68ll


参考资料:OSEK/VDX Network Management Version 2.5.3

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 进击的程序喵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档