打印
[STM32L4]

如何为静态常量变量分配一个特定的地址?

[复制链接]
624|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在MXCubeIDE中开发STM32L412设备,在Flash中创建数组,将其初始化为静态常量。而且不想将其初始化为零。从本质上讲,我希望能够使用STM32CubeProgrammer更改闪存中的值,这样我就可以在不更改其余代码操作的情况下更改代码的这一部分。
例如,我想把这个4字节数组赋给内存位置0x08010000。
static const uint8_t flash_array[4] ={        0x01, 0x02, 0x03, 0x04};
如果我直接编译,可以看到它被放置在其他地方,因为我没有指定所需的位置,使用STM32 CubeProgrammer在该位置能够看到。假设有一种方法能够分配内存位置。
记下位置并在事后更改它,,我希望对变量有更多的有用户控制控制。
是否有这样的方法呢

使用特权

评论回复
沙发
wwppd| | 2025-7-2 11:41 | 只看该作者
提供了 #pragma 指令来指定变量的存储地址。

使用特权

评论回复
板凳
dspmana| | 2025-7-2 13:09 | 只看该作者
使用指针来手动分配和访问特定地址的变量。

使用特权

评论回复
地板
kkzz| | 2025-7-3 19:34 | 只看该作者
硬件寄存器映射              

使用特权

评论回复
5
fengm| | 2025-7-3 20:25 | 只看该作者
使用volatile防止编译器优化

使用特权

评论回复
6
plsbackup| | 2025-7-4 11:13 | 只看该作者
通过宏封装地址访问              

使用特权

评论回复
7
jimmhu| | 2025-7-4 16:03 | 只看该作者
可以使用指针和初始化来实现。              

使用特权

评论回复
8
albertaabbot| | 2025-7-6 16:43 | 只看该作者
const变量              

使用特权

评论回复
9
macpherson| | 2025-7-7 12:56 | 只看该作者
__attribute__((at(address))) 属性来指定变量的存储地址

使用特权

评论回复
10
fengm| | 2025-7-7 13:52 | 只看该作者
C代码中声明变量位置              

使用特权

评论回复
11
elsaflower| | 2025-7-7 15:25 | 只看该作者
将常量变量放入Flash特定区域

使用特权

评论回复
12
wengh2016| | 2025-7-7 16:00 | 只看该作者
对硬件寄存器必须使用volatile,防止编译器优化掉“看似无用”的访问。

使用特权

评论回复
13
pixhw| | 2025-7-12 14:52 | 只看该作者
可以使用链接器脚本来指定变量的存储位置。

使用特权

评论回复
14
alvpeg| | 2025-7-12 17:38 | 只看该作者
直接使用指针或volatile(如寄存器访问)

使用特权

评论回复
15
rosemoore| | 2025-7-12 19:31 | 只看该作者
// C代码(Keil)
__attribute__((at(0x20001000))) static uint8_t system_state = 0x00;

使用特权

评论回复
16
houjiakai| | 2025-7-12 20:02 | 只看该作者
GCC编译器,可以使用 __attribute__((at(address))) 来指定变量的存储地址。

使用特权

评论回复
17
earlmax| | 2025-7-12 21:04 | 只看该作者
通过指针直接赋值              

使用特权

评论回复
18
phoenixwhite| | 2025-7-18 11:26 | 只看该作者
volatile指针              

使用特权

评论回复
19
nomomy| | 2025-7-18 12:24 | 只看该作者
配置信息需要存储在特定 Flash 地址

使用特权

评论回复
20
mollylawrence| | 2025-7-18 14:34 | 只看该作者
对于更复杂的地址分配,可以使用链接脚本来指定变量的存储位置。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

32

帖子

0

粉丝