how to check CAN frame

1. check buffer size

getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);

setsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);

setsockopt(s,SOL_SOCKET,SO_RCVBUF, (char *)&rcv_size, optlen);

复制代码
//RE:https://blog.csdn.net/fuyuehua22/article/details/38232769
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 
#include <errno.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <assert.h> 

int main(int argc,char **argv) 
{ 
int err = -1; /* 返回值 */ 
int s = -1; /* socket描述符 */ 
int snd_size = 0; /* 发送缓冲区大小 */ 
int rcv_size = 0; /* 接收缓冲区大小 */ 
socklen_t optlen; /* 选项值长度 */ 

/*建立一个TCP套接字 */ 
s = socket(PF_INET,SOCK_STREAM,0); 
if( s == -1){ 
printf("建立套接字错误\n"); 
return -1; 
} 

/* 先读取缓冲区设置的情况,获得原始发送缓冲区大小*/ 
optlen = sizeof(snd_size); 
err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen); 
if(err<0){ 
printf("获取发送缓冲区大小错误\n"); 
} 
/*打印原始缓冲区设置情况*/ 

/*获得原始接收缓冲区大小*/ 
optlen = sizeof(rcv_size); 
err = getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 
if(err<0){ 
printf("获取接收缓冲区大小错误\n"); 
} 

printf(" 发送缓冲区原始大小为: %d 字节\n",snd_size); 
printf(" 接收缓冲区原始大小为: %d 字节\n",rcv_size); 

/*设置发送缓冲区大小*/ 
snd_size = 10*1024; /* 发送缓冲区大小为8K */ 
optlen = sizeof(snd_size); 
err = setsockopt(s, SOL_SOCKET, SO_SNDBUF, &snd_size, optlen); 
if(err<0){ 
printf("设置发送缓冲区大小错误\n"); 
} 

/*设置接收缓冲区大小*/ 
rcv_size = 10*1024; /* 接收缓冲区大小为8K */ 
optlen = sizeof(rcv_size); 
err = setsockopt(s,SOL_SOCKET,SO_RCVBUF, (char *)&rcv_size, optlen); 
if(err<0){ 
printf("设置接收缓冲区大小错误\n"); 
} 

/*检查上述缓冲区设置的情况,获得修改后发送缓冲区大小 */ 
optlen = sizeof(snd_size); 
err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen); 
if(err<0){ 
printf("获取发送缓冲区大小错误\n"); 
} 

/*获得修改后接收缓冲区大小 */ 
optlen = sizeof(rcv_size); 
err = getsockopt(s, SOL_SOCKET, SO_RCVBUF,(char *)&rcv_size, &optlen); 
if(err<0){ 
printf("获取接收缓冲区大小错误\n"); 
} 

/* 打印结果 */ 
printf(" 发送缓冲区大小为: %d 字节\n",snd_size); 
printf(" 接收缓冲区大小为: %d 字节\n",rcv_size); 

close(s); 
return 0; 
} 
View Code
复制代码

2. 查看统计:

cat /proc/net/can/stats

eg:

复制代码
nvidia@tegra-ubuntu:~/zrj/laneseg_TRT$ cat /proc/net/can/stats 

   503740 transmitted frames (TXF)
   661826 received frames (RXF)
        0 matched frames (RXMF)

        0 % total match ratio (RXMR)
        0 frames/s total tx rate (TXR)
        0 frames/s total rx rate (RXR)

        0 % current match ratio (CRXMR)
      351 frames/s current tx rate (CTXR)
      351 frames/s current rx rate (CRXR)

        0 % max match ratio (MRXMR)
      408 frames/s max tx rate (MTXR)
     3061 frames/s max rx rate (MRXR)

        0 current receive list entries (CRCV)
        0 maximum receive list entries (MRCV)
复制代码

3. ifconfig can1

nvidia@tegra-ubuntu:~/zrj/laneseg_TRT$ ifconfig can1
can1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          UP RUNNING NOARP  MTU:72  Metric:1
          RX packets:81647 errors:31020 dropped:0 overruns:0 frame:1262
          TX packets:250985 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10 
          RX bytes:589825 (589.8 KB)  TX bytes:2007880 (2.0 MB)
          Interrupt:172 

4. other tools.

CANoe or CANPro etc...

END

posted on   鹅要长大  阅读(330)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示