This question already has answers here:
How to define a macro describing a memory location? [closed]
                                
                                    (2个答案)
                                
                        
                                3年前关闭。
            
                    
假设IO部分是内存映射到地址0x32的指令

#define portx 0x32


如何通过将值存储到相应的寄存器来构造写入端口的C语言宏?

最佳答案

如果必须使用宏,通常情况如下:

#define WRITE_PORT(port, val) *((volatile uint8_t *)(port)) = (val)


然后您可以像这样调用它

WRITE_PORT(portx, 0xff);  // write 0xff to portx


请注意,这假定使用8位端口。

还要注意使用volatile,以防止编译器对I / O读/写进行优化。

08-16 21:01