arm地址对齐的总结

static void axi_azx_writeb(u8 value, u8 __iomem *addr)

{

u32 data;

u32 offset;

offset = (u64)addr & 0x03; // 编译器不允许地址做& 操作时要强转为数据

addr = (u8 __iomem *)((u64)addr & 0xFFFFFFFFFFFFFFFC); // __iomem是个64位的地址 u8表示从这个地址取8位的数据(编译器是这么解释的)

data = readl(addr); //readl会把读到的数据强转为32位

//根据偏移写数据

data &= ~(0xFF << offset * BYTE_BIT_WIDTH);

data |= (value << offset * BYTE_BIT_WIDTH);

writel(data, addr);

}

地址对齐是规定(这个对齐不是c语言结构体的对齐) arm x86都需要,只不过看硬件来做还是软件来做,硬件做成本大一些

arm手册说指令对齐 实际上就是指令的地址对齐,如果硬件不对齐,软件也不做,cpu执行指令就会错

编译器会把单个变量做地址对齐

寄存器读写一般都是32位数据操作,小于32位(单、双字节对齐)的话都是先读写32

C语言定义一个变量int c 编译器会4字节对齐 如果定义8字节的变量就8字节对齐

相关推荐
紫金修道7 小时前
【Linux】在Arm服务器源码编译onnxruntime-gpu的whl
linux·服务器·arm开发
前进的程序员1 天前
ARM 芯片上移植 Ubuntu 操作系统详细步骤
linux·arm开发·ubuntu
楚灵魈1 天前
[Linux]从零开始的STM32MP157 Busybox根文件系统构建
linux·arm开发·stm32
sword devil9002 天前
stm32实战项目:无刷驱动
arm开发·stm32·单片机·嵌入式硬件
CN.LG2 天前
tmpfs和普通文件系统相比有哪些优缺点
arm开发
Jia ming2 天前
Linux 内核对 ARM 大小核架构的支持
linux·arm开发·架构
JANYI20183 天前
GCC编译器安装详细说明(举例arm-2013q3)
arm开发
Tassel_YUE3 天前
VMware Fusion安装win11 arm;使用Mac远程连接到Win
arm开发·macos
家庭云计算专家4 天前
onlyoffice 源码调试指南-ARM和x86双模式安装支持
arm开发·docker·容器·云计算
wang09074 天前
网络协议之DHCP和PXE分析
网络·arm开发·网络协议