CRC16 - как считать нетабличным способом?

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем ИгорьК, 26 сен 2018.

Метки:
  1. ИгорьК

    ИгорьК Давно здесь

    Люди! Сабж. Желательно на JS. На С тоже годится. Поделится тайным знанием кто?
     
    Последнее редактирование: 26 сен 2018
  2. Radius

    Radius Гик

    Не табличным методом будет очень долго. Нужно реализовать 16-и разрядный сдвиговый регистр с обратными связями.
     
    ИгорьК нравится это.
  3. ИгорьК

    ИгорьК Давно здесь

    Эхххххх.... :-(
     
  4. ИгорьК

    ИгорьК Давно здесь

    Хотя, на 32-разрядном МК что мешает?
     
  5. Пушной звер

    Пушной звер Оракул

    сейчас дядя Витя придет и все покажет )

    мне тоже интересно как их вычисляют.
     
  6. ИгорьК

    ИгорьК Давно здесь

  7. Mitrandir

    Mitrandir Гуру

    По идее и на 8мибитном можно вычислить
     
  8. ИгорьК

    ИгорьК Давно здесь

  9. parovoZZ

    parovoZZ Гуру

    а чем табличное не угодило? Я думаю, что раз такая метода популярна, то популярна она не спроста.
     
  10. Radius

    Radius Гик

    Так это и есть табличный способ.
     
  11. ИгорьК

    ИгорьК Давно здесь

    Ну да.
    Вот прямой: https://gist.github.com/946745
     
  12. ИгорьК

    ИгорьК Давно здесь

    А вот оно, на Lua:
    Код (Lua):
    do
    function process_crc(aData)
        local crc = 0xFFFF

        for i = 1, #aData do
            crc = bit.bxor(crc, string.byte(aData, i))
            for j = 0, 7 do
                if bit.band(crc, 1) > 0 then
                    crc = bit.rshift(crc, 1)
                    crc = bit.bxor(crc, 0xA001)
                else
                    crc = bit.rshift(crc, 1)
                end
            end
        end
        return crc
    end
    a = '\001\006\000\001\008\252'
    print(string.format('%X',process_crc(a)))
    end
    Источник: https://github.com/Sergey-SRG/modbus-gate

    Ай, хорошооооо!
    Проверено здесь и здесь.
     
    Mitrandir нравится это.
  13. ИгорьК

    ИгорьК Давно здесь

    Кстати, заказал PZEM-016. Будем пробовать.
     
  14. Daniil

    Daniil Гик

    На всякий случай выложу crc32
    0.jpg 353.jpg 354.jpg 355.jpg 356.jpg
     
    Mitrandir и parovoZZ нравится это.