您好!
我正在尝试从主应用程序更新引导加载程序代码。 在擦除引导加载程序闪存扇区之前、我禁用所有中断、并在擦除引导加载程序闪存扇区后再次启用它们。 不过、当 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 }
此致、
希汉