关于指针算术运算强制转换类型的思考

指针算术运算

static inline void ft_qspi_write(PhytiumQspiCtrl *qspi_ctrl, int offset, u32 value)
{
	writel(value, (void *)((u8 *)qspi_ctrl->reg_base + offset));
}

其中强转为u8*目的是为了使得offset每次偏移1字节

因为指针运算的时候是根据地址指向的数据类型为单位

比如0x10000地址指向uint32_t: (uint32_t *) (0x10000)是reg_base

那么offset假如为4,那么reg_base+offset就变成了0x10000 + (4 * 4)

但是如果让0x10000指向uint8_t: (uint8_t *)(0x10000)是reg_base

那么offset假如为4,那么reg_base + offset 就变成了0x10000 + (4 * 1)

因为指针计算的公式是 **reg_base + (offset * sizeof(指针指向的类型)) **

posted @ 2026-01-28 14:42  太菜不摆  阅读(13)  评论(0)    收藏  举报