【发布时间】:2010-03-10 13:32:10
【问题描述】:
我正在为没有内存保护的嵌入式系统编写系统级代码(在 ARM Cortex-M1 上,使用 gcc 4.3 编译)并且需要直接读取/写入内存映射寄存器。到目前为止,我的代码如下所示:
#define UART0 0x4000C000
#define UART0CTL (UART0 + 0x30)
volatile unsigned int *p;
p = UART0CTL;
*p &= ~1;
有没有不使用指针的更短的方法(我的意思是代码更短)?我正在寻找一种方法来编写如此短的实际分配代码(如果我不得不使用更多#defines 就可以了):
*(UART0CTL) &= ~1;
到目前为止,我尝试的任何事情都以 gcc 抱怨它无法将某些东西分配给左值...
【问题讨论】:
-
#define UART0CT到#define X? -
@The Machine Charmer:+1,有趣。我不认为 OP 在代码高尔夫时尚中意味着更短,但是,很好。 :-)
-
标准 C 要求在 ordetr 中进行显式转换,以将非零整数分配给指针。您的代码以其当前形式仅在 GCC 中有效,但从迂腐 C 的角度来看是不正确的。因此,无论您是否愿意,如果您真的想将其保留为有效的 C,则必须将其延长。当然,如果您想要特定于 GCC 的解决方案,那就另当别论了。
-
@PratikDeoghare 那...那是搞笑哈哈!
标签: c++ c gcc systems-programming