Armadilloフォーラム

CAN通信について

kiyo

2021年1月20日 13時23分

CANで相手側より定期的(50ms)に送信されてくるデータを受信しています。
いくつか教えて下さい。
質問1
 1sぐらい受信にいけない時があるのですがその際に受信データはバッファリングされているのでしょうか?
 1000/50=20で溜まっているとすると20回分ぐらいの定期通信のデータが溜まっている?
質問2
 もし質問1でバッファリングされているとしてバッファのサイズはどこで確認できますか?
質問3
 もし質問1でバッファリングされているとして最新のデータはreadで読みだしたサイズが0byteの1つ前という考えであっていますでしょうか?

コメント

at_akihito.irie

2021年1月25日 14時27分

入江です。

> 質問1
>  1sぐらい受信にいけない時があるのですがその際に受信データはバッファリングされているのでしょうか?
>  1000/50=20で溜まっているとすると20回分ぐらいの定期通信のデータが溜まっている?
バッファリングされています。

> 質問2
>  もし質問1でバッファリングされているとしてバッファのサイズはどこで確認できますか?
SocketCANであればsocket bufferにバッファリングされます。
socket bufferの受信バッファサイズは、以下のコマンドで確認できます。

[armadillo]# cat /proc/sys/net/ipv4/tcp_rmem
4096    87380   4194304

出力された数値は左から、受信バッファの最小・標準・最大サイズです。

以下のコマンドで発生したオーバーランなどのエラーが確認できるので、そち
らを参考にデータの送受信テストを行ってバッファサイズを考えて頂くと良い
と存じます。

[armadillo]# ifconfig -a <canのインターフェース名>

> 質問3
>  もし質問1でバッファリングされているとして最新のデータはreadで読みだしたサイズが0byteの1つ前という考えであっていますでしょうか?
FIFOかLIFOかというご質問でよろしかったでしょうか?
それであればFIFOです。