在执行LDRD指令前,确保指令的地址为双字对齐地址,并将目标寄存器的地址+4,以确保写入的数据不会跨过寄存器的边界。以下为示例代码:
uint32_t* ptr = (uint32_t*)0x20000100; // LDRD指令的地址为0x20000100
if(((uint32_t)ptr & 0x2) == 0) { // 仅当地址为双字对齐地址时执行LDRD指令
ptr++;
}
uint32_t data1, data2;
__asm volatile("LDRD %0, %1, [%2]" : "=r"(data1), "=r"(data2) : "r"(ptr) );