Forum: Compiler & IDEs AVR-Studio: Verbindung zwischen 2 Projekten gesucht?


von Andree S. (amshh)


Lesenswert?

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

von npn (Gast)


Lesenswert?

Ich denke, das Problem wird sein, daß du die Fuses ja nicht dem Compiler 
oder Preprozessor mitteilst, sondern dem Programmer.

von Bitflüsterer (Gast)


Lesenswert?

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.

von Bitflüsterer (Gast)


Lesenswert?

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.

von Andree S. (amshh)


Lesenswert?

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
Noch kein Account? Hier anmelden.