【AUTOSAR-COM】关于COM中的Update Bit
Update Bit的位置
其实最开始学习的时候,没有太多想Update Bit的位置,想着无非是COM中针对每个signal加一个buffer来保存?直到看到了下面的一句话。
(以下摘自TOPPERS 日本开放式系统的官网中提供的公开文档) (第一段) (第1句)为了事先识别出 User 没有过更新 Signal 或者 Signal Group ,可以指定 Update Bit 。 (第2句)Update Bit 包含在 I-PDU 的 buffer 中,并且和 I-PDU 中的 Signal 和 SignalGroup 一起发送到 PDUR 去。 (第三段)可以根据参数 “ComUpdateBitPosition” 为每个Signal 和 SignalGroup都设定一个Update Bit,配置在Signal 或者 SignalGroup的内部Buffer中
Update Bit是只在COM可以被COM一个模块访问和修改的,会随着Signal发送到下层的PDUR,设定的时候用的是“ComUpdateBitPosition” 来描述Signal中的一个bit。也就是说 Update Bit 是将Signal中的某一个bit指定为了 Update Bit 。
如果这样考虑的话,在通信矩阵的阶段,制作dbc文件的时候,就要注意标注出来某个bit是将来的Update Bit,信号是要和自身的Update Bit在dbc文件中体现为一个signal才可以的。如果在dbc阶段将一个信号的Update Bit单独拿出来,做成了两个signal,那么在配置工具里,按照autosar对Update Bit的定义,是无法进行Update Bit配置的。
也正因为Update Bit是定义在信号里的,所以需要在通信矩阵阶段就定义好,根据通信矩阵的定义进行配置。
(以下摘自TOPPERS 日本开放式系统的官网中提供的公开文档) 对于Update Bit来说,0是未更新,1是已更新 在发送方,对于Update Bit的处理。
简而言之,每当Com_SendSignal被调用,那么就会将对应Signal的Update Bit置为1,虽然AUTOSAR没有规定本次要发送的数值如果和前回值一样的情况是否认为有更新,但是考虑到接收方的DM(DeadLine Monitoring)的存在,如果调用Com_SendSignal传进来的待发送数值和前回值一致就不置位,可能导致接收方的DM超时。所以即便相同也要置位。
当执行复位Update Bit的时机被设定成了只要调用PDUR的发送函数就可以的话,当调用了PDUR的发送函数后,COM内的该Signal的Update Bit会被复位。
因此,Com_SendSignal被调用的时候传进来的Signal的数值中的Update Bit的值是没有意义的,到了COM内,COM会接手对Update Bit的操作。加入Signal的Update Bit被置位了,那么发送给PDUR的I-PDU是带着置为1的Update Bit的,在这之后,根据ComTxIPduClearUpdateBit的设置,或是直接发送给PDUR就可以复位,或是需要等待PDUR的confirmation才可以,总之会将COM内的I-PDU的Buffer中的Update Bit进行复位,已经发送给PDUR的那个要被发送的I-PDU并不会。
