1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
各位大佬你们好: 问题:我要把3358这个板子的can例程中的数据帧标准帧,改为数据帧扩展帧,并且ID可以输入8位ID,我已经可以实现标准帧,但是改为扩展帧时不知道怎么改 主要是这个分析函数。输入格式为。./can_test -d can1 -w 123#0102030405060708 这是标准帧,中间加红的这一段不知道怎么才能改成扩展帧,或者你们有扩展帧的例程让小弟用一下,第一次用can,又要改,感觉好难,谢谢老师和大佬。 can.c里边的分析函数 int parse_canframe(char* strFrame, struct can_frame *frame) // 解析函数 { int i, idx, dlen, len; int maxdlen = CAN_MAX_DLEN;//8 int ret = CAN_MTU;//can_frame的大小 unsigned char tmp; len = strlen(strFrame); memset(frame, 0, sizeof(*frame)); /* init CAN FD frame, e. g. LEN = 0 */ if (len < 4)//6 return 0; dbg_printf(" frame_id = 0x%x n", frame->can_id); /* if (strFrame[3] == CANID_DELIM) //3 digits 判断第三位是否是# { idx = 4; for (i=0; i<3; i++){ if ((tmp = asc2nibble(strFrame)) > 0x0F) return 0; frame->can_id |= (tmp << (2-i)*4);// 0 -- 8 1 -- 4 2 -- 0 } } else return 0; */ if((strFrame[idx] == 'R') || (strFrame[idx] == 'r')){ /* RTR frame */ frame->can_id |= CAN_RTR_FLAG; /* check for optional DLC value for CAN 2.0B frames */ if(strFrame[++idx] && (tmp = asc2nibble(strFrame[idx])) <= CAN_MAX_DLC) frame->can_dlc = tmp; return ret; } for (i=0, dlen=0; i < maxdlen; i++){ if(strFrame[idx] == DATA_SEPERATOR) /* skip (optional) separator */ idx++; if(idx >= len) /* end of string => end of data */ break; if ((tmp = asc2nibble(strFrame[idx++])) > 0x0F) return 0; frame->data = (tmp << 4); if ((tmp = asc2nibble(strFrame[idx++])) > 0x0F) return 0; frame->data |= tmp; dlen++; } frame->can_dlc = dlen; |
|
相关推荐
1个回答
|
|
不太了解帮忙顶一下,坐等大神解答
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
590 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2241 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1233 浏览 0 评论
1788 浏览 0 评论
1464 浏览 0 评论
74820 浏览 21 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 01:09 , Processed in 0.505795 second(s), Total 67, Slave 52 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号