我正在使用一个128kB的普通内存和64kB的核心耦合内存(CCM)的STM32F407VG。我使用的是一个GCC工具链(SW4STM32)。在我的链接器脚本中,我对CCM进行了如下配置:
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
CCM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
}
SECTIONS
{
...
.ccram :
{
*(.ccram)
*(.ccram*)
} >CCM
...当我将任何变量放入.ccram部分时,我会得到一个ELF文件,该文件似乎告诉ST-Link它必须将内存刷新到0x10000000。当然,这是失败的,并告诉我
"Warn : no flash bank found for address 10000000"。
当我从ELF文件创建一个HEX文件时,我发现0x10000000处有一个零块。当我从HEX文件中删除这个块时,我可以成功地刷新HEX文件(使用ST-Link Utility),并且我的代码可以在目标系统上完美运行。
那么,我如何告诉链接器(或任何人) CCM区域不应标记为闪存?
发布于 2018-08-16 22:42:39
我认为你需要用>CCM AT> FLASH取代>CCM
这应该告诉它从闪存中获取初始值
发布于 2018-08-17 13:43:31
我得到了解决方案:
将"(NOLOAD)“添加到该节的描述中:
.ccram (NOLOAD):
{
*(.ccram)
*(.ccram*)
} >CCMhttps://stackoverflow.com/questions/51877550
复制相似问题