我有以下几行代码:
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。我必须执行哪些转换?
在此先感谢您的帮助!
答案 0 :(得分: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
我将把它留给您作为练习,以了解按位数学运算。如果您在纸上写下这些位并进行数学运算,会容易得多。如果您不熟悉它,请不要在您的头脑中这样做。