Generowanie sumy kontrolnej z fragmentu pliku bin

Jun 25, 2024 Last reply: 2 years ago 39 Replies

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:

formatting link


Wytniesz przez:

dd if=file.bin bs=1 skip=2 count=3 status=none

Spatchujesz plik przez:

dd bs=1 seek=2 count=3 conv=notrunc of=plik.bin.new status=none

Przykładowo:

$ yes test | head -n10 > file.bin $ hexdump -C file.bin

00000000 74 65 73 74 0a 74 65 73 74 0a 74 65 73 74 0a 74 |test.test.test.t| 00000010 65 73 74 0a 74 65 73 74 0a 74 65 73 74 0a 74 65 |est.test.test.te| 00000020 73 74 0a 74 65 73 74 0a 74 65 73 74 0a 74 65 73 |st.test.test.tes| 00000030 74 0a |t.| 00000032 $ echo "ST" | dd bs=1 seek=2 count=2 conv=notrunc of=file.bin status=none $ hexdump -C file.bin 00000000 74 65 53 54 0a 74 65 73 74 0a 74 65 73 74 0a 74 |teST.test.test.t| 00000010 65 73 74 0a 74 65 73 74 0a 74 65 73 74 0a 74 65 |est.test.test.te| 00000020 73 74 0a 74 65 73 74 0a 74 65 73 74 0a 74 65 73 |st.test.test.tes| 00000030 74 0a |t.| 00000032

Teraz tylko znaleźć program, który zrobi crc16 z linii poleceń -- na szybko nie znalazłem, może się okazać, że będzie trzeba napisać jakiś kawałek kodu w Pythonie albo czymś podobnym.

Jeśli korzystasz z niestandardowej procedury to tym bardziej napisz jakiś mały program. Z drugiej strony, mając program, możesz w zasadzie zrobić całość w nim.

Ja mogę trzepnąć taki programik za parę stówek w C lub w C++ lub w D.

W dniu 25.06.2024 o 18:24, Jacek Marcin Jaworski pisze:

Mogę Ci dorobić podkład muzyczny w C-dur :) za stówkę lub w A-mol, bardziej nostalgiczny :D

Nie no, na spokojnie przeanalizuję sobie co robi ten asemblerowy kod

8080 i spróbuję napisać odpowiednik w C. Po prostu liczyłem na to, że może nie trzeba będzie wyważać otwartych drzwi i któryś z linuksowych kombajnów już to potrafi. :)

W dniu 25.06.2024 o 20:34, Adam pisze:

To dość proste. Przede wszystkim solmizacją i przyjęło się, że tonacja dur jest "wesoła" a tonacja mol bardziej "smutna". W tonacji c-dur nie występują np, półdźwięki a w tonacji a-mol mamy gis w akordzie dla e-dur, czyli trójdźwięk e-gis-h :) bo całkowicie "molowo" byłoby za "smutne" :)

W dniu 26.06.2024 o 10:39, Adam pisze:

Chyba jednak nie. C-E-G brzmi inaczej niż A-C-E. Dodatkowo zależy to też od instrumentu. Na przykład gitara i "riffy/chwyty" w różnych tonacjach brzmią skrajnie różnie.

Tak jest nadal. To "słuch absolutny" i akurat mam taką umiejętność. Nabyłem ją dziedzicznie.

No nie, zmienia się wtedy wysokość dźwięków. Przykładem może być, że większość utworów "techno, rave itd" czyli ten typ muzyki, pisze się w tonacji B...a to tylko dlatego, że częstotliwość tej tonacji jest inaczej/lepiej odbierana przez ogół słuchających...w sensie wytwarzania dopaminy :)

W dniu 2024-06-26 o 10:39, Adam pisze:

Mam słuch muzyczny pierwszego rodzaju - rozróżniam kiedy grają, a kiedy nie. Dla mnie jak najbardziej - wszystkie akordy brzmią jednakowo.

