Hallo Forum, ich habe hier im Forum schon Beiträge zu dem Thema gelesen, leider hat mir bisher keiner weiter geholfen. Ich muss über meinen Maschinencode eine CRC16 Checksumme berechnen. Da der GNU Compiler das nicht kann, habe ich mir eine extra Sektion definiert und schreibe dort eine Variable beim ersten Linken mit "0", berechne dann meine Checksumme und linke dann nochmals mit dem Wert der Checksumme. Vom Ablauf her sit mir das alles auch klar, und würde prinzipiell auch funktionieren. Nun habe ich ein kleines Konsolenprogramm das mit die CRC16 CCITT Checksumme berechnet (rehash), nur wie kann ich das was nun als Berechnung herauskommt in meinem makefile einlesen? Hat mir jemand einen Tip oder ein anderes Programm zum berechnen der Checksumme mit dem das geht? Aktuell habe ich das über ein extra Batchfile versucht, aber leider steht mir dann nach dem beenden des Batchfiles die Variabel mit makefile wieder nicht zur Verfügung. Danke für jeden Tip BATCHFILE: (funktioniert so, aber leider ist die Variable dann im makefile weg) rehash .\Objects\htb.elf -norcrsv -none -crc16c > output.txt @echo off & setLocal EnableDelayedExpansion FOR /F "skip=1 delims=: tokens=2, 3*" %%i in (output.txt) do set crc16=%%i echo !crc16!
Steffen Walter schrieb: > Aktuell habe ich das über ein extra Batchfile versucht, aber leider > steht mir dann nach dem beenden des Batchfiles die Variabel mit makefile > wieder nicht zur Verfügung. Danke für jeden Tip Deinem make ist es ja prinzipiell egal, mit welchem Kommando es aus den Einzelteilen das EXE erstellt. Alles was das make interessiert: Um aus dem im Makefile angegebenen Einzelteilen das fertige Programm zu erhalten, muss das im Makrfile angegebene Kommando ausgeführt werden. Das Kommando kann natürlich auch ein Batch-File sein, welches die CRC berechnet, einträgt und das EXE linkt.
Hallo Steffen, ein Weg wäre: Du rufst nach wie vor Dein Rehash auf: rehash .\Objects\htb.elf -norcrsv -none -crc16c > output.txt --> rehash schreibt in die Datei output.txt z.B. die Zeile "MeineCRC db 1234h" (db = define byte) Diese Datei bzw. diese Zeile includest Du in Dein Source Modul mit der extra Section: Datei "MeinCrCSourceModul": MeineCRCSection SECTION DATA Word #include(output.txt) MeineCRCSection ENDS In Deinem Make rufst Du also auf: rehash... assemble (oder compile) MeinCrcSourceModul... LINK ..,MeinCrcSourceModul,.. Syntax etc. hängt natürlich von Deiner Umgebung ab. Ich bin jetzt mal von Assembler ausgegangen, in C geht es natürlich ähnlich. Auf so eine ähnliche Weise hole ich mir u.a. auch das aktuelle Erstelldatum in meinen Sourcecode.
Danke erst einmal für Eure schnellen Antworten. Zum Thema alles was make interessiert: mein batchfile funktioniert ja, das habe ich ja gestestet und im Batchfile oder in einer Eingabeaufforderung habe ich dann auch die Variabel mit der CRC Checksumme zur Verfügung. Wenn ich das Batch dann über das makefile ausführe dann habe ich aber die Variable nicht mehr zur Verfügung! Ich kann also auf den extrahierten Wert crc16 nicht mehr zugreifen. Das mit dem include der Textdatei ist mir noch nicht ganz klar, ich muss ihm dann quasi sagen in welche Section er mit das einbinden soll? Dann muss ich aber doppelt Compilieren und Linken oder? Ich hatte das bisher über den Linker mit --defsym gemacht und mir da dann das Ergebnis der CRC Berechnugn gesetzt (bisher manuell von Hand) und das wollte ich eben nun automatisieren. Gibt es denn keine Möglichkeit von einem DOS Programm direkt auf die Ausgabe zuzugreifen?
Steffen Walter schrieb: > Das mit dem include der Textdatei ist mir noch nicht ganz klar, ich muss > ihm dann quasi sagen in welche Section er mit das einbinden soll? Dann > muss ich aber doppelt Compilieren und Linken oder? Doppelt nicht, sondern nacheinander! Nachdem Du die CRC mit rehash in die Datei output.txt geschrieben hast, wird das Modul mit der Section, in der auch die CRC landen soll, compiliert. (Ich gehe dabei davon aus, das die Section mit der berechneten CRC nicht im gleichen Source Code Modul steht, über das die CRC gebildet werden soll). Beim Compilieren wird mit der include Anweisung die Datei output.txt in Dein Modul eingefügt. Das Nacheinander kann man doch über die Abhängigkeiten im Makefile steuern. Anschliessend wird alles gelinkt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.