Forum: Compiler & IDEs Woher kennt der GCC die Flash-Größe? (ATmega168 geht nicht


von Nikias Klohr (Gast)


Lesenswert?

Hallo,
ich benutzte das EClipse-Plugin mit GCC. Bisher hab ich einen ATMega8
verwendet. Jetzt kratze ich mit meinem Projekt an der 8K grenze und hab
mir den ATMega168 geholt. Nachdem ich meine Interupts, die beiden
mcu-Werte auf atmega168 gestellt und ein paar Register angepasst habe,
wollte ich compilieren.
Jetzt bekomme ich aber mit dem selben Programm, das vorher noch in die
8K gepasst hab, einen "region text is full" Fehler beim linken!
Woher weiß der Compiler/Linker eigentlich wie viel Flash der Controller
hat? Steht das irgendwo?

Woran könnte das liegen? Komme einfach nicht drauf.

Vielen Dank schonmal,
Nikias

von Wolfgang Horn (Gast)


Lesenswert?

Hi, Nikias,

"Woher weiß der Compiler/Linker eigentlich wie viel Flash der
Controller
hat? Steht das irgendwo?"

Ja. In der <iom168.h> findest Du die Zeile "#define FLASHEND
0x3FFF"

Was den Opcode so aufblähen könnte, da bin ich überfragt.


Ciao
Wolfgang Horn

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ist die Region "text" nicht das RAM?

von Nikias Klohr (Gast)


Lesenswert?

@Wolfgang: Also ich bin mir sicher dass der Linker nicht das FLASHEND
Makro verwendet. Das ist nur zum eigenen Gebrauch in deinem Programm da
drinn. Ich dachte er müsste irgendendwo ne lookup table haben für die
ganzen mcu-Typen.

@Rufus: Hmmmm....könnte das sein? Kann das irgendwer bestätigen?
Wäre es denkbar...dass durch eine größere Registergröße mehr Ram
verbraucht wird, und die 1K nicht mehr reichen?

Gruß,
Nikias

von Nikias Klohr (Gast)


Lesenswert?

So...habs rausgefunden!
In der map file stand die ganze Zeit das der Linker nur von 8K
ausgegangen ist...
Jetzt hab ich dem Linker auf verdacht hin einfach mal den Parameter
"-mmcu=atmega168" übergeben -> Alles geht!
Denke das ist ein Fehler im Eclipse-Plugin, der müsste das dem Linker
eigentlich noch mitteilen.

Gruß,
Nikias

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.