阿当 发表于 2024-9-21 16:26:27

谁能详说一下(u8)((u16)&DmaTxBuffer >> 8);这一段

u8 xdata DmaTxBuffer;

DMA_I2CT_TXAH = (u8)((u16)&DmaTxBuffer >> 8);      //I2C发送数据存储地址
      DMA_I2CT_TXAL = (u8)((u16)&DmaTxBuffer);




谁能详说一下(u8)((u16)&DmaTxBuffer >> 8);这一段。

王昱顺 发表于 2024-9-21 16:53:52

(u8)((u16)&DmaTxBuffer >> 8)
从里面开始解释,首先是&DmaTxBuffer为取地址操作,(u16)为强制转换无符号16位数据。防止被系统转成8位数据,而在后面的>>8中清零。
>>8是为了取到高8位,最前面的(u8)则是重新将数据强制转换成无符号8位数据

阿当 发表于 2024-9-21 17:35:12

本帖最后由 阿当 于 2024-9-21 17:37 编辑

王昱顺 发表于 2024-9-21 16:53
(u8)((u16)&DmaTxBuffer >> 8)
从里面开始解释,首先是&DmaTxBuffer为取地址操作,(u16)为强制转换无符号16 ...
秒懂了,因为32G的DMA最大传输为U16,而这里IIC用不了那么大,所以把低8位数据清除只用到高8位, 没有系统学习过C语言就是老火,自学的{:cry:}
页: [1]
查看完整版本: 谁能详说一下(u8)((u16)&DmaTxBuffer >> 8);这一段