Hallo zusammen
Im STM32 ist eine 32bit CRC-Engine in Hardware vorhanden. Dort kann ich
32bit werte hineingeben und es kommen 32bit werte heraus. Nun muss ich
soetwas in Software nachbilden. Ich weiss wie das mit chars als
eingangswerte funktioniert. Aber wie mache ich das mit 32bit
eingangswerten? 4 Chars hintereinader funktioniert ja nicht.
Aufpassen int ist ggf auf einem Microcontroller nur 16bit breit!
Und "funktioniert nicht" ist ein eindeutiger Fall von "Nutzer zu doof
für Fehlerbeschreibung" Problem... ;)
WAS gibst du rein, WAS kommt raus, WAS erwartest du wären so die
interesanten Fragen.
Hallo
auf dem STM32 mit Keil ist int 32bit breit. Hab ich auch überprüft.
Funktioniert nicht heisst wenn ich einen Wert von 0 als bitfolge
festlege, dann erwarte ich als Rest (also crc32_rev) 0x04c11db7. Ich
erhalte aber 0x21ffdf1c.
"Mit Borland und da ist int 32bit breit."
Hast Du das überprüft? bei TurboC ist es nämlich nur 16-Bit.
Long ist 32-Bit.
Stimmt der Startwert 0xffffffff mit dem der Hardwareunit überein?
Macht die HW-Unit am Schluß auch das
^ 0xffffffff ?
CRC ist halt nicht CRC...
Dazu haben wir schon etliche Beiträge geschrieben.
Hast Du schonmal eine andere SW-Routine versucht?
Normalerweise ist ja der Datenwert nicht als Bit-Array abgespeichert.
Das bekommen wir schon hin!
Hallo
Manchmal hilft es echt ein paar Stunden etwas Anderes zu machen und dann
nochmal in Ruhe das Ganze anzuschauen.
Ich habs jetzt geschafft. Man kann diese Routine benutzen nur müssen die
Bitwerte gedreht werden (MSB<->LSB).
Das mit int hatte ich schon getestet. Sonst würde bei einer Zuweisung
1
unsignedintx=0xffffffff;
eine Warnung kommen.
Das Problem an sich war, dass im Datenblatt des STM32 nicht genau stand,
was die Hardware-Unit genau macht. Durch Probieren mit 0xaaaaaaaa und
0x55555555 bin ich dann drauf gekommen.
Hallo,
habe auch das Problem die Hardware-CRC per Software nachzubilden.
Welche Bitwerte müssen gedreht werden?
kannst Du bitte die getestete Routine noch mitteilen?