一,前言
43.QT自定义boot工具(上下位机联调)--Apple的学习笔记中描述不支持hex格式,但是MCU编译的时候我们常用的还是此格式文件。那么作为QT的上位机boot工具,必须要支持hex格式文件的解析。
二,需求
本人就是做通信协议的,解析处理是我的基本功。但是具体的格式忘记了,所以百度搜索了下,然后就有了设计思路。我做了个c语言的,先在vs2019中调试通过,也便于将来改成动态库。
三,遇到的问题
- 字符串转十进制简单的方法,只要分这3类即可
unsigned char hexFile::ASCII_TO_DEC(char data)
{
if ('0' <= data&&data <= '9')
return data - '0';
else if ('A' <= daa&&data <= 'F')
return data - 'A' + 10;
else if ('a' <= data&&data <= 'f')
return data - 'a' + 10;
else
return 0;
}
- 传递指针问题
我原来设计在函数内部分配数据空间,但是释放空间则在调用的类中,所以调用的类中需要传入空间地址。结果跑飞了。原来我搞错了,就是一个指针赋值,所有指针必须指向有地址空间的指针才是有效赋值。后来做了如下测试代码,才发现的问题。最后解决方法是把释放空间也打包在被调用的类中了。
#include <stdio.h>
#include <stdlib.h>
char *bindat=NULL;
void intHexToBin(char* data)
{
bindat=data; //这是一段会跑飞的代码,因为bindat指向了NULL
bindat = (char *)malloc(8);
bindat[0]=1;
bindat[1]=2;
}
int main()
{
char * testval=NULL;
intHexToBin(testval);
printf("%d,%d\n",testval[0],testval[1]);
return 0;
}
四,效果
image.png五,小结
上位机暂时补充完成了,接着要把整个系统中的自定义booloader先要改成标准uds协议了。
网友评论