Tag: 编译器构建

嵌入式C:注册访问

假设我们要写地址为0xc000 ,我们可以在C中定义一个宏: #define LCDCW1_ADDR 0xc000 #define READ_LCDCW1() (*(volatile uint32_t *)LCDCW1_ADDR) #define WRITE_LCDCW1(val) ((*(volatile uint32_t *)LCDCW1_ADDR) = (val)) 我的问题是,当使用任何微控制器时,请考虑一个示例MSP430,P1OUT寄存器地址为0x0021。 但是当我们使用P1OUT = 0xFFFF时; //它为P1OUT赋值0xFFFF。 我的问题是它是如何写入该地址的,例如在这种情况下为0x0021。 IDE是IAR。 我在头文件msp430g2553.h中找到了以下定义: #define P1OUT_ (0x0021u) /* Port 1 Output */ DEFC( P1OUT , P1OUT_) 我想它是定义地址,但其他宏写入或读取的位置。 任何人都可以解释P1OUT如何在该特定地址位置写入的流程? 另外请告诉我你在0x0021u中的含义是什么? 谢谢 到目前为止,我发现的细节是: 在msp430g2553.h中 #ifdef __IAR_SYSTEMS_ICC__ #include “in430.h” #pragma language=extended #define DEFC(name, address) __no_init volatile unsigned […]

是否可以将整个数组保存在cpu寄存器中

在下面的代码中, int main( ) { register int arr[4]; /* … */ } 是否有可能在某些cpu寄存器中分配’arr’。 (考虑cpu有4个或更多寄存器)。 或者编译器会忽略数组的寄存器存储类。