在进入while循环之前我初始化了can总线,并接着发送一个can数据帧(比如起名为A帧)。在while循环中每隔100ms发送一个can数据帧(起名为B帧)。
我用一个can软件在总线上500ms发一个数据帧(起名为C帧),一直发送。当给开发板上电后,在软件上看到B帧和C帧都发送正常,但是A帧却没有发出来。
后来测试出:当不发送C帧时,即开发板上电后总线上没有数据帧,这时候A帧发送正常。
如果开发板上电后总线上有C帧一直在发送,那么A帧就发布出来了,但是我在can初始化和A帧之间插入一个5ms的延时,这时候A帧就能发出来了。
想不明白为什么。有人试验过或遇到过吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
发送之前判断邮箱是否已满!
---------------------------------
看错了。。把发送看成接收了。不过道理一样
---------------------------------
接收我是采用缓存的,这个没有问题。在发送的时候是因为只有3个邮箱,如果发送的太快,要等到有空闲邮箱的时候才能发送新的,这个我也解决了。但有一个地方百思不得其解,就是我初始化完CAN通信之后,接着发送一个数据帧出来,这个帧多数情况是发布出来的,偶尔能发出来,不知道为什么,仅仅是发一个帧,没有连续发多个帧。如果在can初始化之后加一个5ms的延时就可以发出来这个帧。有了解的给解答一下
一周热门 更多>