硬汉嵌入式论坛

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

[技术讨论] 单片机中的宏定义是没有地址

[复制链接]

7

主题

146

回帖

167

积分

初级会员

积分
167
发表于 2024-6-7 10:50:16 | 显示全部楼层 |阅读模式
#define   LEN    60

#define  ID_S   0X1203

像程序中这样定义的宏,想要在AXF文件或是调试时候都是没法找到具体地址的。只是统一放在常数变量后面(RO 段)
像全局变量或是常数变量都是有地址的,
程序运行时候是怎么知道自己要的宏就是自己要的数据。。
回复

使用道具 举报

6

主题

268

回帖

286

积分

高级会员

积分
286
发表于 2024-6-7 12:55:42 | 显示全部楼层
宏是直接替换,
回复

使用道具 举报

7

主题

146

回帖

167

积分

初级会员

积分
167
 楼主| 发表于 2024-6-7 15:06:44 | 显示全部楼层
fxyc87 发表于 2024-6-7 12:55
宏是直接替换,

那没么简单,反编译下大概知道原理了。
回复

使用道具 举报

97

主题

537

回帖

843

积分

金牌会员

积分
843
发表于 2024-9-6 15:34:29 | 显示全部楼层
我的理解是
宏是预编译阶段进行替换的。
编译器无法知道它是宏。

共产主义一定胜利!
回复

使用道具 举报

24

主题

195

回帖

267

积分

高级会员

积分
267
QQ
发表于 2024-9-6 20:50:33 | 显示全部楼层
不是直接替换是啥?🤔
反映到实际下载进ROM的程序就是直接替换,没有宏符号,map中没这个标识。
回复

使用道具 举报

10

主题

111

回帖

141

积分

初级会员

积分
141
发表于 2024-9-7 11:57:57 | 显示全部楼层
曾经一个同事说,宏定义多了(程序中没有用)会占用flash。
回复

使用道具 举报

10

主题

100

回帖

130

积分

初级会员

积分
130
发表于 2024-9-7 18:57:09 | 显示全部楼层
宏定义是编译器干的活,编译后的文件是MCU干的活。。。知道这个就知道咋回事了。。。#define编译器就是看到这个,直接替换定义的值。然后进行编译。。。当然也支持宏定义计算了。都是编译器在干活。。。
回复

使用道具 举报

2

主题

7

回帖

13

积分

新手上路

积分
13
发表于 2024-9-8 01:52:13 来自手机 | 显示全部楼层
就是预编译阶段的替换呀,在常量池里
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 04:49 , Processed in 0.362340 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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