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; }

 

目录
相关文章
|
30天前
|
NoSQL 网络协议 Linux
Redis的实现一:c、c++的网络通信编程技术,先实现server和client的通信
本文介绍了使用C/C++进行网络通信编程的基础知识,包括创建socket、设置套接字选项、绑定地址、监听连接以及循环接受和处理客户端请求的基本步骤。
44 6
|
24天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
125 2
|
1月前
|
XML 数据格式 开发者
解析数据的Beautiful Soup 模块(一)
解析数据的Beautiful Soup 模块(一)
数据解析之xpath 太6了
数据解析之xpath 太6了
|
9天前
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
3920 2
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
5天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
91 1
|
11天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
11 1
|
21天前
【通信协议讲解】单片机基础重点通信协议解析与总结之串口通信(三)
【通信协议讲解】单片机基础重点通信协议解析与总结之串口通信(三)
|
22天前
|
数据采集 XML 前端开发
Jsoup在Java中:解析京东网站数据
Jsoup在Java中:解析京东网站数据
|
5天前
|
JSON 前端开发 JavaScript
API接口商品详情接口数据解析
商品详情接口通常用于提供特定商品的详细信息,这些信息比商品列表接口中的信息更加详细和全面。以下是一个示例的JSON数据格式,用于表示一个商品详情API接口的响应。这个示例假定API返回一个包含商品详细信息的对象。

推荐镜像

更多