convert CAN frame
前言
最近了解了一些socket can的知识点,本文主要介绍如何将数据转换为CAN报文,前提是已经确定CAN的传输协议。
本文使用的CAN报文共有22条,这些报文共用一个can id,每条报文使用序号标志;
报文协议

转换数据程序
char* convert_buf(vector<Point>& probp, vector<Distance>& pdist, vector<int>& plabel)
{
//convert-can-frame.
char buffer[][] = { };
for (int i = ; i < ; i++)
{
double lat_factor = 0.1;
double long_factor = 0.2; unsigned int lat01 = static_cast<unsigned int>(pdist[ * i].x_dis / lat_factor);//unit-2dm-8bits.
unsigned int long01 = static_cast<unsigned int>(pdist[ * i].y_dis / long_factor);//unit-2dm-9bits.
int label01 = plabel[i*]; if (i == )
{
buffer[i][] = (((i+) & 0xFF) << ) + ((long01 & 0x1FF) >> );
buffer[i][] = ((long01 & 0x1FF) << ) + ((lat01 & 0xFF) >> );
buffer[i][] = ((lat01 & 0xFF) << ) + (label01 & 0x03);
break;
} unsigned int lat02 = static_cast<unsigned int>(pdist[ * i + ].x_dis / lat_factor);//unit-2dm-8bits.
unsigned int long02 = static_cast<unsigned int>(pdist[ * i + ].y_dis / long_factor);//unit-2dm-9bits.
int label02 = plabel[ * i + ]; unsigned int lat03 = static_cast<unsigned int>(pdist[ * i + ].x_dis / lat_factor);//unit-2dm-8bits.
unsigned int long03 = static_cast<unsigned int>(pdist[ * i + ].y_dis / long_factor);//unit-2dm-9bits.
int label03 = plabel[ * i + ]; std::cout << "long01 --- " << long01 << "-- long02 --- " << long02 << "--- long03 --- " << long03 << std::endl;
buffer[i][] = (((i + ) & 0xFF) << ) + ((long01 & 0x1FF) >> );
buffer[i][] = ((long01 & 0x1FF) << ) + ((lat01 & 0xFF) >> );
buffer[i][] = ((lat01 & 0xFF) << ) + (label01 & 0x03);
buffer[i][] = ((long02 & 0x1FF) >> );
buffer[i][] = ((long02 & 0x1FF) << ) + ((lat02 & 0xFF) >> );
buffer[i][] = ((lat02 & 0xFF) << ) + ((label02 & 0x03) << ) + ((long03 & 0x1FF) >> );
buffer[i][] = ((long03 & 0x1FF) << ) + ((lat03 & 0xFF) >> );
buffer[i][] = ((lat03 & 0xFF) << ) + ((label03 & 0x03) << ); printf("buffer[0]: --- %x\n", (byte)buffer[i][]);
printf("buffer[1]: --- %x\n", (byte)buffer[i][]);
printf("buffer[2]: --- %x\n", (byte)buffer[i][]);
printf("buffer[3]: --- %x\n", (byte)buffer[i][]);
printf("buffer[4]: --- %x\n", (byte)buffer[i][]);
printf("buffer[5]: --- %x\n", (byte)buffer[i][]);
printf("buffer[6]: --- %x\n", (byte)buffer[i][]);
printf("buffer[7]: --- %x\n", (byte)buffer[i][]); }
cout << "sizeof(buffer): " << sizeof(buffer) << " Byte..." << endl;
return buffer[]; }
注意
1.如何确定CAN协议的格式,特别是信号的范围、精度以及比特位数;
2.浮点型数据如何变换为可以进行逻辑运算和位移操作的数据类型;
3.如何按照报文格式得到每个字节的内容,特别是位移操作;
4.如何将报文内容正确输出方便查看;
5.原始数据可能越界,应该在转换为报文数据之前对原始数据进行越界处理;
6.转换为CAN报文过程中的各个操作符号的优先级;
完
convert CAN frame的更多相关文章
- UIImageWriteToSavedPhotosAlbum
UIImageWriteToSavedPhotosAlbum: Next UIKit Function Reference Overview The UIKit framework defines a ...
- matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读
静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...
- DataFrame转矩阵Np-Array
DataFrame.as_matrix(columns=None)¶ Convert the frame to its Numpy-array representation.
- javacv
(看到有很多同学都来看这篇文章,说明可能是有必要的,然后这个写的比较水,所以 如果求干货的话,请移步: http://www.cnblogs.com/letben/p/5885799.html 但是 ...
- GMM+Kalman Filter+Blob 目标跟踪
转 http://www.cnblogs.com/YangQiaoblog/p/5462453.html ==========图片版================================== ...
- Direct2D WIC绘制图片
绘制图片需要用到WIC,WIC的功能包括: 编解码图片.也可以自定义图片解码插件. 读取图片元数据. 图像处理(最高支持每通道32位). 内置支持一些流行的格式.包括:BMP v5, GIF 89a/ ...
- android使用ffmpeg
cygwin上文编译文章. 在ffmpeg/arm添加的文件夹Android.mk 的主要目的是为了宣布动态库libs下一个 LOCAL_PATH:= $(call my-dir) include $ ...
- Motion-Based Multiple Object Tracking
kalman filter tracking... %% Motion-Based Multiple Object Tracking % This example shows how to perfo ...
- 微信支付生成带logo的二维码
利用到一个qrcode类 比较简洁 原作者没有加入二维码嵌入logo的功能 在这里我进行了小小的修改 可以实现生成微信支付二维码时打上logo 生成png格式的利用到该类中的png方法(我已经改好了) ...
随机推荐
- VMware Workstation Pro12安装RedHat6.4 64位
1.打开VM12软件,并新建一个虚拟机. 点击 下一步. 默认即可,点击 下一步. 选择 稍后安装操作系统(S). 这一项,基本上都是默认的.点击 下一步. 这里 客户机操作系统 就选择 L ...
- R6
RC 的加强版是 R6 , R6 是一个扩展包,能够实现支持公共和私有字段与方法的更有效的引用类,还有一些其他强大的功能.运行以下代码安装这个包:install.packages("R6&q ...
- Java内存管理知识你需要吗?
0.Java 对内存的划分: Java虚拟机规范将物理内存(主内存和CPU中的缓存.寄存器)划分为程序计数器.Java 虚拟机栈.本地方法栈.Java 堆.方法区五个区域,但并没有规定这些区域的具体实 ...
- canvas和图片之间的互相装换
canvas和图片之间的互相装换 一.总结 一句话总结:一个是canvas的drawImage方法,一个是canvas的toDataURL方法 canvas drawImage() Image对象 c ...
- R语言-attach、detach、with
在R语言中,对于串列,数据框中的数据的进行操作时,为了避免重复地键入对象名称,可使用attach或with. 1.attach() 假设data.frame包含列name,age attach(one ...
- Spring Boot 系统要求
Spring Boot 2.1.0.RELEASE 方需要 Java 8 or 9 的支持和 Spring Framework 5.1.2.RELEASE 以上的版本. 明确的构建工具的支持,请参考下 ...
- python-day6---运算符
#了解部分#字符串+,*#列表:+,*# l1=[1,2,3]# l2=[4,5]## print(l1+l2)# print(l1*3) #比较运算符# num1=3# num2=1 # print ...
- UVA-12558 Egyptian Fractions (HARD version) (IDA* 或 迭代加深搜索)
题目大意:经典的埃及分数问题. 代码如下: # include<iostream> # include<cstdio> # include<cstring> # i ...
- SQL Server 创建定时任务JOB
1. SQL Server 代理 → 作业(右键)→新建作业 2.在[常规]中输入 “名称” 并确认已勾选 “已启动”. 3.在[步骤]中 "新建步骤": 填写 “步骤名称 ...
- @XmlAccessorType @XmlType 详解
例子: @XmlAccessorType(XmlAccessType.FIELD) String name=”CY”; } public static void main(String[] args) ...