首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自特定NOR块的STM32引导

来自特定NOR块的STM32引导
EN

Stack Overflow用户
提问于 2018-08-22 08:59:09
回答 1查看 291关注 0票数 0

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

在我的Keil uVision5项目中,我使用第7块(0x080E0000)作为引导代码(我验证使用STM32 ST链接实用工具(引导代码实际上位于第7块),我使用该工具非常容易地使用Keil uVision5接口进行配置,如下所示:

如果我没有弄错,在我的Keil uVision项目(其内存配置显示在上面)中,MCU从第0块(0x08000000)启动,然后立即跳转到第7块(0x080E0000)执行我的代码。如果我错了就告诉我。

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

代码语言:javascript
复制
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
}

你能帮我用uVision5文件模仿Keil mem.ld的相同行为吗?我在mem.ld配置中做了什么错误?正确的配置应该是什么?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-22 10:32:44

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

在gcc风格的链接器脚本中,ENTRY指令很重要,而不是内存部分的定义。

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

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

在keil中,正如我所记得的,您有两个选项:命令行

--entry=location

位置可以是地址或符号

这里是关于根区域和入口点的更多信息。我不再使用基尔了,我个人更喜欢gcc。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51963221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档