Zeiger-Problem

Gast #1487296
Lesenswert?

hi,
ich habe ein kleines Programm geschrieben. Das Programm soll Adresse und 
der Inhalt ausgeben.
Ich bekomme immer diese Warnung:
warning: assignment makes pointer from integer without a cast

wegen dieser Schreibweise: Ptr_Reg = Adr_Reg;
Angehängte Dateien:
#1487350
Lesenswert?

Wobei allerdings mehr als zweifelhaft ist, ob das dem entspricht, was 
sich der TO vorstellt.
Syntaktisch ist es auf jeden Fall korrekt.

Allerdings bin ich mir ziemlich, sicher das das Hauptprogramm nicht 
einfach nur eine Pintervariable auf so eine uart struct übergeben soll, 
sondern dass die Funktion eigentlich die Adresse einer uart struct haben 
will.
Da wartet daher schon der nächste logische Fehler.
#1487401
Lesenswert?

gasti schrieb:
> Hi,
>
> ja hast du recht, aber ich wollte erst diese Warnung korrigiert.

Schön.
Ich denke allerdings, dass du damit immer noch nicht das hast, was du 
haben willst. Dein jetziger Code ist nichts anderes als eine verdammt 
komplizierte Art und Weise um

    ptr_uartStruct->Uart_Message_ID = ptr_uartStruct->Uart_Mask;

zu schreiben. Und anhand der Namen der Member denke ich nicht, dass du 
das wolltest. Aber ich kann mich auch irren.
#1487433
Lesenswert?

Karl heinz Buchegger schrieb:
> gasti schrieb:
>> Hi,
>>
>> ja hast du recht, aber ich wollte erst diese Warnung korrigiert.
>
> Schön.
> Ich denke allerdings, dass du damit immer noch nicht das hast, was du
> haben willst. Dein jetziger Code ist nichts anderes als eine verdammt
> komplizierte Art und Weise um
>
>     ptr_uartStruct->Uart_Message_ID = ptr_uartStruct->Uart_Mask;
>
> zu schreiben. Und anhand der Namen der Member denke ich nicht, dass du
> das wolltest. Aber ich kann mich auch irren.

Tschuldigung. Stimmt nicht ganz. Die Entsprechung wäre
1
     ptr_uartStruct->Uart_Message_ID = (uint8_t)ptr_uartStruct->Uart_Mask;

(Das grenzt schon fast an Gemeinheit, den Cast hinter ein paar 
Pointeroperationen zu verstecken)
#1487585
Lesenswert?

Karl heinz Buchegger schrieb:

> Tschuldigung. Stimmt nicht ganz. Die Entsprechung wäre
1
     ptr_uartStruct->Uart_Message_ID = (uint8_t)ptr_uartStruct->Uart_Mask;

Dem würde ich widersprechen. Wenn man in seinem Code die angewarnte 
Zeile durch das vorgeschlagene "Ptr_Reg = &Adr_Reg;" ersetzt, reduziert 
sich das Ganze eher zu:
1
Adr_Reg = ptr_uartStruct->Uart_Mask;
#1487597
Lesenswert?

Stefan Ernst schrieb:
> Karl heinz Buchegger schrieb:
>
>> Tschuldigung. Stimmt nicht ganz. Die Entsprechung wäre
>
1
>      ptr_uartStruct->Uart_Message_ID =
2
> (uint8_t)ptr_uartStruct->Uart_Mask;
3
>
>
> Dem würde ich widersprechen. Wenn man in seinem Code die angewarnte
> Zeile durch das vorgeschlagene "Ptr_Reg = &Adr_Reg;" ersetzt, reduziert
> sich das Ganze eher zu:
>
1
Adr_Reg = ptr_uartStruct->Uart_Mask;


Ack.
Da hat mich der Pointer auch schon konfus gemacht.
Gast #1494145
Lesenswert?

hallo,

ich bin wieder da und ekläre euch was ich machen will.

Ich bekomme über uart so ein String:"WRRG 28 FF".Der String hat diese 
Bedeutung:
WRRG = Write Register
28 = Adresse = ptr_uartStruct->Uart_Message_ID
FF = der Wert = ptr_uartStruct->Uart_Mask
Was mich interessiert ist der Register und sein Inhalt.
 Adr_Reg = ptr_uartStruct->Uart_Message_ID;
 Val_Reg= ptr_uartStruct->Uart_Mask;
 Ptr_Reg = &(Adr_Reg);
 *Ptr_Reg = Val_Reg;

mit: printf("the value %x has been written in adresse %x", 
Val_Reg,ptr_uartStruct->Uart_Message_ID); bekomme ich diese Meldung:

warning: format '%x' expects type 'unsigned int', but argument 5 has 
type 'uint32_t'

mit: printf("the value %x has been written in adresse %x", 
Val_Reg,Ptr_Reg);
bekomme diese Meldung:
warning: format '%x' expects type 'unsigned int', but argument 5 has 
type 'uint8_t *'
und die Adresse stimmmt nicht.
#1494168
Lesenswert?

gasti schrieb:

> WRRG = Write Register

Und was sind das für Register?

Du willst doch hoffentlich nicht am Compiler vorbei irgendwelche CPU 
Register manipulieren?

> mit: printf("the value %x has been written in adresse %x",
> Val_Reg,ptr_uartStruct->Uart_Message_ID); bekomme ich diese Meldung:
>
> warning: format '%x' expects type 'unsigned int', but argument 5 has
> type 'uint32_t'

und recht hat er
#1494176
Lesenswert?

gasti schrieb:
> ich bekomme die selbe Warnung

%x    ist das Formatzeichen für einen unsigned int als HEX-Ausgabe
%lx   ditto für unsigned long als HEX-Ausgabe
%p    ist das Formatzeichen für einen Pointer


Einfach das C-Lehrbuch deiner Wahl auf der Seite für die zulässigen 
Formatangaben bei printf aufschlagen und nachlesen.
Gast #1495262
Lesenswert?

> Ptr_Reg = &(Adr_Reg);

Ist das wirklich so gewollt?
Nach dem restlichen Text ist das dann die Adresse der Variablen, in der 
die Adresse steht?!
Sollte die Zeile darunter dann nicht wenigsten
1
**Ptr_Reg = Val_Reg;
lauten (man beachte den zweiten Stern)?

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