您好!
我正在尝试从主应用程序更新引导加载程序代码。 在擦除引导加载程序闪存扇区之前、我禁用所有中断、并在擦除引导加载程序闪存扇区后再次启用它们。 不过、当 MPU 尝试通过 I2C 发送命令时、它会复位。 调试器首先显示"正在运行"、然后显示"正在运行-发生了一个复位"、然后再次"正在运行"、当我暂停代码时、显示"在地址0x4中断、没有可用的调试信息、或者在程序代码之外。"
I2C 和一些其他外设使用 DMA。
另一个问题是、当我擦除整个闪存而仅加载主应用程序时、它会在发送第一条 I2C 命令时立即崩溃。
出于某种原因、主应用需要第一个扇区中的数据。
导致此问题的原因是什么?
下面您可找到链接器文件内容:
MEMORY
{
VECTORS (X) : origin=0x00060000 length=0x00000020 vfill = 0xffffffff
FLASH0 (RX) : origin=0x00060020 length=0x000DFFE0 vfill = 0xffffffff
STACKS (RW) : origin=0x08000000 length=0x00001500
RAM (RW) : origin=0x08001500 length=0x0002EB00
}
SECTIONS
{
.intvecs : {} > VECTORS
flashAPI:
{
.\source\Fapi_UserDefinedFunctions.obj (.text)
.\App\source\bl_flash.obj (.text)
--library= "c:\ti\Hercules\F021 Flash API\02.01.01\F021_API_CortexR4_BE.lib" (.text, .data)
} palign=8 load = FLASH0, run = RAM, LOAD_START(apiLoadStart), RUN_START(apiRunStart), SIZE(apiLoadSize)
.TI.ramfunc : {} load = FLASH0, run = RAM, LOAD_START(ramLoadStart), RUN_START(ramRunStart), SIZE(ramLoadSize)
.text : {} > FLASH0
.const : {} > FLASH0
.cinit : {} > FLASH0
.pinit : {} > FLASH0
.bss : {} > RAM
.data : {} > RAM
.sysmem : {} > RAM
}
此致、
希汉