Hallo
Ich habe ein Problem mit der Parameterübergabe an eine Funktion.
Und zwar sieht das folgendermaßen auf.
In der main()-Funktion rufe ich set_leds() auf:
1 | #define LED_OFF 0
|
2 | #define LED_ON 1
|
3 |
|
4 | ...
|
5 | if( PIND & (1<<PLED1) )
|
6 | set_leds(LED_ON, 5);
|
7 | if( !(PIND & (1<<PLED1)) )
|
8 | set_leds(LED_OFF,5);
|
Der Code tut eigentlich erst einmal nichts anderes als ständig eine LED
aus- und einzuschalten. Das ist aber unwesentlich. Wesentlich ist hier
nur, dass ich die Funktion set_leds() aufrufe und ihr 2 Werte übergebe.
Einmal ein Makro, einmal einen diskreten Wert.
In der aufgerufenen Funktion jedoch kommt immer nur der erste Parameter
an.
Der Prototyp der Funktion sieht so aus:
1 | U_INT8 set_leds(U_INT8 status, U_INT8 ledname);
|
Das interessante ist jetzt, dass immer nur der 2. Parameter tatsächlich
übergeben wird, der andere nicht!!
Im obigen Code kann ich mir also den Wert von ledname=5 direkt im
Debugger anschauen. status hat jedoch "Location not valid" und der Wert
von status wird auch nicht korrekt analysiert.
Vertauscht man die 2 Parameter in der Reihenfolge ist das Spiel das
selbe. Dann kann man status im Debugger sehen und ledname ist dann
"Location not valid".
Ich nutze AVR Studio Version 4.13. An was kann das liegen??? Das ist
doch nicht normal...