Moin, Ich bearbeite im AVR-Studio (4.18) das Programm und den zugehörigen Bootloader in zwei verschiedenen Projekten. Sind ja auch getrennte Übersetzungeinheiten. Fuses des ATMega328 sind entsprechend gesetzt, um dem Bootloader einen Platz von 1024 Words einzuräumen. Funktioniert soweit auch alles. Noch ... Aber: Im Hauptprogramm wird nach dem Übersetzen die Anzahl der Code-Bytes und die Prozentzahl der Speicherausnutzung ausgegeben. Die Prozentzahl bezieht sich auf den gesamt verfügbaren Speicher des ATMega. (Leicht nachzurechnen ausgehend von 32KByte) Deshalb ist es auch kein Problem, im Hauptprogramm, wenn man nicht aufpasst, den eigentlich für den Bootloader notwendigen Platz mit zu überschwemmen. (Nehme ich an, da 100% rechnerisch auf 32K kommen) Die Projekte wissen eben nicht voneinander.... Daher: Wirklich nicht? Aus den Fuses ist ja eigentlich ablesbar, was zur Verfügung steht. Das HP könnte daher ja die 100%-Grenze bei 32K-2K setzen. Tut es aber offensichtlich nicht. Es sei denn, man muss es ihm irgendwie auf anderem Wege sagen. Geht das? Danke+Gruß Andree
Ich denke, das Problem wird sein, daß du die Fuses ja nicht dem Compiler oder Preprozessor mitteilst, sondern dem Programmer.
OK. Ich nehme an, dass Problem besteht darin, daß Du unabsichtlich nicht darauf achtest ob der für den Bootloader vorgesehene Bereich überschrieben wird. Leider gibt es, soweit ich weiß, keine direkte und einfache Möglichkeit AVRStudio dazu zu bringen, Dich, in Abhängigkeit von der Boot-Fuse darauf hinzuweisen. Aber als Workaround könntest Du an der niedrigsten Adresse des Bootloaders mit .dw ein Dummy-Wort hinschreiben. Falls dann das Programm bis zu dieser Adresse wächst würde AVRStudio eine Meldung ausgeben. Du musst nur daran denken, das Dummy-Wort wieder zu entfernen. Eine andere, aufwendigere aber automatisierte Möglichkeit, wäre ein Perl-Script (oder einer in einer anderen Sprache), der nach dem Compilieren das List-File daraufhin überprüft, ob die höchste Adresse sich mit dem Bootloader überschneidet. Zuvor müsste man aus dem XML-Projekt-File noch den momentanen Stand, der Boot-Fuses auslesen. In diesem Fall mußt Du natürlich daran denken, die Boot-Fuses vor dem Compilieren so zu setzen, wie sie am Ende stehen sollen.
Theoretisch, wenn auch unter Umständen nicht empfehlenswert, könntest Du Dir von den XML-Dateien, welche die Prozessoren definieren, auch Varianten erzeugen, bei denen das verfügbare RAM geringer ist. Ob das wirklich geht, weiß ich nicht - ich habe das noch nie versucht. Aber meiner Meinung nach sollte es funktionieren.
Soweit erst einmal danke. Ja ja, die Fuses. Hätte ja sein können, dass beim Programmieren aus AVR-Studio die Fuses abgefragt werden. (Aber theoretisch ist es dann eh zu spät. Auf das grüne Dreieck zur Übertragung ins Target drückt man ja erst nachdem compiliert (und das Unglück bereits passiert) ist. ABER: Es hätte ja sein können, dass AVR-Studio in den Projekt-Einstellungen irgendwo eine Option hätte, mit der der verfügbare Speicher (aus welchem Grund auch immer) reduziert wird. Nun denn A.
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.