编写语言:C++
编写平台:VS
运用平台:STM32和PC
非常实用的一个解析程序,自己编写的也简单。
*.h
#define BUF_LEN 1024 //buf长度
#define CONF_BUF_LEN 128 //保存代解析数据
#define DATA_BUF_LEN 100 //保存解析数据 //此处为最大传输数据
#define CONF_BUF_BEST_LEN 4 //基本数据长度
/*/////////////////协议定义//////////////////////
// 0x6B 0x66 长度 数据 校验(长度+数据的和)
//最基本的数据 0x6B 0x66 0x01 0x01 0x2
用法:1.调用add();函数,在中断函数,或者线程
2.调用checke_con();函数,在主函数或者线程,中断
*/
//针头
#define ZT1 0x6B
#define ZT2 0x66
///////////////////////////////////////////////
class uart
{
public:
uart(void);
~uart(void);
private:
unsigned char buf[BUF_LEN]; //buf队列
unsigned char conf_buf[CONF_BUF_LEN]; //代解析到的数据
unsigned int conf_buf_len; //代解析数据长度
public:
unsigned char data_buf[DATA_BUF_LEN]; //解析数据:长度+数据
unsigned char data_buf_len;
unsigned int buf_len; //buf长度
unsigned char *in; //队列头
unsigned char *out; //队列未
public:
//添加数据到队列
void add(unsigned char temp);
//出队数据到队列
unsigned char del();
//检查命令
int checke_con();
};
.cpp
#include "stdafx.h"
#include "uart.h"
#include "string.h"
uart::uart(void)
{
in=buf;
out=buf;
buf_len=0;
conf_buf_len=0;
data_buf_len=0;
memset(buf,0,BUF_LEN);
}
uart::~uart(void)
{
}
//添加数据到队列
void uart::add(unsigned char temp)
{
*in++=temp;
buf_len++;
if(in==(buf+BUF_LEN))in=buf;
//printf("buf:%sn",buf);
}
//出队数据到队列
unsigned char uart::del()
{
unsigned char ch;
if(buf_len>0)
{
buf_len--;
ch=*out++;
if(out==(buf+BUF_LEN))out=buf;
return ch;
}
return 0;
}
//检查命令
int uart::checke_con()
{
int len=0;
int data_len=0;
unsigned char c=0;
if(buf_len>0)
{
c=del();
//printf("(1):%x n",c);
conf_buf[conf_buf_len++]=c;
if(conf_buf_len>DATA_BUF_LEN+CONF_BUF_BEST_LEN)conf_buf_len=0;
}
else return 0;
if(conf_buf_len>=CONF_BUF_BEST_LEN)
{
int i=0;
if(conf_buf[2]>DATA_BUF_LEN) //长度不大于可用长度
{
for(i=0;i conf_buf[i]=conf_buf[i+1]; } conf_buf_len-=1; return 0; } //while(i // printf("%x ",conf_buf[i]); // i++; //} //printf("n"); if(conf_buf[len]!=ZT1) //判断针头 { for(i=0;i conf_buf[i]=conf_buf[i+1]; } conf_buf_len-=1; return 0; } if(conf_buf[len+1]!=ZT2) //判断针头 { for(i=0;i conf_buf[i]=conf_buf[i+1]; } conf_buf_len-=1; return 0; } len+=2; data_len=conf_buf[len]; //数据长度 //printf("len:%dn",data_len); //printf("buf_len:%dn",conf_buf_len); if((data_len+CONF_BUF_BEST_LEN)<=(conf_buf_len)) //数据包长度刚和等于数据长度加基本数据包 { int N=len; int sum=0; data_buf_len=0; while(N<=data_len+len) { data_buf[data_buf_len++]=conf_buf[N]; sum+=conf_buf[N++]; } data_buf[data_buf_len]=0; //printf("sum:%dn",sum); if(sum==conf_buf[N]) //判断校验 { for(i=0;i<(data_len+CONF_BUF_BEST_LEN);i++) { conf_buf[i]=conf_buf[i+data_len+CONF_BUF_BEST_LEN]; } conf_buf_len-=(data_len+CONF_BUF_BEST_LEN); return 1; }else //检验失败 { for(i=0;i conf_buf[i]=conf_buf[i+1]; } conf_buf_len-=1; } } } return 0; } main.c // 串口协议0.6.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "uart.h" #include "windows.h" #include "conio.h" uart U; //子线程函数 DWORD WINAPI ThreadFun(LPVOID pM) { int v=0; while(1) { //if(U.buf_len>0) //{ // printf("%x ",U.del()); // v++; // if(v==12)printf("n"),v=0; //} if(U.checke_con()) { printf("解析出数据--------ok:"); for(int i=0;i printf("%x ",U.data_buf[i]); } printf("n"); } Sleep(2); } } int _tmain(int argc, _TCHAR* argv[]) { char ch; int n=1; int chi=10; unsigned char str[]={0x6b,0x43,0x66,0x6B,0x66,0x03,0x02,0x1,0x21,0x27,0x12,0x66,0x32,0x12,0x6B,0x66,0x01,0x02,0x3}; unsigned char str1[]={0x6B,0x66,0x03,0x02,0x1,0x21,0x27,0x6B,0x66,0x01,0x02,0x3}; HANDLE handle = CreateThread(NULL, 0, ThreadFun, NULL, 0, NULL); while(chi--) { for(int i=0;i<12;i++) U.add(str1[i]); Sleep(100); //getch(); //printf("n"); //printf("nadd:%dn",n++); } while(1); return 0; } 运行效果:
上一篇:使用sublime开发python
下一篇:串口命令解析
推荐阅读
史海拾趣
Ferroperm公司非常重视产品的品质管理。他们建立了严格的质量管理体系,从原材料采购到产品生产、检测等各个环节都实行严格的质量控制。同时,Ferroperm还注重持续改进,不断引进先进的生产设备和检测技术,提高产品的质量和性能。这种对品质的执着追求使得Ferroperm的产品在市场上获得了良好的口碑和信誉。
作为一家有社会责任感的企业,德欣公司始终关注环境保护和可持续发展。公司积极推广绿色生产技术和资源循环利用方案,减少生产过程中的能源消耗和废弃物排放。同时,德欣公司还积极参与社会公益活动,为社区和环境贡献自己的力量。这些举措不仅体现了德欣公司的社会责任担当,也为其赢得了更多客户和合作伙伴的信任和支持。
成都芯进电子一直致力于打破国外芯片市场的垄断地位,实现进口替代。他们在电流传感器领域取得了显著成果,产品已经全面进入工控、光伏、储能等领域,并获得了阳光电源、英威腾、欣旺达、安克等客户的认可。这一成就不仅展示了公司的技术实力和市场竞争力,也为国产芯片事业的发展做出了积极贡献。
Caddock公司的发展可以追溯到1962年,当时公司推出了Micronox电阻系统。这一创新技术使电阻器在极端操作条件和恶劣环境下实现了高水平的稳定性和可靠性。这一重大突破为Caddock公司赢得了市场的广泛认可,并为后续的电阻材料技术发展奠定了坚实的基础。
Brand-Rex一直致力于技术创新和产品研发。其专利铜线绞合技术大大改善了结构回路损耗,降低了衰减;同时,利用电缆内十字截面塑胶隔离层把四组双绞线分隔开,减少了近端串扰。这些技术创新不仅提升了产品的性能和质量,还使Brand-Rex在行业中树立了技术领先的形象。此外,Brand-Rex还积极参与国际标准的制定和推广工作,为全球布线行业的发展做出了重要贡献。
为了更好地服务中国及亚太地区的电子产业集群,Henkel在东莞市投建了汉高电子粘合剂华南应用技术中心。该中心不仅具备先进的研发设备和测试能力,还拥有一支专业的技术团队。通过模拟仿真和数字化手段,该中心能够快速响应客户需求,提供定制化的粘合剂解决方案。自启用以来,该中心已帮助众多电子企业实现了技术创新和产品升级。
变频电机资料谁有啊??????、、变频电机资料谁有啊??????、、变频电机资料谁有啊??????、、变频电机资料谁有啊??????、、变频电机资料谁有啊??????、、变频电机资料谁有啊??????、、变频电机资料谁有啊???? ...… 查看全部问答∨ |
我的电路能够得到一系列的方波信号,但是占空比不一样。因为占空比不一样,如果我直接加不可调的低通滤波器转换成正弦波的话,得到的正弦波有些就不能做到关于时间轴对称。那么如果我要实现所有的正弦波都关于时间轴对称(即对任意占空比的方波都能 ...… 查看全部问答∨ |
本人用的是PPC440的CPU,操作系统起来后,其余的好像都正常,网络,串口都能正常工作, 可是热启动(ctrl+x)后,操作系统就死了, 这时候没有一点反应, 不知道是什么原因,其中romInit.s中一部分内容如下: FUNC_LABEL(_romInitWarm) FUNC_L ...… 查看全部问答∨ |
不需要代码,只要论文,基本的可以自己搞,就是不知道具体的要做个什么东西,希望好心人指点下,提供这方面的资料借鉴下~! 邮箱:wleuler@163.com… 查看全部问答∨ |
关于CEDDK的READ_PORT_UCHAR(<端口号地址>),其中的端口号地址是在哪里定义的呢? 小弟最近在写一个GPIO驱动,在GPI_Read()流接口函数中想用READ_PORT_UCHAR(<端口号地址>)从指定的GPIO的端口接受数据。我用的是PXA270,其中的GPIO的端口号地址是在哪里定义的呢?我看了PXA270的datasheet好像没有发现。… 查看全部问答∨ |
|
兴大豪科技高薪诚聘以下职位 VC工程师 待遇在8k 精通VC++ ,熟悉SQLServer数据库和基于socket网络编程;有数控系统人机界面开发经验者优先考虑。 硬件开发工程师 待遇在8k 岗位一:有电机控制项目5年以上开发经验,熟悉DSP编程和电 ...… 查看全部问答∨ |
我是大四的一名学生,我想毕业可从事嵌入式系统这方面的工作,现在我想学习驱动编程,我只在书上看了一些WIN CE的基本驱动的结构, 我想深入了解, 1)应该从那一方面入手呢,或者说先从那一个模块开始深入了解呢? 2)我需要什么专业知识 ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 赢京东卡 室内空气隐患大作战——英飞凌XENSIV™PAS CO2传感器
- 【边分享,边成长,11月有奖】EEWORLD优秀主题/回复第16期活动开始拉
- 直播已结束【解锁 TI Sitara AM2x MCU 在电机驱动中的新可能】
- 迈来芯高可靠可编程霍尔开关,5月21日 10:00 邀您观看直播
- TI带你一起玩转复杂汽车电子设计技能
- 任选下载有礼|《新概念模拟电路》全五册合集/《ADI 参考电路合集》
- ST传感器闯天下之驱动移植大赛+骨振动传感器评测,分高者胜
- 观视频,奖礼品 Fluke多功能多产品系列校准器
- TI MCU 常见问题(FAQ)大搜集
- 吉时利DMM6500 6½ 位数字触摸屏万用表六大功能,满足工程师的切身需求,献给有梦想的你!
- Zepp将在11月18日凌晨发布全新旗舰智能腕表Zepp Z
- Redmi K40系列:小孔径OLED挖孔直屏 支持120Hz刷新率
- 华尔街投行:高通已经获得向华为出口4G芯片许可证
- 天通一号02星发射成功 或为中国及周边等地区提供移动通信
- 京东方发布了全球首款55寸4K AMQLED
- 双脉冲测试基础系列:基本原理和应用
- 「鳍源科技」获数千万元B1轮融资,进行水下人工智能技术布局
- 基于NCL35076或NCL30076的可调光LED照明降压方案
- e络盟现货发售Arduino Nano RP2040 Connect和Raspberry Pi Pico
- Qorvo 扩展其 BAW 滤波器产品组合,以支持全球 5G 基站部署