代码之家  ›  专栏  ›  技术社区  ›  sanchop22

STM32从特定NOR块引导

  •  0
  • sanchop22  · 技术社区  · 7 年前

    我已经将一个STM32F4项目从Keil uVision5移植到Eclipse(GNU MCU插件)。

    在我的Keil uVision5项目中,我使用第7块(0x080E0000)作为启动代码(我验证了使用 STM32 ST-LINK实用程序 工具,我的启动代码真的是在第7块),我用它来配置非常容易使用Keil uVision5接口,如下所示:

    enter image description here

    我的问题是我的Eclipse项目。如您所知,我们使用名为mem.ld的链接器脚本文件配置内存映射。我试着用mem.ld模仿同样的行为,但我想我失败了。每当我刷新Eclipse生成的可执行文件时,我的代码就不会运行。此外,我找不到在mem.ld文件中指明启动区域的方法。以下是mem.ld文件中的内存配置:

    MEMORY
    {
        RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
        CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
        FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 16K
        FLASHB1 (rx) : ORIGIN = 0x080E0000, LENGTH = 640K
        EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0
        EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0
        EXTMEMB2 (rx) : ORIGIN = 0x00000000, LENGTH = 0
        EXTMEMB3 (rx) : ORIGIN = 0x00000000, LENGTH = 0
        MEMORY_ARRAY (xrw)  : ORIGIN = 0x20002000, LENGTH = 32
    }
    

    提前多谢了。

    1 回复  |  直到 7 年前
        1
  •  2
  •   0___________    7 年前

    重置后执行的代码地址取自向量表的4-7字节(称为重置向量)。

    在gcc样式的链接器脚本中 ENTRY 指令很重要,而不是内存段定义。

    您可以将条目更改为地址值或符号。例如

    ENTRY(My_Startup_Function) 或者在CubeMX生成的标准链接器脚本中 ENTRY(Reset_Handler)

    在基尔,我记得你有两个选择: 命令行

    --entry=location

    位置可以是地址或符号

    here 是有关根区域和入口点的详细信息。我不再使用keil,我个人更喜欢gcc。

    推荐文章