Ale... Syn zdawał dodatkowy egzamin z muzyki do liceum z klasą o profilu muzycznym. Usłyszawszy akord miał określić, czy to jest dur, czy mol więc musi to być słychać. Z tego co opowiadał to pani coś zagrała a on na to że mol w drugim przewrocie. Jako jeden z kilku dostał z tego egzaminu max, ale do szkoły go nie przyjęli :(

Mimo, że w dzieciństwie byłem katowany grą na pianinie to o przewrotach akordów usłyszałem wtedy po raz pierwszy.

O tym, że kiedyś nie było równomiernego temperowania usłyszałem po raz pierwszy jak pianino dla syna było po raz pierwszy strojone. Trafiliśmy (przypadkiem) na stroiciela, który właśnie rozkręcał biznes wynajmowania fortepianów na koncerty a potem do tego stopnia współpracował z Możdżerem, że kupili sobie domy w tej samej wsi. Byłem kiedyś u niego na 'domowym koncercie' Możdżera. Ale przy moim słuchu to jest kompletnie bez znaczenia kto naciska klawisze fortepianu.

Wcześniej myślałem, że odległość między kolejnymi dźwiękami skali od zawsze była taka sama. Przecież to tak prosto wynika z matematyki (stosunek chęstotliwości = 2^(1/12)), że nie rozumiem po co było to komplikować :) . P.G.

W dniu 2024-06-26 o 12:01, LordBluzg®🇵🇱 pisze:

Może już o tym pisałem - zdarzyło mi się (nie tak dawno) rozmawiać z profesorem z akademii muzycznej. On mówił, że widzi dźwięki jako kolory i do pewnego wieku myślał, że wszyscy tak mają. Jak mu w orkiestrze jakieś jedne skrzypce fałszują to wcześniej widzi w tamtym rejonie linię o złym kolorze niż usłyszy fałszywy dźwięk. P.G.

W dniu 26.06.2024 o 12:22, Piotr Gałka pisze:

To chyba ja nie rozróżniam kiedy grają a kiedy nie. :( W "Szansie na sukces" można było wybrać utwór z linią melodyczną lub bez. Trudno mi dostrzec różnicę. Ten sam utwór może mieć melodię a zarazem nie?

Robert

W dniu 26.06.2024 o 12:29, Piotr Gałka pisze:

Coś w tym jest, bo mam podobnie, w sensie, że dźwięk E jest dla mnie tak samo rozpoznawalny jak kolor "żółty" dla normalnego widza (daltonistów pomijam) O! Daltonista nie rozróżnia kolorów w takim samym sensie, jak osoba, która nie ma słuchu absolutnego, nie rozróżnia dźwięków :)

W dniu 26.06.2024 o 12:39, LordBluzg®🇵🇱 pisze:

Zapis nutowy utworu z linią melodyczną i bez czym się różni?

Robert

W dniu 26.06.2024 o 12:48, Robert Wańkowski pisze:

Bez linii melodycznej masz tylko "akordy" czyli podkład. Jeśli masz zapis nutowy np. na fortepian to z linią melodyczną będziesz miał zapis dla prawej i lewej ręki. Bez linii melodycznej będzie to tylko zapis dla lewej ręki. To tak uprościłem, żebyś lepiej zrozumiał.

To podobno modbus?

formatting link
Ale moze prosciej bedzie popatrzec co kod 8080 robi i zapisać w C.

Albo ... napisz w assemblerze i odpal pod symulatorem CP/M :-)

J.

W dniu 26.06.2024 o 12:54, LordBluzg®🇵🇱 pisze:

Taki przykład z muzyki. The Shadows zawsze grało linię melodyczną "zamiast" ją śpiewać. W standardowych utworach linie melodyczna praktycznie nie istnieje instrumentalnie, lecz wokalnie. Teraz jaśniej?

ogólnie - to chyba słychac, bo inaczej nie byłoby tych wszystkich durów i mol.

Tylko spodziewam się, ze pani zagrała mu inne składniki, czyli inne stosunki czestotliwosci.

Teoretyk :-)

Być może grających to mało dotyczy.

Ten przewrót, to przeniesienie najnizszego składnika akordu o oktawe wyżej, czyli na mój gust wychodzi z tego całkiem inny stosunek częstotliwosci.

Bo to bardzo skomplikowana matematyka ... jak na muzyków :-)

Cel był chyba inny, a strój równomiernie temperowany go tylko przybliża.

J.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required