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.
Sorry, aber dir fehlen absolute C-Grundlagen. Ich bezweifle, dass du hier auf dem richtigen Weg bist. Welches Problem willst du denn loesen?
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...
ibo schrieb: > uint8_t kommando ; > kommando = frame_to_mac->payload; //Das ist nochmal der Zeiger auf > die obige adresse wo ist da ein Zeiger?
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: >> PS: Casten solltest du dir auch noch mal ansehen. > > das habe ich gesucht... PPS: steht auch in jedem C-Buch.
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.
danke habs inzwischen hinbekommen und dabei NOCHMAL WAS DAZUGELERNT
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.