网络管理主要功能:
- 是用来管理ECU是否在网络里面,不在的话请求加入,也就是ALIVE报文,
- 要判断是否掉线,以及睡眠状态的转换机制,以及跛行状态判,也即是RING报文。
主要的实现逻辑流程:
从rtos队列里面取出数据,保存在自定义的结构体里面 |
不论在何种状态只要接收到报文都需要静进入normal状态,等于初始化一次 |
提取信息,报文的主要信息有三部分,报文ID,目的地址,以及消息类型 |
如果是alive报文,进行环的更新,如果是ring报文进行状态转换机制判断。 |
ring报文的判断的目的有两个,一个是进行状态的转换,二是为了将ring报文继续传递下去。 |
当ring报文是节点在请求睡眠的时候,睡眠ind为true,然后在环里循环,如果有一个节点为false,则请求失败,返回原来的状态,都为true,则自己发送一个为ind 和ack都为true, 则进入等待睡眠状态。
在接收到报文之后,如果是目的地址是自己的的话,则进行判断然后启动Ttype定时器,时间到了发送后继的ring报文。如果不是发送给自己的,则启动Tmax定时器,如果在定时器时间到的时候没有收到下一条ring报文表示,我出故障了,进入跛足状态。在跛足状态的时候,定时器Terror时间到就发一个跛足报文,Tlimphome时间到的时候则进入准备睡眠状态。
接收到睡眠报文应答的时候,进入等待睡眠状态,让后启动定时器Twait,时间到没有收到报文的话则进入睡眠状态。