硬汉嵌入式论坛

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

[MDK] MDK5.43 AC6 Ofast优化下,const局部变量占用的RAM空间

[复制链接]

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
发表于 2025-12-30 01:36:30 | 显示全部楼层 |阅读模式



局部变量会占用RAM空间,这个问题防不胜防。改成静态局部变量,或者放在函数外做全局变量后正常了。

const uint8_t mac_def[6] = { 2, 0, 0, 0, 0, 0 };


1234.png
回复

使用道具 举报

92

主题

596

回帖

872

积分

金牌会员

积分
872
发表于 2025-12-30 06:28:21 来自手机 | 显示全部楼层
加const 怎么还会是分配ram啊
回复

使用道具 举报

92

主题

596

回帖

872

积分

金牌会员

积分
872
发表于 2025-12-30 06:28:47 来自手机 | 显示全部楼层
51里const是在flash里
回复

使用道具 举报

0

主题

306

回帖

306

积分

高级会员

积分
306
发表于 2025-12-30 08:45:05 | 显示全部楼层
tangqianfeng 发表于 2025-12-30 06:28
加const 怎么还会是分配ram啊

后面的代码加了强制类型转换。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
 楼主| 发表于 2025-12-30 10:36:48 | 显示全部楼层
tangqianfeng 发表于 2025-12-30 06:28
加const 怎么还会是分配ram啊

AC6得注意这个问题,是个坑
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
 楼主| 发表于 2025-12-30 10:41:06 | 显示全部楼层
regbbs 发表于 2025-12-30 08:45
后面的代码加了强制类型转换。

一样的,改成不强制转换也会放到RAM

  const uint8_t mac_def[6] = { 2, 0, 0, 0, 0, 0 };
  
  printf("mac_def address = %p\r(n", mac_def);

  heth.Instance = ETH;
  heth.Init.TxDesc         = DMATxDscrTab;
  heth.Init.RxDesc         = DMARxDscrTab;
  heth.Init.RxBuffLen      = ETH_MAX_PACKET_SIZE;
  heth.Init.MACAddr        = mac_def;
  heth.Init.MediaInterface =  HAL_ETH_RMII_MODE;
-------------------
[Rx] mac_def address = 24029588
回复

使用道具 举报

4

主题

130

回帖

147

积分

初级会员

积分
147
发表于 2025-12-30 12:00:56 | 显示全部楼层
正确的做法是使用 static 修饰该数组

6406462e-12b0-40eb-9b5a-e623cc0445d8.png

评分

参与人数 1金币 +20 收起 理由
KK-1 + 20

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
 楼主| 发表于 2025-12-30 13:12:19 | 显示全部楼层
Dinor 发表于 2025-12-30 12:00
正确的做法是使用 static 修饰该数组

是的,加static,或者全局变量也可以
回复

使用道具 举报

4

主题

1481

回帖

1493

积分

至尊会员

积分
1493
发表于 2025-12-30 14:12:24 | 显示全部楼层
回复

使用道具 举报

92

主题

596

回帖

872

积分

金牌会员

积分
872
发表于 2025-12-30 16:55:54 来自手机 | 显示全部楼层
局部变量是栈内分配的,所以是在ram内
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
 楼主| 发表于 2025-12-30 19:57:28 | 显示全部楼层
最终总结

MDK AC5,AC6,GCC以及IAR在const局部变量存储位置的异同
https://forum.anfulai.cn/forum.p ... 0641&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-9 16:50 , Processed in 0.060924 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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