2011-12-02 6 views
0

STM32デバイス用にArduinoイーサネットライブラリをlibmapleに移植しようとしています。コンパイル時(CodeSourcery GCCツールチェーンを使用)私は、コードセグメントの周り "STM32用にコンパイルすると 'uint8_t *'から 'uint16_t'へのキャストが精度が失われる

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ビットを破棄してください。

関連する問題