Forum: Mikrocontroller und Digitale Elektronik Adresse eines pointers kontrollieren


von S. F. (deffman)


Lesenswert?

Hallo zusammen,

ich bin gerade dabei mich bei beinem EVK1100 board von atmel mit AVR32 
Studio einzuarbeiten. Da habe ich einen Beispielcode bei dem ich etwas 
kontrollieren möchte! Und zwar gibt es diese Methode:

int spi_initMaster(volatile avr32_spi_t *spi, const spi_options_t 
*options)
{
  .....
}

Der Pointer *spi müsste meiner Ansicht nach die Startaddresse des SPI 
bereichs sein, also laut Datenblatt 0xFFE00400. Wie kann ich das jetzt 
kontrollieren?
Ich habe es so probiert:

int spi_initMaster(volatile avr32_spi_t *spi, const spi_options_t 
*options)
{
  int test;
  printf(test,"%p",(void *)spi);
}

Da motzt er zum einen rum:'sprintf' makes pointer from integer without a 
cast und zum anderen kommt ein total unsinniger Wert = 4 raus, was nicht 
sein kann.

Weiß jemand wie ich das richtig machen kann?

Gruß und Danke
Stefan

von Stefan E. (sternst)


Lesenswert?

sprintf produziert einen string, den du weiß Gott wo in den Speicher 
schreibst.
> sprintf(test,"%p",(void *)spi);
test muss hier ein char* sein.

von Wolfgang Mües (Gast)


Lesenswert?

Sollte der erste Parameter von sprintf nicht ein Zeiger auf einen 
Speicherbereich sein, in dem der String landet?

von S. F. (deffman)


Lesenswert?

Hm hat leider auch nicht funktioniert, aber ich habs jetzt anders 
rausbekommen. Ich kann mit dem Mauscursor drüberfahren, dann zeigt er 
mir die Adresse an. Und meine Vermutung war richtig!

Aber würde mich trotzdem noch interessieren wie das geht. Also er hat 
immer noch den gleichen Fehler gebracht mit dem *char pointer.

PS: hatte mich oben verschrieben! In meinem Code ist es printf.

von Stefan E. (sternst)


Lesenswert?

> Aber würde mich trotzdem noch interessieren wie das geht. Also er hat
> immer noch den gleichen Fehler gebracht mit dem *char pointer.
>
> PS: hatte mich oben verschrieben! In meinem Code ist es printf.

Wer weiß, welchen Code du nun tatsächlich ausprobiert hast.

Mit sprintf so:
1
char buf[20];
2
sprintf(buf,"%p",spi);
und mit printf so:
1
printf("%p",spi);

von S. F. (deffman)


Lesenswert?

Okay vielen Dank!!! Hat funktioniert!

Schönen Abend noch!

Gruß Stefan

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.