假设我在内存中映射了两个地址:
#define MY_REGISTER_1 (*(volatile uint8_t *)(0x1B))
#define MY_REGISTER_2 (*(volatile uint8_t *)(0x18))
我想创建一个在一个寄存器中设置位的函数,如下所示:
set_bit_low(MY_REGISTER_1, 3);
如下声明我的函数是否正确?
void set_bit_low(uint8_t, uint8_t);
让我们从您的定义开始:
#define MY_REGISTER_1 (*(volatile uint8_t *)(0x1B))
取消引用地址 0x1b
处的八位组,因此它表示内存映射寄存器的内容,而不是它的位置。最好有一个包含寄存器位置的宏:
#define REGISTER_1 ((volatile uint8_t *) (0x1B)) /* Substitute _1 for some meaningful name */
然后你可以随意取消引用,你可以声明你的函数如下:
void set_bit_low(volatile uint8_t *register, uint8_t bitpos);
/* Use like this: */
set_bit_low(REGISTER_1, 3);
我是一名优秀的程序员,十分优秀!