项目场景:
概述:最近在做HC32F460的IAP升级的相关工作,按照正常的流程,再开发完boot程序之后,只要合理安排falsh分区,保证boot引导程序和APP程序互不冲突即可,为此需要更改APP程序在flash中的默认起始地址由0x0(默认)改为0x2000(根据Boot程序的大小来定),之后再生成二进制bin文件由boot程序引导写入flash即可,但是在实际操作过程中,却一直无法正常生成Bin文件。:
问题描述:
我这里使用的是keil5.28版本,在配置菜单中找到“target”选项卡并更改其中的IROM和IRAM配置即可,具体看你的程序大小自行配置。如若需要生成对应的bin文件,则点击“User”选项卡,在After Build一栏添加<fromelf --bin -o “$L@L.bin” “#L”>即可。在开发时遇到的具体问题是,当我将IROM1的起始地址由0x0改为0x2000之后,在生成Bin文件的步骤一直报文件已存在的错误。具体错误提示请看下图三:
原因分析:
从错误提示来看貌似是在0x400这个地址上已经定义了什么内容,导致程序无法以0x2000作为起始地址。后续经过实验,也证实了这个猜想,当我把程序起始地址改为0x200(即起始地址小于0x400时),bin文件正常生成没有报错。尽然问题初步定位到了,那剩下的就好办了,找相关的配置文件并把有冲突的去掉或修改即可,这里的解决办法是直接把icg文件从工程中去掉,具体操作如下。解决方案:
步骤1.在项目工程中找到icg.c文件
步骤2.将这个文件从工程中移除
步骤3.然后点击编译即可,bin文件正常生成不报错。