2011-12-02 62 views
0

我正試圖將用於STM32設備的Arduino以太網庫移植到libmaple。編譯時(使用GCC工具鏈CodeSourcery)。我得到「從'uint8_t *'投射到'uint16_t'在編譯STM32時失去精度」

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

你的指針類型是32位的,所以當你嘗試分配到16位,這是丟失數據。

+0

這使得,謝謝。 – baobrien

0

更改src_mask = (uint16_t)src & RMASK;src_mask = (0xffff & src) & RMASK;也會滿足您的需求。只要你願意丟棄更高的16位。