Problem beim Auslagern von Funktionen

Gast #4082869
Lesenswert?

Hey ich habe momentan folgendes Problem:
Ich programmiere einen Atmega128 und will Funktionen extern auslagern.
Wenn ich alles in meine Hauptdatei packe (prog.c) funktioniert es 
tadellos. Aber sobald ich Funktionen extern einbinde, geht nichts mehr 
am Controller, obwohl der Compiler avr-gcc mir problemlos die 
prog.hex-Datei erstellt.

So sieht das momentan aus:
http://pastebin.com/D8EyeYzj

Wenn ich dummy() in prog.c auskommentiere, bekomme ich im 
Millisekunden-Abstand ein Signal am entsprechenden Port. Wenn ich es 
drin lasse (bedenke: es macht überhaupt nichts), ´passiert an diesem 
Port leider nichts.

Wäre cool wenn jemand einen Hinweis hat, was falsch läuft
Das ist noch das Makefile http://pastebin.com/Q6tUWPcW
Gast #4082897
Lesenswert?

Ja ist es auch ;)

"Build succeeded with 0 Warnings..." bekomme ich jedes mal.

Mir ist das zum ersten mal aufgefallen (habe eben erst angefangen), als 
ich den ganzen Block

PORTA |= (1<<2);
_delay_ms(10);
PORTA &= ~(1<<2);
_delay_ms(10);

ausgelagert und eingebunden habe. Aber es ist wohl ein grundsätzliches 
Problem, dass der Controller nicht mitmacht, sobald eine Funktion von 
außerhalb aufgerufen wird
Gast #4082913
Lesenswert?

Anonym schrieb:
> Wenn ich dummy() in prog.c auskommentiere, bekomme ich im
> Millisekunden-Abstand ein Signal am entsprechenden Port. Wenn ich es
> drin lasse (bedenke: es macht überhaupt nichts), ´passiert an diesem
> Port leider nichts.

Erzeuge doch mal Assembler Dateien (Flag -S) und lade diese hoch!
#4082916
Lesenswert?

>Der Mega128 ist 'neu'?
>Die M103 Fuse ist deaktiviert?
Fehler bei den Fuses sind unwahrscheinlich, wenn es in anderer 
Kombination (alles in main.c) funktioniert.

>Aber es ist wohl ein grundsätzliches
>Problem, dass der Controller nicht mitmacht, sobald eine Funktion von
>außerhalb aufgerufen wird

Von wo her eine Funktion aufgerufen wird bekommt der Controller gar 
nicht mit. Der arbeitet einen Programmbereich nach dem anderen ab. 
Sowohl innerhalb als auch außerhalb von main.c aufgerufene Funktionen 
erscheinen nur als call oder jump an die entsprechende Stelle.
#4082958
Lesenswert?

Sebastian S. schrieb:
>>Der Mega128 ist 'neu'?
>>Die M103 Fuse ist deaktiviert?
> Fehler bei den Fuses sind unwahrscheinlich, wenn es in anderer
> Kombination (alles in main.c) funktioniert.

Nicht wenn die Funktionen so läppisch sind, dass sie vom Compiler 
geinlined werden.
Liegt die Funktion so, dass der Compiler kein inline machen kann, dann 
muss ein echter Funktionsaufruf her. Wenn dann der M128 noch auf M103 
steht, dann kracht es.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren