Hallo
ich benutze die WinAvr Version 20081205 und den Atmega32
Ich möchte mein Projekt auf mehere Dateien aufteilen.
In meiner main.c habe ich folgende Funktionen:
wenn ich die Funktion ADCtoLCD in meine neue Datei "Batterie.c"
verschiebe also nicht kopiere dann wird mein Projekt von ehemals:
Program: 18834 bytes
(.text + .data + .bootloader)
Data: 87 bytes
(.data + .bss + .noinit)
auf
Program: 24234 bytes
(.text + .data + .bootloader)
Data: 89 bytes
(.data + .bss + .noinit)
aufgebläht. Das Programm funktioniert weiterhin es gibt keine Fehler
beim erstellen. Die Funktionen werden natürlich in der "Batterie.h"
definert.
Kann es sein das die Grafik LCD Routinen nochmal eingebunden werden.
Bisher sind sie nur in der main.h included.
Weiß jemand vielleicht woran das liegt.
An den Compiler Einstellung -os wurde nichts geändert.
Danke schonmal im vorraus.
Anlen
Normal ist das nicht. Der Compiler hat zwar innerhalb einer Datei mehr
Optimierungsmöglichkeiten, als in getrennten Dateien, aber bei den
gezeigten Funktionen dürfte das keine Rolle spielen.
Zip doch mal das ganze Projektverzeichnis zusammen, und häng es hier an.
Oliver
> Kann es sein das die Grafik LCD Routinen nochmal eingebunden werden.> Bisher sind sie nur in der main.h included.
Das macht mich stutzig.
Insbesondere der letzte Satz.
Hallo,
ich habe mal beide Projekt in den Anhang gepackt.
Im Projekt "Normal" beträgt die grösse des HexFiles: 18834 bytes
Im Projekt "gross" beträgt die grösse des Hexfiles: 24234 bytes
Ausschlaggebend ist die Funktion "ADCtoLCD" welche den Code um anwachsen
lässt.
Bisher war die Funktion in der Datei "main.c" und soll nun in die Datei
"batt.c" im Ordner Einstellungen.
Dies ist meine erstes Projekt, darum bitte ich um Nachsicht wenn nicht
alles so perfekt aufgeräumt ist.
Danke für die Unterstützung.
Anlen
PS: Ich habe ausversehen einen weiteren Thread aufgemacht bitte löschen,
danke.
static uint8_t normal[] PROGMEM = {
...
};
Ist in einem Header, der in main.h inkludiert wird.
Überall, wo main.h inkludiert wird wird ein entsprechender Array im
Programmspeicher angelegt.
Vielleicht liegt es ja daran? Hab nicht geschaut, wo es in welcher
Version inkludiert wird und ob es da Unterschiede gibt.
Wenn du die Tabelle nur einmal willst, dann verschieb sie in eine .c
Datei und lass das static weg.
In den header schreibst Du dann nur noch
extern uint8_t normal[] PROGMEM;
@ Willi P. (anlen)
>>Aber sicher nicht mehrfach identisch repliziert>Meine C Kenntnisse sind noch nicht so gut.
Was du willst ist, dass die Tabelle EINMAL im Speicher abgelegt wird
(Flash), aber ALLE Softwaremodule in allen Dateien darauf zugreifen
können.
Das macht man so, dass man das Array in EINER Datei ganz normal anlegt
(definiert). Z.B. in font.c
1
uint8_tnormal[]PROGMEM={bla}
Zu jeder .c Datei gehört praktisch immer eine Headerdatei, welche den
Inhalt für andere Dateien beschreibt. Z.b. header.h
1
externaluint8_tnormal[]PROGMEM;
DIESE wird dann per #include in alle anderen Dateien eingefügt und damit
können diese auf dein Array zugreifen. Es existiert jedoch nur einmal.
MFG
Falk
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.