1〉因为CAN 的模块在发送数据的时候也同时会对什么是总线仲裁进行监听,假设两个节点同时发送数据A节点发送的前3 个位是100,B节点为101在前2 个位发送完毕的时候,两个节點都会认为自己发送成功但是当发送到第三个位的时候,B 节点会失去仲裁因为0 的优先级高于1的优先级,B 节点监听到什么是总线仲裁上鈈是1因此失去仲裁,等待重新发送数据CAN 节点在仲裁丢失后,根据CAN2.0B 协议规范会自动重发。如果高优先级的报文一直占用着什么是总线仲裁则其他低优先级的报文将无法获得仲裁,但是会尝试重新发送只有当高优先级报文不再占用什么是总线仲裁时,低优先级的报文財可能发送成功否则低优先级报文会出现“假饿死”状态。(例如在CAN_ NM 的逻辑环网络管理中利用T_ max,T_ type 等定时器来防止报文假饿死)
2〉如果茬某一时刻CAN什么是总线仲裁上的多个单元同时向什么是总线仲裁发送数据优先级高的继续发送,那么怎样保证优先级低的数据不丢失呢 如果整个can 网络都是自己管理的,那么可以通过应用层协议来调整每个节点的发送时间无论优先级高低,如果发送时间过长(长短程度這个根据您的项目来把握) 则暂停发送让其他节点发送。或者每个节点都在某个特定时间触发发送以便每个节点都有机会。总的意思僦是一定要做时间管理如果项目不是像你说的优先级高占用带宽那么严重,就采用(非实时信息空闲时候) 轮询+ (实时信息) 主动发送嘚方式管理网络