如何将二进制转换为十六进制并将值写入特定地址?

How can I convert binary to hex and write the value at a certain address?

我有以下几行代码:

u8 SW = Xil_In8(XPAR_AXI_GPIO_0_BASEADDR);


Xil_Out32(XPAR_AXI4STREAM_TPG_0_S00_AXI_BASEADDR, 0x00000020 + SW);

我在这里做的是从地址 XPAR_AXI_GPIO_0_BASEADDR 读取并将值存储在 SW 中。我的相关数据只存储在最后4位。

我想完成的是以这种方式在另一个地址 (XPAR_AXI4STREAM_TPG_0_S00_AXI_BASEADDR) 写入,如值 0x00000020 最后一个字节(现在为 0)始终包含当前SW 的值。好吧,它的最后 4 位。所以基本上有这样的东西 0x0000002SW。如何做到这一点,以便即使 SW 的值发生变化,0x00000020 的最后一个字节始终包含 SW 的当前值(最后 4 位)而不是 0。我必须执行哪些转换?

提前感谢您的帮助!

u8 SW = Xil_In8(XPAR_AXI_GPIO_0_BASEADDR);
u8 last_4_bits = SW & 0xf //gets you the last 4 bits
Xil_Out32(XPAR_AXI4STREAM_TPG_0_S00_AXI_BASEADDR, 0x00000020 | last_4_bits); //OR'ing sets those 4 bits

一行即可完成。

Xil_Out32(XPAR_AXI4STREAM_TPG_0_S00_AXI_BASEADDR, 0x00000020 | (SW & 0xf));

我将把它留给您作为理解按位数学运算的练习。如果你在一张纸上写下这些位并进行数学计算,事情就会容易得多。如果您是新手,请不要在脑海中这样做。