美文网首页RTOS和GUI_基于英飞凌tc2x及stm32开发板
44.QT boot工具添加hex解析--Apple的学习笔记

44.QT boot工具添加hex解析--Apple的学习笔记

作者: applecai | 来源:发表于2022-02-15 21:24 被阅读0次

    一,前言

    43.QT自定义boot工具(上下位机联调)--Apple的学习笔记中描述不支持hex格式,但是MCU编译的时候我们常用的还是此格式文件。那么作为QT的上位机boot工具,必须要支持hex格式文件的解析。

    二,需求

    本人就是做通信协议的,解析处理是我的基本功。但是具体的格式忘记了,所以百度搜索了下,然后就有了设计思路。我做了个c语言的,先在vs2019中调试通过,也便于将来改成动态库。

    三,遇到的问题

    1. 字符串转十进制简单的方法,只要分这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;
    }
    
    1. 传递指针问题
      我原来设计在函数内部分配数据空间,但是释放空间则在调用的类中,所以调用的类中需要传入空间地址。结果跑飞了。原来我搞错了,就是一个指针赋值,所有指针必须指向有地址空间的指针才是有效赋值。后来做了如下测试代码,才发现的问题。最后解决方法是把释放空间也打包在被调用的类中了。
    
    #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协议了。

    相关文章

      网友评论

        本文标题:44.QT boot工具添加hex解析--Apple的学习笔记

        本文链接:https://www.haomeiwen.com/subject/rxgllrtx.html