Forum: Mikrocontroller und Digitale Elektronik Inhalt einer Adresse in einer Variable speichern


von ibo (Gast)


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....

von Peter II (Gast)


Lesenswert?

ibo schrieb:
> switch(kommando)

switch(*kommando)

von Achim M. (minifloat)


Lesenswert?

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

von ibo (Gast)


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???

von Peter II (Gast)


Lesenswert?

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.

von ibo (Gast)


Lesenswert?

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...

von Peter II (Gast)


Lesenswert?

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.

von Marwin (Gast)


Lesenswert?

Sorry, aber dir fehlen absolute C-Grundlagen. Ich bezweifle, dass du 
hier auf dem richtigen Weg bist. Welches Problem willst du denn 
loesen?

von ibo (Gast)


Lesenswert?

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)......

von Peter II (Gast)


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.

von Achim M. (minifloat)


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

von Karl H. (kbuchegg)


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.

von ibo (Gast)


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...

von Klaus W. (mfgkw)


Lesenswert?

ibo schrieb:
> uint8_t kommando ;
> kommando = frame_to_mac->payload;     //Das ist nochmal der Zeiger auf
> die   obige adresse

wo ist da ein Zeiger?

von ibo (Gast)


Lesenswert?

struct.....
{

uint8_t *payload;

}

von Peter II (Gast)


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.

von spontan (Gast)


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?

von Karl H. (kbuchegg)


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.

von Achim M. (minifloat)


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...

von ibo (Gast)


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...

von Achim M. (minifloat)


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.

von ibo (Gast)


Lesenswert?

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...

von Klaus W. (mfgkw)


Lesenswert?

ibo schrieb:
>> PS: Casten solltest du dir auch noch mal ansehen.
>
> das habe ich gesucht...

PPS: steht auch in jedem C-Buch.

von Klaus W. (mfgkw)


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...

einfach nur dreist.

von ibo (Gast)


Lesenswert?

danke habs inzwischen hinbekommen und dabei NOCHMAL WAS DAZUGELERNT

von Karl H. (kbuchegg)


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.

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
Noch kein Account? Hier anmelden.