Mam pewien projekt, do którego firmware jest budowany w wielu krokach (w Makefile) z wielu różnych plików. Po drodze powstaje plik .bin, który jednak nie jest produktem końcowym - docelowo binarka trafia na kartę pamięci, skąd jest ładowana do RAM-u i wykonywana. W sofcie jest zaimplementowana procedura liczenia sumy kontrolnej (CRC16) z tej części pamięci, w której jest przechowywany kod wykonywalny. Na chwilę obecną mogę dzięki temu upewnić się, że kod z każdym razem jest ładowany w powtarzalny sposób - to jednak nie daje mi pewności, że nie ma błedów, bo muszę jeszcze porównać sumę z obrazem generowanym na PC.
Potrzebuję więc jakiegoś narzędzia, które pozwoli mi w sposób automatyczny (pod Linuksem, wewnątrz Makefile) wykonać następujący ciąg operacji.
- Bierzemy fragment pliku bin - od określonego adresu i o określonej długości.
- Liczymy z niego sumę kontrolną CRC16.
- Wyświetlamy wynik
- Zapisujemy wynik w tym samym pliku bin, pod określonym adresem (to w przyszłości pozwoli mi zatrzymać wykonywanie programu, jeśli po jego załadowaniu okaże się, że suma się nie zgadza).
Projekt jest retro, na antycznym CPU - stąd zastosowanie CRC16. Konkretnie korzystam z procedury crc16_arc_f opisanej na tej stronie: