0

我正在尝试移植 Arduino 以太网库以libmapleSTM32设备一起使用。编译时(使用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);
}
4

2 回答 2

4

您的指针类型是 32 位的,因此当您尝试将其分配给 16 位时,它会丢失数据。

于 2011-12-02T23:56:23.557 回答
0

改成src_mask = (uint16_t)src & RMASK;也会src_mask = (0xffff & src) & RMASK;满足你的需求。只需根据需要丢弃更高的 16 位。

于 2011-12-03T00:05:25.540 回答