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字节对齐

相关推荐
神秘_博士2 小时前
自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone
arm开发·python·物联网·flutter·docker·gitee
文军的烹饪实验室10 小时前
我国有哪些芯片使用的是arm架构处理器
arm开发·架构
燎原星火*2 天前
arm 入坑笔记
arm开发
勿忘初心912 天前
Android车机DIY开发之软件篇(十六)编译forlinx i.mx8mplus Android
android·arm开发·经验分享·嵌入式硬件
Emtronix英创3 天前
Windows 10 ARM工控主板CAN总线实时性能测试
arm开发·windows·iot
jiuri_12154 天前
QEMU 搭建arm linux开发环境
linux·arm开发·qemu
钡铼技术物联网关4 天前
如何通过5G和边缘计算提升工业远程运维效能?
大数据·linux·arm开发·人工智能·python·自动化
慕雪华年5 天前
【SLAM】在 ubuntu 18.04 arm 中以ROS环境编译与运行ORB_SLAM3
linux·arm开发·ubuntu
慕雪华年5 天前
【Linux】在 ubuntu 18.04 arm 容器中安装ROS环境
linux·arm开发·ubuntu
7yewh5 天前
嵌入式知识点总结 网络编程 专题提升(一)-TCP/UDP
网络·arm开发·驱动开发·物联网·网络协议·tcp/ip·udp