硬汉嵌入式论坛

 找回密码
 立即注册
查看: 434|回复: 2
收起左侧

[有问必答] 紧急求助,各位大佬

[复制链接]
回帖奖励 8 个金币 回复本帖可获得 2 个金币奖励! 每人限 1 次

2

主题

5

回帖

11

积分

新手上路

积分
11
发表于 2025-11-30 21:16:46 | 显示全部楼层 |阅读模式
/* 设置未初始化变量 */
#if defined (__ICCARM__)  /* IAR */

#pragma location = ".NoInit"  
uint32_t g_JumpInit;

#elif defined(__CC_ARM)   /* MDK AC5 */

uint32_t g_JumpInit __attribute__((at(0x20000000), zero_init));

#elif  (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) /* MDK AC6 */

uint32_t g_JumpInit __attribute__( ( section( ".bss.NoInit")));

#elif  defined(__GNUC__)      /* GCC */

__attribute__((section( ".NoInit"))) uint32_t g_JumpInit;

#endif




使用这个进行定义bootloader和app共用变量时,编译器报错ota\ota.axf: Error: L6971E: stm32f4xx_hal.o(.data) type RW incompatible with main.o(.ARM.__AT_0x20000000) type ZI in er RW_IRAM1.

使用的是Keil的AC5版本编译器



回复

使用道具 举报

6

主题

162

回帖

180

积分

初级会员

积分
180
发表于 2025-11-30 23:37:02 | 显示全部楼层

回帖奖励 +2 个金币

RAM 起始地址处一般存放 RW 变量,而后为 ZI 变量,你将自定义变量 g_JumpInit 直接分配到 0x20000000,和编译器分配的区间重叠了。

解决方案:

1)如果并不要求放在 RAM 起始地址处,直接省略 __attribute__ 指令即可;

2)如果要求放在 RAM 起始地址处,在魔术棒中将主 RAM 区配置为自 0x20000004 起始即可避免重叠(或者直接编辑 .sct 文件)。

回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2025-12-3 15:01:58 | 显示全部楼层
Penguins 发表于 2025-11-30 23:37
RAM 起始地址处一般存放 RW 变量,而后为 ZI 变量,你将自定义变量 g_JumpInit 直接分配到 0x20000000,和 ...

感谢感谢,已经解决了,把ram的使用地址换了就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-1-10 17:18 , Processed in 0.055557 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表