今日把昨天遇到的问题解决了,昨天的问题果然还是在FLASH区刷写上,存在两个问题导致APP1区上刷写的程序不对,第一处问题出现在把APP2程序上的无效空间(如00H-600H,不是程序正常数据,程序地址从600H开始计数,但是KEIL生成的HEX转BIN文件,前600H也有数据虽然都是0,但是在IAP写入过程中需要删掉这部分,故在BOOT程序中,把接收到的前600H数据舍弃,判断地址,从600H开始接收到C00H结束,C00H后的数据才是真正要写到600H的数据,具体看前几次总结)排除选择上出了问题,太多变量导致混淆,把APP1区的地址错误的分配给了APP2区,第二处错误出现在读地址数据上,从APP2地址区读取数据写入到APP1地址中,在读的过程中每次选择16位数据存储到数组中,使用FOR循环时,忘记对地址自增,使得16位数据均为首地址的数据,导致APP1无法正常运行。
改正后,双区BOOTLOAD程序正常运行,在下载程序时若断开接收,APP2区数据不完整,不会复制到APP1区此时重新上电,正常进入原有程序即APP1区,若是在APP2复制到APP1区的过程中断电,重上电后会自动将APP2区程序复制到APP1区,复制完成后软复位正常运行新程序。
最近遇到了把数组传递给其他C文件中的函数,使用指针很方便,传入数组首地址,即数组名,如传入a[10]的首地址,则可以直接把a传给函数,函数声明为fun(*a),这样就可以将数组传入其他函数中。