Gibt es eine Präprozessor-Konstante für die Speichergröße

13

Ich möchte, dass meine Kompilierungen je nach verfügbarem Flash- / Programmspeicherplatz Code ausschließen. Zur Verwendung im Demo-Code einer Bibliothek, die ich unterstütze. Während meine derzeitige Lösung darin besteht, ein #ifdef des Prozessortyps zu verwenden. Aber ich möchte allgemeiner sein und nicht alle verschiedenen Chips spezifizieren müssen. Vielmehr wäre es schön, wenn es eine Vorprozessorkonstante gäbe, die die verfügbare Größe angibt.

Wenn ich nicht fließend genug in gcc und / oder avr-gcc bin, könnte ich erwarten, einige Konstanten zu finden, die den Anfang und das Ende des Heaps definieren.

Am Fallbeispiel. Ist das sowohl die UNO als auch Leo haben 32K Flash. Die Kernbibliothek des Leo verwendet jedoch 4 KB für die USB-Unterstützung, sodass nur 28 KB zur Verfügung stehen. Die Demo meiner Bibliothek ist in der UNO fast voll, und ich möchte sie basierend auf dem verfügbaren Programmplatz automatisch ausschneiden.

mpflaga
quelle
Ich habe Programme gesehen, die dies tun, aber ich kann keine finden
TheDoctor

Antworten:

10

Suchen Sie die io__.hDatei für Ihren Mikrocontroller. Unter Linux befindet /usr/lib/avr/include/avrsie sich an einer ähnlichen Stelle wie unter Windows.

Scrollen Sie nach unten zu dem Teil, in dem steht /* Constants */. Dort sind einige interessante Makros definiert, an denen FLASHENDSie interessiert sein sollten. Sie können sie beispielsweise wie folgt verwenden:

#if FLASHEND > 0x8000
/* Include some extra code when sufficient flash is available. */

#endif
jippie
quelle