如何更改闪存上的起始地址?
How can I change the start address on flash?
我正在使用 STM32F746ZG 和 FreeRTOS。
flash 的起始地址是 0x08000000。但是我想把它改成0x08040000。我已经通过 google 搜索了这个问题,但没有找到解决方案。
我像下面这样更改了链接描述文件。
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K
/* FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K */
FLASH (rx) : ORIGIN = 0x8040000, LENGTH = 768K
}
如果我只更改它和 运行 调试器,它就会有问题。
如果我将 VECT_TAB_OFFSET 从 0x00 更改为 0x4000,它工作正常。
/* #define VECT_TAB_SRAM */
#define VECT_TAB_OFFSET 0x40000 /* 0x00 */
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
但是如果我不使用调试器,它就没有任何作用。
这意味着它仅在使用 ST-Linker 时有效。
如果您知道解决方案,请告诉我。
提前感谢您的回复。
你需要在FLASH原来的开头放置8个字节。 Stm32 始终从地址 0x00000000 启动,该地址是其中一个存储器的别名(取决于启动引脚和选项)。
第一个字包含堆栈指针,第二个字包含您的重置处理程序。您永远无法访问您的代码,因为它总是从同一地址启动。
您需要修改链接描述文件和定义向量的启动文件
引导地址可以在选项字节中设置。
您可以以16k 的增量设置flash 中的任意地址。选项字节区有两个 16 位寄存器,一个在复位时引导引脚为低电平时使用,另一个在引脚为高电平时使用。写入所需地址右移14位,即除以16384.
要从 0x08040000
启动,请将 0x2010
写入寄存器,如参考手册的 选项字节编程 一章所述。
你也可以写一个bootloader。引导加载程序位于 0x0800 0000 地址并加载您的应用程序固件意味着跳转到它。
这是另一种方法。
我正在使用 STM32F746ZG 和 FreeRTOS。 flash 的起始地址是 0x08000000。但是我想把它改成0x08040000。我已经通过 google 搜索了这个问题,但没有找到解决方案。
我像下面这样更改了链接描述文件。
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K
/* FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K */
FLASH (rx) : ORIGIN = 0x8040000, LENGTH = 768K
}
如果我只更改它和 运行 调试器,它就会有问题。 如果我将 VECT_TAB_OFFSET 从 0x00 更改为 0x4000,它工作正常。
/* #define VECT_TAB_SRAM */
#define VECT_TAB_OFFSET 0x40000 /* 0x00 */
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
但是如果我不使用调试器,它就没有任何作用。 这意味着它仅在使用 ST-Linker 时有效。
如果您知道解决方案,请告诉我。 提前感谢您的回复。
你需要在FLASH原来的开头放置8个字节。 Stm32 始终从地址 0x00000000 启动,该地址是其中一个存储器的别名(取决于启动引脚和选项)。
第一个字包含堆栈指针,第二个字包含您的重置处理程序。您永远无法访问您的代码,因为它总是从同一地址启动。
您需要修改链接描述文件和定义向量的启动文件
引导地址可以在选项字节中设置。
您可以以16k 的增量设置flash 中的任意地址。选项字节区有两个 16 位寄存器,一个在复位时引导引脚为低电平时使用,另一个在引脚为高电平时使用。写入所需地址右移14位,即除以16384.
要从 0x08040000
启动,请将 0x2010
写入寄存器,如参考手册的 选项字节编程 一章所述。
你也可以写一个bootloader。引导加载程序位于 0x0800 0000 地址并加载您的应用程序固件意味着跳转到它。
这是另一种方法。