[实践]利用J1939传输8字节以上的数据(TP长帧传输)
来源:互联网 发布:日常悠哉大王知乎 编辑:程序博客网 时间:2024/09/21 08:17
简介
在J1939源文档中,文件J1939-21(数据链路层)有着这样的规定,数据链路层具有传输长度大于8字节小于1785字节的传输协议,我们对这个传输协议叫做 TP .它将细分为两个功能:消息的拆装和重组,还有连接管理,这个知识可以参考J1939-21源文档学习。下面将阐述对J1939协议栈的TP功能的应用示例。
知识假设
- 我们已经将最新的J1939协议栈从github上下载,并且成功的移植到我们的芯片J1939协议栈下载
- 我们有两个独立运行ECU(电子控制单元),将地址配置为 0XF1 ,0XF4.其他的配置均正确。
- 节点为0xf4的为发送者
- 节点为0xf1的为接受者
- 我们要将数据 data[100] ={1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7};的100字节的数据在两个ECU之间传输。
- 两节点之间的数据传输的监测,我们采用周立功的CANPro.
- 我采用协议栈的轮询模式(移植简单)
测试代码
- 发送节点0XF4,TP发送示例
void thread_j1939 (void const *argument){ int _b=1; char data[100] = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7}; J1939_Initialization( TRUE ); // 等待地址声明超时 while (J1939_Flags.WaitingForAddressClaimContention) J1939_Poll(5); while(1) { if(_b >1000) //10秒发一次数据 { _b = 0 ; /*发送一个长帧 data*/ while(J1939_TP_TX_Message(65259,0XF1,data,sizeof(data))==RC_SUCCESS) J1939_Poll(5); } _b++; osDelay(10); //10毫秒的延时 J1939_Poll(20); }}
可以将thread_j1939 ()理解为 main(),这里使用的RTOS实时操作系统,CAN的初始化已在其他的线程里实现
- 接受节点0XF1,TP接受示例
void thread_CANComm (void const *argument){ char data[100]; J1939_Initialization( TRUE ); // 等待地址声明超时 while (J1939_Flags.WaitingForAddressClaimContention) J1939_Poll(5); //地址已经声明好(设备已挂载到总线上) while(1) { /*读取TP接受数据到data数组*/ while(J1939_TP_RX_Message(data,sizeof(data))==RC_SUCCESS) J1939_Poll(5); osDelay(10); //基本单位为10ms; J1939_Poll(20); }}
可以将thread_CANComm ()理解为 main(),这里使用的RTOS实时操作系统,CAN的初始化已在其他的线程里实现
CANPro对总线的实际数据监测图
小结
虽然J1939协议栈在数据链路层规定,TP一次性最大只能传输1785字节,可满足大多数的使用。但是我们可以在不破坏J1939协议栈的前提下,在应用层编写是可以达到更高的传输字节。比如说:
1784 * 254 或者 1783 * 65535 .
阅读全文
0 0
- [实践]利用J1939传输8字节以上的数据(TP长帧传输)
- LCD Mipi 初始化长包数据不支持 8 和 16个字节的参数传输???支持!
- 利用XML传输数据
- 以太网最小帧长为什么是64字节(传输介质和检查机制决定)
- 利用jquery进行xml数据的传输
- 网络编程中何时转换传输数据的字节序
- 传输资料在100MB以上的 传输介质选择
- 使用Oracle可传输表空间的特性复制数据(3)跨平台的传输实践
- tcp 数据的传输
- db2数据的传输
- 数据的网络传输
- web数据的传输
- 利用script标签获取跨域传输的数据
- 利用可传输表空间技术实现数据的高效迁移
- 利用可传输表空间技术实现数据的高效迁移
- Oracle利用传输表空间导出导入数据的步骤
- 利用Navicat传输MySql中不同数据库的数据
- 字节序、比特序(二)----结构体的传输
- lightoj1017 Brush (III) (dp)
- 【HDU 1070】Milk(贪心)
- C++ Primer Notes(13)
- linux下 Mysql的安装
- 【leetcode】2. Add Two Numbers(Python & C++)
- [实践]利用J1939传输8字节以上的数据(TP长帧传输)
- RecycleView4种定位滚动
- XML转义特殊字符
- React Native 实现热部署、差异化增量热更新
- Android 关闭多个视图Intent.FLAG_ACTIVITY_CLEAR_TOP用法
- oracle自带表练习(二)
- CSRF攻击的对应方法
- 从哪6个方面能判断你具有成为管理者的潜力?
- 京东云主机使用-搭建简单网页(macOS)