项目场景:
项目由于在硬件测试完成功能之后就需要组装成为样机,这样需要在测试过程中不停的外部升级代码,平时升级功能没有问题,这次项目通过IAP的升级方式升级后确不能正常运行APP的功能。
问题描述
问题就是升级过后,APP程序不能正常运行,但是我通过jlink的烧录软件进去之后就可以正常运行,我做的项目是一个MCU主控板控制4个MCU的测温板,首先是测温板需要进行软件的升级。后面出现了升级的问题,我就去使用中空板也进行外部的软件升级,出现了一模一样的情况。
原因分析:
1.这个问题已经存在几天,开始通过去看代码检测了IAP升级过程中的通信问题发现中途出现了通信不上的问题,是我的测温板串口配置不对。
2.第二个方面想到了我的外部升级标志位存储在0x08060000的地址学属于扇区七的位置。我的测温版由于没有外部AT24的flash,我于是使用扇区八作为了我参数存储的位置。检测好了外部升级的标志位也没有问题。
3.我找公司的同事给我帮忙我,发现我在升级过程中经常数据校验错误的问题,我通过逻辑分析仪对比了升级过程中RS485的通讯时序和数据都是正常的,在校验失败的时候也是会自动进行停止。
4.在确保通信无误之后,我把升级成功后写入到MCU内部flash的数据通过JlinkFlash提取出来,通过WinMerge软件,将两个生成的bin文件进行对比也没有出现问题。
解决方案:
1.在排除了这些问题之后,在两天后之前的项目由于升级了新功能需要进行升级,在升级4台样机的过程中我发现升级没有成功,但是APP程序是可以运行的。这就出现了和之前升级不成功同样的例子,就找到了是因为生成的bin文件的问题与工程以及axf文件的文件名没有对应起来。
1.这是未修改前的生成bin文件的路径
2.这是未修改前的output工程输出文件名
3.在这样修改之后去查找资料找到了原因
原因主要出在bin文件生成的方式中
Objects是我用于存放axf输入文件的文件夹
生成bin文件前,要先生成axf输入文件;
4.问题到这也是基本解决,这真的是一个大失误呀,因为我为了区别不同的bin文件贸然修改生成的文件名困扰了2周,嵌入式小白简直了。