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方法(我已经改好了) ...
随机推荐
- Bootstrap 栅格系统(布局)
基本用法 网格系统用来布局,其实就是列的组合.Bootstrap框架的网格系统中有四种基本的用法.由于Bootstrap框架在不同屏幕尺寸使用了不同的网格样式,在这一节中所涉及到的示例,我们都以中屏 ...
- jquery ajax中 php前台后台文件中编辑都是uft-8,返回数据还是乱码
jquery ajax中 前台后台文件中编辑都是uft-8,返回数据还是乱码 解决如下: 在后台处理文件里面需要再加编辑 header("Content-Type:text/html;cha ...
- 谈谈http与https
今天简单的来说一下http和https, 简单来讲: HTTP 是 超文本协议,TCP 端口是 80 HTTPS 是一种配合了SSL协议的.加密的HTTP 协议 ,TCP端口是 443 HTTP ...
- Confluence 6 使用 LDAP 授权连接一个内部目录 - 用户组 Schema 设置
请注意:这部分仅在拷贝用户登录(Copy User on Login)和 同步组成员(Synchronize Group Memberships)被启用后可见. 其他用户组 DN(Additional ...
- UVA-701 The Archeologists' Dilemma (数论)
题目大意:给了一个2^E的前缀n,已知前缀n的位数不到2^E的位数的一半,找出满足条件的最小E. 题目解析:设2^E为i位数,则有n*10^i<2^E<(n+1)*10^i.解不等式得到i ...
- 使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
package org.caeit.cloud.dev.util; import java.io.File; import java.io.IOException; import java.io.Un ...
- Oracle数据库的“健康指示器”——事件(events)
Oracle数据库“赢在”在架构,这话还是有道理的,除了锁(lock)这个最大的架构上的“赢点”之外,Oracle事件(event)也是另外一个很重要的架构上的“赢点”,因为当今的Oracle数据库, ...
- 白化whitening
原文地址:http://blog.csdn.net/hjimce/article/details/50864602 作者:hjimce 一.相关理论 白化这个词,可能在深度学习领域比较常遇到, ...
- Edraw安装图解
Edraw安装图解 Success
- Openwrt Support RESET Button (5)
1 Scope of Document This document describes how to support reset button under openwrt system2 Requir ...