"приведение из 'uint8_t *' к 'uint16_t' теряет точность" при компиляции для STM32 - PullRequest
0 голосов
/ 03 декабря 2011

Я пытаюсь перенести библиотеку Arduino Ethernet на libmaple для использования с STM32 устройствами.При компиляции (используя CodeSourcery GCC toolchain).Я получаю

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 ]

4 голосов
/ 03 декабря 2011

Типы указателей 32-разрядные, поэтому при попытке присвоить их 16-разрядным данные теряются.

0 голосов
/ 03 декабря 2011

Изменение src_mask = (uint16_t)src & RMASK; на src_mask = (0xffff & src) & RMASK; также удовлетворит ваши требования. Просто отбросьте старшие 16 бит, как хотите.

...