STM32从特定NOR块引导
我已经将一个STM32F4项目从Keil uVision5移植到Eclipse(GNU MCU插件) 在我的Keil uVision5项目中,我使用第7块(0x080E0000)作为我的引导代码(我使用STM32 ST-LINK实用工具验证我的引导代码确实位于第7块),我使用Keil uVision5接口非常容易地配置该代码,如下所示: 如果我没有弄错的话,在我的Keil uVision项目(其内存配置如上所示)中,MCU从第0个块(0x08000000)引导,然后立即跳到第7个块(0x080E0000)以执行我的代码。如果我错了,告诉我 我的问题是我的Eclipse项目。您可能已经知道,我们使用名为mem.ld的链接器脚本文件配置内存映射。我试图用mem.ld模仿同样的行为,但我想我失败了。每当我刷新Eclipse生成的可执行文件时,我的代码都不会运行。此外,我无法在mem.ld文件中找到指示启动区域的方法。下面是我在mem.ld文件中的内存配置:STM32从特定NOR块引导,stm32,linker-scripts,memory-mapping,gnu-arm,Stm32,Linker Scripts,Memory Mapping,Gnu Arm,我已经将一个STM32F4项目从Keil uVision5移植到Eclipse(GNU MCU插件) 在我的Keil uVision5项目中,我使用第7块(0x080E0000)作为我的引导代码(我使用STM32 ST-LINK实用工具验证我的引导代码确实位于第7块),我使用Keil uVision5接口非常容易地配置该代码,如下所示: 如果我没有弄错的话,在我的Keil uVision项目(其内存配置如上所示)中,MCU从第0个块(0x08000000)引导,然后立即跳到第7个块(0x080
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
}
你能帮我用mem.ld文件模仿Keil uVision5的同样行为吗?在mem.ld配置中我会犯什么错误?正确的配置应该是什么
非常感谢。重置后执行的代码地址取自向量表的4-7字节(称为重置向量) 在gcc风格的链接器脚本中,
ENTRY
指令很重要,而不是内存节定义
您可以将条目更改为地址值或符号。比如说
ENTRY(My\u Startup\u函数)
或由CubeMXENTRY(Reset\u处理程序)生成的标准链接器脚本中的内容
在keil,我记得你有两个选择:
命令行
--entry=位置
其中位置可以是地址或符号
有关根区域和入口点的详细信息。我不再使用keil,个人更喜欢gcc。重置后执行的代码地址取自向量表的4-7字节(称为重置向量) 在gcc风格的链接器脚本中,
ENTRY
指令很重要,而不是内存节定义
您可以将条目更改为地址值或符号。比如说
ENTRY(My\u Startup\u函数)
或由CubeMXENTRY(Reset\u处理程序)生成的标准链接器脚本中的内容
在keil,我记得你有两个选择:
命令行
--entry=位置
其中位置可以是地址或符号
有关根区域和入口点的详细信息。我不再使用keil,我个人更喜欢gcc