Hallo Zusammen,
ich möchte den Inhalt einer Adresse in eine integer variable speichern
und mit einem switch case dann den jeweiligen Code ausführen. Mein
Problem ist nur das mein Compiler meckert:
uint8_t* kommando ;
kommando = (uint8_t*) 0x20000894; //Da drin steht a b oder c (Hex)
switch(kommando)
{
case 'a':
{
if(x>=2)
{
x=0;
number_of_bytes_to_be_transmitted = bilder[x].bildgroesse;
do
{
send();
}while(number_of_bytes_to_be_transmitted!=0);
isTriggered=false;
}
}
........
}
Compiler Meldung : kommando must be integral type....
a, b oder c sind kommandozwichen mit denen ich dem µC sage was es machen
soll....
uint8_t* kommando = (uint8_t*) 0x20000894;
und dann
> switch(*kommando)
könnte was bringen.
Warum nimmst du nicht gleich ein uint8_t und musst das über biegen und
brechen über einen Pointer machen?
mfg mf
@peter danke hat funktioniert aber ich bekomme eine Fehlermeldung dass
ich "duplicate definitions for kommando" bekomme
@Mini Float ehm ich hab schon einiges ausprobiert... wie meinst du das
genau? kommando als uint8_t???
ibo schrieb:> @peter danke hat funktioniert aber ich bekomme eine Fehlermeldung dass> ich "duplicate definitions for kommando" bekomme
in welcher zeile? Vermutlich in dem teil vom code den man nicht sieht.
das problem ist das es gar nicht so ist... Ich weiss nicht woher das
kommt... kann es sein dass irgendwo anders auch auf die adresse
zugegriffen wird und dehalb sowas kommt...
ibo schrieb:> kann es sein dass irgendwo anders auch auf die adresse> zugegriffen wird und dehalb sowas kommt...
ganz bestimmt nicht, man kann auch 100 mal auf die gleiche adresse
verweissen das ist egal.
Wieso kann ich das nicht so machen:
uint8_t kommando ;
kommando = frame_to_mac->payload; //Das ist nochmal der Zeiger auf
die obige adresse
switch(kommando)......
ibo schrieb:> Wieso kann ich das nicht so machen:
keine ahnung, warum du es nicht kannst. Mit dem codefetzen kann man da
auch nich helfen.
> uint8_t kommando ;> kommando = frame_to_mac->payload; //Das ist nochmal der Zeiger auf> die obige adresse> switch(kommando)......
wir wissen nicht wie
frame_to_mac->payload
definert ist.
ibo schrieb:> wie meinst du das> genau? kommando als uint8_t???
Und woher weißt du denn, dass genau an dieser Adresse dein Buchstabe
liegt?
Weißt du, was du da tust?
Wenn es wirklich nur mit dieser komischen Adresse geht:
uint8_t kommando = *( (uint8t*) 0x20000894);
kommando ist dann eine Kopie des Speicherinhaltes, auf das der Zeiger
(uint8t*) 0x20000894 zeigt. Stern und Klammer 'rum sorgen nur für
Auflösung, also dass der Herr Prozessor in den Briefkasten Nummer
0x20000894 rein schaut und die da drin liegende Zahl in kommando
kopiert.
Ach ja
> Compiler Meldung : kommando must be integral type....
wunderbar. Vielleicht kennt dein Compiler kein uint8_t, sondern nur die
komischen Trivialnamen. Hast du eine ordentliche <inttypes.h> für diesen
Prozessor und compiler?
mfg mf
ibo schrieb:> Wieso kann ich das nicht so machen:>> uint8_t kommando ;> kommando = frame_to_mac->payload; //Das ist nochmal der Zeiger auf> die obige adresse> switch(kommando)......
Wahrscheinlich deswegen, weil frame_to_mac->payload kein uint8_t (oder
etwas kompatibles) ist.
Du brauchst ganz dringend ein C-Buch, welches du von Anfang an durch
arbeiten musst!
Wirklichm, ehrlich, wahrhaftig! Ohne vernünfitge Literatur stehst du im
Walde! Auch wenn du das nicht glaubst, die Profis hier wissen das: Man
kann eine Sprache wie C nicht ohne Literatur lernen. Dazu gibt es
zuviele Details, die durch anlassbezogenes Zusammenschnorren von
Viertelwissen in Foren niemals zusammenkriegst, die aber allesamt
ungemein wichtig sind.
Marwin schrieb:> Sorry, aber dir fehlen absolute C-Grundlagen. Ich bezweifle, dass du> hier auf dem richtigen Weg bist. Welches Problem willst du denn> loesen?
Ich weiss dass ich auf dem richtigen Weg bin... Ich habe die Grundlagen
aber ich habe wenig Erfahrung... du bist vllt ein freak und machst das
seit jahren... also vergleiche dich nicht mit einem anfänger...
Mini Float schrieb:> Wenn es wirklich nur mit dieser komischen Adresse geht:> uint8_t kommando = *( (uint8t*) 0x20000894);>> kommando ist dann eine Kopie des Speicherinhaltes, auf das der Zeiger> (uint8t*) 0x20000894 zeigt. Stern und Klammer 'rum sorgen nur für> Auflösung, also dass der Herr Prozessor in den Briefkasten Nummer> 0x20000894 rein schaut und die da drin liegende Zahl in kommando> kopiert.
die Frage ist ob das wirklich gewollt ist. Mit den zeiger hat man immer
den aktuellen Inhalt der adresse. eventuell ändert sich ja der wert.
Das man im code überhaupt eine konstante adresse verwendet ist schon
sehr merkwürdig.
WQeißt Du eigentlich was Du tust?
Du scheinst in C-Code zu stochern, den Du nicht verstehst.
Du wirst dem Forum Brocken hin, die kurz vor der überheblichen Frechheit
sind.
Du erwartest Antworten.
Wieso machst Du das?
ibo schrieb:> Marwin schrieb:>> Sorry, aber dir fehlen absolute C-Grundlagen. Ich bezweifle, dass du>> hier auf dem richtigen Weg bist. Welches Problem willst du denn>> loesen?>> Ich weiss dass ich auf dem richtigen Weg bin... Ich habe die Grundlagen
Du hast keine Grundlagen.
Wenn du mit Zeigern (auf dem hier gezeigten Schwierigkeitsgrad) nicht
umgehen kannst, fehlen dir 60% dessen, was man als minimale Grundlagen
zur Durchführung eines realen Projektes bezeichnen kann.
ibo schrieb:> also vergleiche dich nicht mit einem anfänger...
Jeder Profi hat mal klein angefangen und weiß das sehr wohl. Er erinnert
sich auch an Fehler, die er damals gern gemacht hat. Er kann dir aso
sehr wohl mit Rat und Tat beiseite stehen. Wenn er dir ein gutes C-Buch
empfiehlt, was soll daran falsch sein? Wenn du dir das nicht leisten
willst, dann schau halt in ein C-Grundlagenskript rein.
Warum erwächst nur bei vielen Fragestellern eher die Beratungsresistenz
als die Einsicht, noch nicht so viel Wissen oder Erfahrung zu haben?
mfg mf
PS:
Vielleicht liegts an der Generation derer, die ihr Smartphone als
"Gehirnverlängerung" bezeichnen. Gibts da nicht ne App dafür? scnr...
Ich springe in die Funktion nur wenn der Wert da drin aktualisiert
wird... Also ich frage dann mal so:
Kann mir jemand die verschiedenen(mit - ohne Klammer -> das sind die,
mit denen ich schwierigkeiten habe) Zeiger erklären? Und ich such mir
das raus was ich brauch...
ibo schrieb:> Kann mir jemand die verschiedenen(mit - ohne Klammer -> das sind die,> mit denen ich schwierigkeiten habe) Zeiger erklären? Und ich such mir> das raus was ich brauch...
Das Internet wär nicht das Internet, wenn es nicht schon sowieso in sich
so redundant wäre. http://www.google.com/search?q=zeiger+c
Kannst dir auch ein Buch kaufen. z.B. "C-Programmierung unter Windows
Linux Unix" von Helmut Herold und Jörg Arndt.
Dann suchst du dir da einfach das raus, was du brauchst.
Bevor hier jemand anfängt zu erklären und nachher die Hälfte für die
Katz' war.
mfg mf
PS: Casten solltest du dir auch noch mal ansehen.
danke trotzdem an alle die mir weiterhelfen wollten...
Mini Float schrieb:> PS: Casten solltest du dir auch noch mal ansehen.
das habe ich gesucht... vielen dank...
ibo schrieb:> Kann mir jemand die verschiedenen(mit - ohne Klammer -> das sind die,> mit denen ich schwierigkeiten habe) Zeiger erklären? Und ich such mir> das raus was ich brauch...
einfach nur dreist.
ibo schrieb:> danke habs inzwischen hinbekommen und dabei NOCHMAL WAS DAZUGELERNT
Schön.
Und wenn du jetzt noch bedenkst, dass du das alles in einem 1/10 der
Zeit in einem C-Buch gefunden hättest UND noch 300 weitere Details, die
du auch noch unbedingt wissen müsstest, kannst du dir vielleicht
vorstellen, warum die meisten nicht viel davon halten unter einem
gewissen Niveau Hilfestellung zu geben.
Das man mal ein Detail nicht parat hat und kurz um Hilfe ruft, ist dabei
nicht gemeint. Das ist selbstverständlich kein Problem. Aber wenn klar
ersichtlich ist, dass es sich dabei um ein richtiges
Rundumschlag-Wissens-Loch handelt, dann ist es einfach nicht sinnvoll.
Ein Themenkreis, der zb mit deinen Fragen hier unmittelbar
zusammenhängt, ist zb "Argument-Passing an Funktionen". Ein weiterer
Themenkreis ist "Zusammenhang Array-Pointer", damit unmittelbar zusammen
hängt wiederrum "Stringverarbeitung". Die Dinge sind alle ineinander
verwoben und wenn man an einer Stelle Wissenslücken hat, dann hat man
sie auch in den anderen Bereichen.