我的牙白 发表于 2025-8-2 21:51

将常量数据固定在Flash中的固定地址

将常量数据固定在Flash中的固定地址
关于STM32F103数据定位的问题,将数据固定在Flash中。我想将一些主应用程序参数放置在Flash的固定位置,以便我的引导程序能够了解已安装的应用程序。目前取得了一些进展。

在STM32CubeIDE中,我在主应用程序代码(main.c)中添加了以下内容:
uint32_t const Version__attribute__((section(".AppInfo"))) = 0x12345678UL;
uint32_t const Features __attribute__((section(".AppInfo"))) = 0xDEADC0DEUL;
在链接脚本(.ld文件)中,我在.isr_vector (0x08002000)和.text之间添加了以下内容:
.AppInfo 0X08003000 :
{
    . = ALIGN(4);
    KEEP(*(.AppInfo))
    . = ALIGN(4);
} >FLASH
检查了.map文件确认这种方式是有效的,但在向量表和AppInfo之间会出现一个巨大的Flash空间空洞,然后.text段才开始。

有没有办法让链接器将这个数据混合到.text区域中?我希望能够控制AppInfo的位置,或者我是否应该直接选择ISR向量表之后的下一个边界

hudi008 发表于 2025-8-4 12:43

使用 __attribute__((at(address))) 将常量数据放置在指定的地址。

robertesth 发表于 2025-8-4 13:51

绝对地址定位            

内政奇才 发表于 2025-8-4 14:57

用AT>语法

flycamelaaa 发表于 2025-8-4 15:58

若数据量较小,可直接将其合并到.text段,通过符号标记位置

powerantone 发表于 2025-8-4 16:59

若允许灵活位置可将.AppInfo紧接向量表后,通过符号或相对偏移访问。

biechedan 发表于 2025-8-4 17:30

通过编译器指令或链接脚本,可以将常量数据固定在STM32 Flash的指定地址。

kkzz 发表于 2025-8-4 19:26

修改Flash中的数据需要先擦除整页,可能导致其他数据丢失

updownq 发表于 2025-8-5 08:52

修改 .ld 文件,添加自定义段并指定其起始地址

fengm 发表于 2025-8-5 09:54

当需要将少量数据精确放置在特定地址时,可直接通过 __attribute__((at())) 实现

timfordlare 发表于 2025-8-5 10:50

/* 定义新的Flash区域 */
FLASH_DATA (rx) : ORIGIN = 0x08010000, LENGTH = 0x1000

SECTIONS
{
    /* 将特定节区放入新定义的Flash区域 */
    .my_data :
    {
      KEEP(*(.my_data))
    } > FLASH_DATA
}

biechedan 发表于 2025-8-5 11:42

在需要将一些配置数据或校验和等重要信息存储在特定位置

minzisc 发表于 2025-8-5 14:17

在链接脚本中定义该节的地址和大小。

albertaabbot 发表于 2025-8-5 15:57

编译后生成的.map文件会显示变量的实际地址

dspmana 发表于 2025-8-7 11:12

指定的地址不会与其他数据或代码发生冲突。

mnynt121 发表于 2025-8-7 14:16

const uint8_t data[] __attribute__((at(0x08010000))) = {...};将数据存储在地址0x08010000处

primojones 发表于 2025-8-8 11:38

.ld 文件中将 Flash 划分为多个区域

robertesth 发表于 2025-8-8 15:40

   static const uint8_t s_acBmp**030 __attribute__((at(0X800F000))) = {0x80, 0xC0, 0xC0, 0xC0, 0xC0...};
   

mollylawrence 发表于 2025-8-10 20:35

Flash的读写操作通常需要按字(4字节)或半字(2字节)对齐。

mmbs 发表于 2025-8-10 21:19

通过链接脚本定位数据            
页: [1] 2
查看完整版本: 将常量数据固定在Flash中的固定地址