Inhalt einer Adresse in einer Variable speichern

Gast #2740025
Lesenswert?

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....
Gast #2740048
Lesenswert?

@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???
Gast #2740070
Lesenswert?

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.
#2740071
Lesenswert?

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
#2740072
Lesenswert?

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.
Gast #2740075
Lesenswert?

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...
Gast #2740084
Lesenswert?

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.
Gast #2740085
Lesenswert?

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?
#2740086
Lesenswert?

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.
#2740087
Lesenswert?

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...
Gast #2740091
Lesenswert?

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...
#2740102
Lesenswert?

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.
#2740197
Lesenswert?

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.

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