在为STM32编译时,“从'uint8_t *'转换为'uint16_t'会失去精度”

时间:2011-12-02 23:55:02

标签: c++ casting arduino stm32

我正在尝试将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);
}

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

src_mask = (uint16_t)src & RMASK;更改为src_mask = (0xffff & src) & RMASK;也符合您的要求。只需丢弃更高的16位。