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方法(我已经改好了) ...
随机推荐
- 《A_Pancers团队》作业5—团队项目需求改进与系统设计
一:团队项目需求改进 1. <音乐播放软件需求规格说明书>的不足 在上周的<音乐播放软件需求规格说明书>我们还需要改进的地方有:1.搜索功能:2.界面的简洁美观化:3.按键的重 ...
- (转)c++一些知识点
异常详解: https://www.cnblogs.com/hdk1993/p/4357541.html#top 模版详解: https://blog.csdn.net/lezardfu/articl ...
- Java线程池队列吃的太饱,撑着了咋整?java 队列过大导致内存溢出
Java的Executors框架提供的定长线程池内部默认使用LinkedBlockingQueue作为任务的容器,这个队列是没有限定大小的,可以无限向里面submit任务. 当线程池处理的太慢的时候, ...
- [.NET开发] C#连接MySQL的两个简单代码示例
实现代码一.使用的是mysql自带的驱动安装一下即可 这是一个简单的例子. 在这里有个问题:dataset如果没设主键的话,可能会引起一些对数库操作的问题,比如会造成updata出现错误. stati ...
- codeforces 497c//Distributing Parts// Codeforces Round #283(Div. 1)
题意:有n个区间[ai,bi],然后有n个人落在[ci,di],每个人能用ki次.问一种方式站满n个区间. 两种区间都用先x后y的升序排序.对于当前的区间[ai,bi],将ci值小于当前ai的全部放入 ...
- 富文本编辑器layedit,调用setContent方法会报错
需要把layedit.js里的setContent 函数的 layedit.sync(index)); 改成 this.sync(index));
- 『PyTorch』第五弹_深入理解Tensor对象_上:初始化以及尺寸调整
一.创建Tensor 特殊方法: t.arange(1,6,2)t.linspace(1,10,3)t.randn(2,3) # 标准分布,*size t.randperm(5) # 随机排序,从0到 ...
- OC NSArray数组排序
一.一般排序 // 排序 NSArray *arr = @["]; NSArray *newarr = [arr sortedArrayUsingSelector:@selector(com ...
- Oracle数据库的“健康指示器”——事件(events)
Oracle数据库“赢在”在架构,这话还是有道理的,除了锁(lock)这个最大的架构上的“赢点”之外,Oracle事件(event)也是另外一个很重要的架构上的“赢点”,因为当今的Oracle数据库, ...
- js 实现智能输入数字
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...