【发布时间】:2015-02-14 04:27:36
【问题描述】:
我经常像这样写入内存映射的 I/O 引脚
P3OUT |= BIT1;
我假设 P3OUT 被我的预处理器替换为类似的东西:
*((unsigned short *) 0x0222u)
但我今天挖了一个 H 文件并看到了以下内容:
volatile unsigned short P3OUT @ 0x0222u;
在此之前还有一些扩展正在进行,但通常是这样。正在使用符号“@”。除此之外,还有一些关于使用 C 语言扩展集的#pragma。我假设这是对链接器的某种指令,并且实际上一个符号被定义为位于内存映射中的那个位置。
对于大多数编译器大多数发生的事情,我的假设是否正确?一种方式或另一种方式重要吗? @ 符号是从哪里来的,是某种标准吗?
我正在使用 IAR Embedded 工作台。
这个问题和这个问题类似:How to place a variable at a given absolute address in memory (with GCC)。 它符合我认为我的编译器正在做的事情。
【问题讨论】:
-
这个 IAR appnote supp.iar.com/Support/?note=36121 中提到了它,但如果它不是便携式的,我一般不想使用它。
标签: c macros c-preprocessor c99