Funktion ausführen
-
Hallo Leute,
hoffe jemand kann mir einen Tip geben was ich falsch
mache, habe erst angefangen C zu programmieren.
Ich möchte in einem Unterprogramm verschiedene Werte
aus einem Byte ausmaskieren. Ich kann das Programm
zwar compilieren aber beim debuggen führt er die
Funktion nicht aus! Hab ich etwas vergessen?Danke Stefan
-----------------------------------------------------#include <avr/io.h>
void split(char Byte_eins)
{unsigned char Adresse;
unsigned char R_W;
unsigned char Ident;// Ausmaskieren
Adresse = ((0x70) & Byte_eins);R_W = ((0x08) & Byte_eins);
R_W = (R_W >> 3);Ident = ((0x07) & Byte_eins);
}
int main(void)
{
while(1)
{
split(0xFF);
}
return(0);
}
-
Vielleicht ist der Compiler so schlau, dass er erkennt, dass deine Funktion nichts tut. Deshalb optimiert er sie weg. </spekulation>
-
Das ist möglich, aber warum macht meine Funktion nichts?
Läßt sich das vielleicht mit "volatile" lösen?Stefan
-
Naja, was soll sie denn machen? Sie berechnet ein paar Sachen und wirft die Ergebnisse weg. Hat am Ende den gleichen Effekt als wär sie gar nicht aufgerufen worden.
-
Hab jetzt versucht ein Programm zu schreiben
das structs zurückliefert.Allerdings bringt mir der Compiler Fehlermeldungen
aus denen ich nicht schlau werde. Vielleicht hat jemand einen
Tip was ich vergessen hab!Danke Stefan
+++++++++++++++++++++++++++++++++++
[cpp]#include <avr/io.h>
struct Byte_eins_werte
{
unsigned char Slave_Adresse;
unsigned char R_W;
unsigned char Ident;
};struct split(char Byte_eins)
// ????? split.c:10: error: parse error before "char"{
struct Byte_eins_werte byte_daten;// Ausmaskieren
byte_daten.Slave_Adresse = ((0x70) & Byte_eins);
byte_daten.Slave_Adresse = (Slave_Adresse >> 4);byte_daten.R_W = ((0x08) & Byte_eins);
byte_daten.R_W = (R_W >> 3);byte_daten.Ident = ((0x07) & Byte_eins);
return byte_daten;
}int main(void)
{struct Byte_eins_werte byte_werte;
while(1)
{
byte_werte = split(0xFF);
//split.c: In functionmain': // ????? split.c:35: warning: implicit declaration of function
split'
// ????? split.c:35: error: incompatible types in assignment
}
return(0);
}
-
Du musst dem Computer sagen, was für eine Struktur die Funktion split zurückgeben soll. Ein allgemeines "struct" reicht da nicht.
-
Das mit dem "parse error before char"
hat sich jetzt erledigt. Aber der Compiler meckert
weiter rum!Er schreibt die Variablen Slave_Adresse & R_W
sind nicht deklariert. Was will er von mir, ich hab das
doch schon im struct deklariert?Was hat es bei den structs mit diesem "->" Operator
auf sich, muß ich den verwenden?Danke für die Hilfe!
Stefan
#include <avr/io.h> struct Byte_eins_werte { unsigned char Slave_Adresse; unsigned char R_W; unsigned char Ident; }; struct Byte_eins_werte split(char Byte_eins) { struct Byte_eins_werte byte_daten; // Ausmaskieren byte_daten.Slave_Adresse = ((0x70) & Byte_eins); byte_daten.Slave_Adresse = (Slave_Adresse >> 4); // split.c:16: error: `Slave_Adresse' undeclared (first use in this function) // split.c:16: error: (Each undeclared identifier is reported only once // split.c:16: error: for each function it appears in.) byte_daten.R_W = ((0x08) & Byte_eins); byte_daten.R_W = (R_W >> 3); // split.c:22: error: `R_W' undeclared (first use in this function) byte_daten.Ident = ((0x07) & Byte_eins); return byte_daten; } int main(void) { struct Byte_eins_werte byte_werte; while(1) { byte_werte = split(0xFF); } return(0); }
-
Das Problem in den Zeilen, in denen der Fehler auftritt, ist, dass Du R_W und Slave_Address auf der rechten Seite der Zuweisung als eigenständige Variablen verwendest - was sie ja gar nicht sind. (R_W und byte_daten.R_W sind nicht das selbe)