Hallo zusammen,
ich bin gerade am Debuggen und frage mich ob mein Konstrukt so überhaupt
erlaubt ist. Folgender Aufbau:
afile.c:
1
uint8_tvar=0;
2
3
voidfoo(void)
4
{
5
// work with var
6
var++;
7
}
bfile.c:
1
voidresetVar(void)
2
{
3
externuint8_tvar;
4
var=0;
5
}
ist das so mit dem AVR-GCC erlaubt? also eine Variable die in der einen
Datei global ist, in der anderen Datei nur lokal und trotzdem extern zu
deklarieren?
Klar in dem Minimalbeispiel hier kann resetVar auch in afile.c
geschieben werden und man kann sich das extern sparen, in meiner
Anwendung geht das aber nicht so einfach und ich glaube fast, dass daran
mein Programm scheitert.
Vielen Dank
Gruß Martin
Das ist eine der Fragen, die sich mit etwas Abstand ganz plötzlich wie
von selbst beantworten.
Was geht, ist eine lokale Variable mit gleichem Namen, wie eine globale
(ob extern oder nicht, ist dabei egal). Die lokale "verdeckt" in diesem
Fall die globale.
Oliver
OK, es hat etwas gebraucht aber ich bin doch noch auf den Hund gekommen
wie ich's testen kann. So ne Pause wirkt doch Wunder!
Nur entspricht mein Ergebnis nicht dem, was ich aus deiner Antwort
erwartet hätte:
Der Test
main.c
Martin schrieb:> Nur entspricht mein Ergebnis nicht dem, was ich aus deiner Antwort> erwartet hätte:
Kommt drauf an, wessen Antwort du meinst.
Johann liegt richtig, Oliver nicht.
A. K. schrieb:> Johann liegt richtig, Oliver nicht.
Johann habe ich vollkommen übersehen, da war ich wohl selbst schon im
schreiben...
A. K. schrieb:> Oliver schrieb:>> (ob extern oder nicht, ist dabei egal).>> Keineswegs. Es ist der entscheidende Unterschied.
du meinst, dass 'extern' der entscheidende Unterschied ist, verstehe ich
das richtig?
Martin schrieb:> du meinst, dass 'extern' der entscheidende Unterschied ist, verstehe ich> das richtig?
Ja, denn ohne extern wäre es die Definition einer lokalen Variable,
nicht die Deklaration einer extern.
Dein Disassembly von oben entspricht nicht dem Quellcode, irdendwo hast
da gemogelt!
Johann L. schrieb:> Dein Disassembly von oben entspricht nicht dem Quellcode, irdendwo hast> da gemogelt!
Inwiefern? Bei mir kommt exakt ebendieser Asm-Code raus (4.7.2).
Johann L. schrieb:> reset() hat im Disassembly ein while(1), in der Quelle jedoch nicht!
Ist das while in main. Ein Schmutzeffekt des Disassemblers beim Versuch,
für Code mit Inlining den Quellcode irgendwie unterzubringen.