Hallo zusammen, ich verwende die neueste KEIL Umgebung und den STM32F051x. In meiner Software emuliere ich EEPROM und ich mache eine CRC-Prüfung des Flashs bei Programmstart. Nun steht meine CRC-Checksumme im gleichen Sektor wie der EEPROM-Emulierungsbereich. Beim ersten Start des Programms ist alles in Ordnung, nach dem ersten "Abspeichern" im EEPROM wird aber der gesamte Sektor überschrieben. Damit geht meine Checksumme verloren und das Programm startet nicht. Ich habe den EEPROM und die Checksumme in einem Sektor, weil das eigentliche Programm die restlichen Sektoren füllt. Soviel zur Theorie die ich verstanden habe :) Für die Lösung meines Problems habe ich derzeit 2 Optionen. 1. Option: Ich versuche auf Biegen und Brechen den Programmcode selbst effizienter zu gestalten. 2. Option: Viel einfacher ist es mit den Optimierungen zu spielen. Hier habe ich in den C/C++ Optionen die "One ELF Section per Function" aktiviert und sagenhafte 8kB Flash gewonnen. Damit kann ich nun EEPROM und Checksumme trennen. Das funktioniert soweit auch ganz gut. Jetzt meine Fragen: 1. Welchen Unterschied macht diese Option aus (außer den 8kB)? 2. Muss ich mit Veränderungen in timingkritischen Codepfaden rechnen? 3. Wie kann ich den Unterschied der beiden Compilierungsergebnisse feststellen (außer einem Diff mit Notepad, bzw. ausgedehnten Tests)? Ich hoffe es gibt jemand der mir diese Fragen beantworten kann. Ich habe natürlich nach entsprechenden Unterlagen über "ELF" und KEILs Optimierungen geschaut und durchgelesen. Ich würde jetzt aber gerne mal die Meinung der Profis einholen. Beste Grüße public
an den auszuführenden codepfaden und am code selbst sollte sich für gewöhnlich nichts ändern, da diese art der optimierung nur der Linker durchführt. Und dieser nutzt die einzelnen ELF teile dazu nicht genutze funktionen rauszuschmeissen. 8 Kb ist doch recht viel, klingt dnach als würdest du eine ganze lib hinein linken von der du nur einen sehr kleinen Teil verwendest?
Hey Ben, danke für die Antwort. #include "stdlib.h" und andere könnten das erklären :) Gruß public
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.