以下是IR Flash Loader流程的详细说明: C-SPY读取Flash内存系统配置文件(.board),并指定一个或多个Flash加载过程,每个过程对应开发板上的一个Flash内存设备。 对于每个过程,指定原始映像文件(要下载的应用程序)的特定地址范围(或子集)。映像文件(ELF)被拆分为每个过程的单独映像文件。如果只有一个过程,则直接使用原始映像文件。 每个过程指定一个Flash内存配置文件(.flash),其中包含指定特定Flash Loader的信息。 C-SPY将当前过程的Flash Loader下载到RAM: 如果过程指定了偏移量,则映像文件中的所有记录将相应重定位。 如果存在标签FlashPreInitEntry,C-SPY将PC设置为其地址。
执行启动后,当执行到达特殊断点时,C-SPY重新获得控制权。
如果Flash Loader可重定位,FlashPreInitEntry函数将设置系统,以便调试器可以找到所有重定位的符号。 C-SPY将PC设置为FlashInit(或技术上设置为随后调用FlashInit的标签)。 将参数写入RAM缓冲区。 启动执行,执行FlashInit,当执行到达特殊断点时,C-SPY重新获得控制权。FlashInit可以覆盖.flash文件中的某些信息,例如页大小和块布局。 C-SPY根据Flash内存页和块布局以及RAM缓冲区的大小,将映像文件中的数据分区为合适的片段。
如果<aggregate>标签值为1,C-SPY将通过将多个块的写入操作组合在一起来更高效地使用RAM下载缓冲区。这是一个有用的性能优化,前提是块大小明显小于RAM缓冲区,以便至少两个(或更多)块可以放入下载缓冲区。此功能要求Flash Loader可以在单个操作中编程多个块。 如果是首次写入块,必须先擦除块,转到步骤11。如果不是首次写入块,则转到步骤13。 将RAM参数分配为块的大小和地址。 C-SPY将PC设置为FlashErase并启动执行。函数完成后,到达断点。 C-SPY将映像文件的一部分写入RAM缓冲区(下载到RAM缓冲区的映像大小是页大小的倍数)。 C-SPY将PC设置为FlashWrite并启动执行。函数完成后,到达断点。 如果还有更多数据,返回步骤10。否则: C-SPY将PC设置为FlashChecksum并启动执行。函数完成后,到达断点。(此步骤可选) C-SPY将PC设置为FlashSignoff并启动执行。函数完成后,到达断点。(此步骤可选) 调用execUserFlashExit宏函数。 卸载当前过程的C-SPY宏文件(参见步骤4的第一点)。
如果有更多过程,返回步骤3。 读取与最终应用程序对应的调试信息。首先执行以下步骤: 如果选择了Project>Download>Download active application或Project>Download>Download file,则断开设备连接,并跳过步骤17的剩余部分和步骤18。 加载根据Project>Options>Debugger>Setup>Setup macros设置指定的宏文件。同时加载.179文件中DeviceMacros参数指定的宏文件。 根据Project>Options>Debugger设置重置设备。 调用_ExecDevicePreload和execUserPreload宏函数。 读取与最终应用程序对应的调试信息。 验证下载(如果在Project>Options>Debugger>Download中设置)。 调用_ExecDevicePreReset和execUserPreReset宏函数。 执行软件重置。 调用_ExecDeviceReset和execUserReset宏函数。 调用_ExecDeviceSetup和execUserSetup宏函数。
C-SPY将PC设置为最终应用程序的起始地址。
|