VC++ 6.0 C8051F340 USB 通信 CAN 数据解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: // HelloWorld.cpp : Defines the entry point for the console application. // /***************************************************************************** * VC++ 6.
// HelloWorld.cpp : Defines the entry point for the console application.
//

/*****************************************************************************
 *              VC++ 6.0 C8051F340 USB 通信 CAN 数据解析
 * 声明:
 *    1. 这是在《VC++ 6.0 C8051F340 USB PC侧通信 Demo》的基础上的代码;
 *    2. 由一可知,本文会只注释了相对重要的内容。
 *    3. 本文主要是通过USB获取CAN的数据,并解析出其中的数据。
* 4. 帧格式可以参考:http://wenku.baidu.com/view/f508511d6bd97f192279e902.html * * 2015-7-11 晴 深圳 南山平山村 曾剑锋 ***************************************************************************
*/ #include "stdafx.h" #include <windows.h> #include <time.h> #include "SiUSBXp.h" #include <string.h> int main(int argc, char* argv[]) { printf("Hello World!\n"); HANDLE m_hUSBDevice = INVALID_HANDLE_VALUE; DWORD dwNumDevices = 0; SI_GetNumDevices(&dwNumDevices); printf("zengjf debug: dwNumDevices = %d.\n", dwNumDevices); if ( dwNumDevices ==0 ) return FALSE; if ( SI_Open(1, &m_hUSBDevice) == SI_SUCCESS ) printf("zengjf debug: SI_Open USBDevice success.\n"); else printf("zengjf debug: SI_Open USBDevice fails.\n"); char testData[17] = "zengjf"; DWORD hasWritten = 0; DWORD hasRead = 0; DWORD timeCount = 0; while ( true ) { Sleep(100); // 接收6帧数据就退出程序,作为测试程序,这个量也就差不多了 if ( timeCount++ > 6 ) break; memset(testData, 0, sizeof(testData)); if ( SI_Read( m_hUSBDevice, testData, 40, &hasRead) == SI_SUCCESS ) { printf("zengjf debug: SI_Read USBDevice success, hasRead length = %d.\n", hasRead); // 以16进制的形式打印出接收到的一帧数据 printf("printf all data:\n\t"); for ( DWORD i = 0; i < hasRead; i++ ) printf(" %02x ", testData[i] & 0xff); printf("\n"); // 判断接收到的数据是远程帧,还是数据帧 if ( testData[0] & ( 1 << 6 ) ) printf("Frame Format: Remote Frame.\n"); else printf("Frame Format: Data Frame.\n"); // 输出数据长度 printf("Frame data length: %d.\n", testData[0] & 0xf); // 输出是扩展帧,还是标准帧 if ( testData[0] & (1 << 7) ) { printf("Frame Type: Extend Frame.\n"); // 解析扩展帧的ID printf("ID: %X.\n", (((testData[1] & 0x0ff) << 21) | \ ((testData[2] & 0x0ff) << 13) | \ ((testData[3] & 0x0ff) << 5) | \ ((testData[4] >> 3) & 0x1f))); // 将二进制数值转换成字符数字 for ( DWORD i = 5; i < hasRead; i++ ) testData[i] += '0'; // 显示所有的接收的数据 printf("zengjf debug: show data from C8051F340 -- testData[ %s ].\n", testData+5); } else { printf("Frame Type: Standard Frame.\n"); // 解析标准帧的ID printf("ID: %X.\n", (((testData[1] & 0x0ff) << 3 ) | ((testData[2] >> 5) & 0x7))); // 将二进制数值转换成字符数字 for ( DWORD i = 3; i < hasRead; i++ ) testData[i] += '0'; // 显示所有的接收的数据 printf("zengjf debug: show data from C8051F340 -- testData[ %s ].\n", testData+3); } } else { printf("zengjf debug: SI_Read USBDevice fails.\n"); break; } } if ( SI_Close(m_hUSBDevice) == SI_SUCCESS ) printf("zengjf debug: SI_Close USBDevice success.\n"); else printf("zengjf debug: SI_Close USBDevice fails.\n"); return 0; }

 

目录
相关文章
|
4天前
|
NoSQL 网络协议 Linux
Redis的实现一:c、c++的网络通信编程技术,先实现server和client的通信
本文介绍了使用C/C++进行网络通信编程的基础知识,包括创建socket、设置套接字选项、绑定地址、监听连接以及循环接受和处理客户端请求的基本步骤。
26 6
|
5天前
|
XML 数据格式 开发者
解析数据的Beautiful Soup 模块(一)
解析数据的Beautiful Soup 模块(一)
26 0
|
18天前
数据解析之xpath 太6了
数据解析之xpath 太6了
|
21天前
|
存储 弹性计算 缓存
阿里云服务器ECS通用型实例规格族特点、适用场景、指标数据解析
阿里云服务器ECS提供了多种通用型实例规格族,每种规格族都针对不同的计算需求、存储性能、网络吞吐量和安全特性进行了优化。以下是对存储增强通用型实例规格族g8ise、通用型实例规格族g8a、通用型实例规格族g8y、存储增强通用型实例规格族g7se、通用型实例规格族g7等所有通用型实例规格族的详细解析,包括它们的核心特点、适用场景、实例规格及具体指标数据,以供参考。
阿里云服务器ECS通用型实例规格族特点、适用场景、指标数据解析
|
13天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
97 11
|
5天前
|
前端开发 Python
解析数据的Beautiful Soup 模块(二)
解析数据的Beautiful Soup 模块(二)
14 1
|
19天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
1月前
|
数据采集 存储 JavaScript
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
在现代网页开发中,复杂的HTML结构给爬虫技术带来挑战。传统的解析库难以应对,而Cheerio和jsdom在Node.js环境下提供了强大工具。本文探讨如何在复杂HTML结构中精确提取数据,结合代理IP、cookie、user-agent设置及多线程技术,提升数据采集的效率和准确性。通过具体示例代码,展示如何使用Cheerio和jsdom解析HTML,并进行数据归类和统计。这种方法适用于处理大量分类数据的爬虫任务,帮助开发者轻松实现高效的数据提取。
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
|
27天前
|
存储 关系型数据库 MySQL
技术解析:MySQL中取最新一条重复数据的方法
以上提供的两种方法都可以有效地从MySQL数据库中提取每个类别最新的重复数据。选择哪种方法取决于具体的使用场景和MySQL版本。子查询加分组的方法兼容性更好,适用于所有版本的MySQL;而窗口函数方法代码更简洁,执行效率可能更高,但需要MySQL 8.0及以上版本。在实际应用中,应根据数据量大小、查询性能需求以及MySQL版本等因素综合考虑,选择最合适的实现方案。
136 6
|
3天前
|
JSON JavaScript API
商品详情数据接口解析返回的JSON数据(API接口整套流程)
商品详情数据接口解析返回的JSON数据是API接口使用中的一个重要环节,它涉及从发送请求到接收并处理响应的整个流程。以下是一个完整的API接口使用流程,包括如何解析返回的JSON数据:

热门文章

最新文章

推荐镜像

更多