硬汉嵌入式论坛

 找回密码
 立即注册
查看: 497|回复: 7
收起左侧

[IAR] IAR Flash Loader流程

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-7-2 11:43:57 | 显示全部楼层 |阅读模式



以下是IR Flash Loader流程的详细说明:
  • C-SPY读取Flash内存系统配置文件(.board),并指定一个或多个Flash加载过程,每个过程对应开发板上的一个Flash内存设备。
  • 对于每个过程,指定原始映像文件(要下载的应用程序)的特定地址范围(或子集)。映像文件(ELF)被拆分为每个过程的单独映像文件。如果只有一个过程,则直接使用原始映像文件。
  • 每个过程指定一个Flash内存配置文件(.flash),其中包含指定特定Flash Loader的信息。
  • C-SPY将当前过程的Flash Loader下载到RAM:
    • 加载当前过程的宏文件(在.flash文件中指定)。
    • 如果是第一个过程:
      • 调试器连接到设备。如果使用C-SPY I-jet驱动程序,则调用execUserProbeConnect和execUserCoreConnect宏函数。
      • 根据Project>Options设置重置设备。如果使用I-jet调试探针,则调用execUserProbeReset和execUserCoreConnect宏函数。
      • 调用execUserFlashInit宏函数。
      • 将Flash Loader可执行文件下载到RAM中。
      • 调用execUserFlashPreset宏函数。
      • 执行软件重置。
      • 调用execUserFlashReset宏函数。


  • 如果过程指定了偏移量,则映像文件中的所有记录将相应重定位。
  • 如果存在标签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设置为最终应用程序的起始地址。


回复

使用道具 举报

6

主题

27

回帖

45

积分

新手上路

积分
45
发表于 6 天前 | 显示全部楼层
有IAR的使用外部FLASH作为储存程序的教程吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 5 天前 | 显示全部楼层
Rose980 发表于 2025-8-5 14:02
有IAR的使用外部FLASH作为储存程序的教程吗

这个我们没做过
回复

使用道具 举报

2

主题

89

回帖

95

积分

初级会员

积分
95
发表于 5 天前 | 显示全部楼层
多谢大佬总结
回复

使用道具 举报

86

主题

550

回帖

808

积分

金牌会员

积分
808
发表于 5 天前 | 显示全部楼层
flash loader加载到ram的代码,是不是必须得编译成与位置无关啊?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 5 天前 | 显示全部楼层
tangqianfeng 发表于 2025-8-6 14:02
flash loader加载到ram的代码,是不是必须得编译成与位置无关啊?

IAR绝对地址和动态地址均支持
回复

使用道具 举报

86

主题

550

回帖

808

积分

金牌会员

积分
808
发表于 5 天前 | 显示全部楼层
eric2013 发表于 2025-8-6 16:54
IAR绝对地址和动态地址均支持

绝对地址的话,那加载到ram中执行,不是也得指定加载到ram的地址?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 5 天前 | 显示全部楼层
tangqianfeng 发表于 2025-8-6 17:05
绝对地址的话,那加载到ram中执行,不是也得指定加载到ram的地址?

是的,我们TOOL刚刚完成支持。

IAR下载算法文件是支持动态加载和绝对地址加载两种,H7-TOOL都对其进行了支持
https://forum.anfulai.cn/forum.p ... 9332&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-11 20:58 , Processed in 0.040023 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表