451_J1939地址声明超时确认处理代码分析

         全部学习汇总: https://github.com/GreyZhang/J1939_basic

         前面做了一个地址声明初始化的功能分析,但是这个动作触发之后还应该有一个确认的过程。其中,声明不成功的处理还是容易的,因为会直接收到一条报文。如果是声明成功的话,需要等到一定的时间,在相应时间内没有冲突报文则可以取得相应的地址。

451_J1939地址声明超时确认处理代码分析

         这是超时处理确认的处理,关键点还是在上面的这个状态的变化。需要确认这个状态是否被清零了,因为在初始化的时候这个状态是置位的。

451_J1939地址声明超时确认处理代码分析

         这部分代码之前已经做过分析了,如果么有优先的地址,那么需要等待地址声明结果的时候需要先置位。

451_J1939地址声明超时确认处理代码分析

         这个函数的传入参数是接下来的一个时间基准,如果叨叨了250000之后则会进入这个条件分支。

451_J1939地址声明超时确认处理代码分析

         接下来的处理其实还是容易理解的,如果超时了,那么就得清除等待的标记,同时取得这个地址。而取得地址之后,后续的设置要设置为只接收发给自己的报文。而设置的过程为了保证可靠性,设置之前先关闭全局中断,设置成功之后则需要重新开启中断。