我正在尝试将Arduino以太网库移植到libmaple
,以便与STM32设备一起使用。编译时(使用CodeSourcery GCC工具链)。我得到了
libraries/Ethernet/w5100.cpp:111: error: cast from 'uint8_t*' to 'uint16_t' loses precision
围绕代码段:
void W5100Class::read_data(SOCKET s, uint8_t *src, uint8_t *dst, uint16_t len)
{
uint16_t size;
uint16_t src_ptr;
src_mask = (uint16_t)src & RMASK;
src_ptr = RBASE[s] + src_mask;
if( (src_mask + len) > RSIZE )
{
size = RSIZE - src_mask;
read(src_ptr, (uint8_t *)dst, size);
dst += size;
read(RBASE[s], (uint8_t *) dst, len - size);
}
else
read(src_ptr, (uint8_t *) dst, len);
}
答案 0 :(得分:4)
您的指针类型是32位,因此当您尝试将其指定为16位时,它会丢失数据。
答案 1 :(得分:0)
将src_mask = (uint16_t)src & RMASK;
更改为src_mask = (0xffff & src) & RMASK;
也符合您的要求。只需丢弃更高的16位。