www.mikrocontroller.net

Forum: Compiler & IDEs 'sd_raw_write' makes pointer from integer without a cast


Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Folgender code funktioniert nicht, ich bekomme die Warnung:
(Ulrich Radig, sdcard lib)

../main.c:100:
warning: passing argument 2 of 'sd_raw_write' makes pointer from integer 
without a cast

auch wenn ich (char *) myByte verwende bleibt das Problem.


uint8_t myByte;

sd_raw_write(0,myByte,1);

myByte = 0;

sd_raw_read(0,myByte,1);

puart_putc(myByte);

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sd_raw_write(0,myByte,1);
->
sd_raw_write(0,&myByte,1);

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, funzt bestens.

Wie kann ich ein uint32_t abspeichern?

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bin etwas weiter..

ich versuche mir ne put string funktion zu schreiben


void sd_puts(const char *s) {
  while (*s) {
    sd_raw_write(s,&s,1);
    s++;
  }

nur bekomme da zwei warnungen:
../main.c:57: warning: passing argument 1 of 'sd_raw_write' makes 
integer from pointer without a cast

../main.c:57: warning: passing argument 2 of 'sd_raw_write' from 
incompatible pointer type

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Aufruf bzw. die Argumente von sd_raw_write passen nicht zum 
Prototyp von sd_raw_write -- wie immer der auch aussieht.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuch doch nur ein einfachen uint32 auf die sd karte zu schreiben,
und das beginnend ab position 0.


void sd_put32(uint32_t data) {
  uint8_t ggg = 0;
  char string[11];
  const char s;

  ultoa(data, string, 10);

  while (*s) {
    sd_raw_write(ggg,*s,1);
  ggg++;
  s++;
}


die funktion aus der SD Card lib:

uint8_t sd_raw_write(offset_t offset, const uint8_t* buffer, uintptr_t 
length)

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
von mir aus kann der auch jedes Bit von dem uint32 auch einzelnd 
schreiben.
Aber platzsparender waere natuerlich die 4-Bytes voll aus zu nutzen.

Ich versuche nun ueber den umweg als string das mit ultoa irgendwie auf 
die sd karte zu bekommen

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na du hast eine funktion um 8bit zu schreiben ...

und willst 32bit schreiben
warum nicht also die 32bit in 4x 8bit daten verpflücken

(unsigned char*) 32bitdaten  sind die unteren 8bit
senden
(unsigned char*) 32bitdaten>>8  die 32bit um 8 nach rechts schieben
die nächsten 8bit senden
...
...
...
...
bis die  oberen 8bit erreicht sind und weg ...

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>warum nicht also die 32bit in 4x 8bit daten verpflücken

genau das versuche ich nun schon nen Tag.
aber wie?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uint32_t data;
sd_raw_write(0,&data,sizeof(data));

Und deine Funktion oben zum Schreiben eines Strings sieht abenteuerlich 
aus. Da wäre mal etwas C-Lektüre lesen zum Thema Pointer und Strings 
angebracht. C lernt man nicht mal so eben nebenbei durch rumprobieren.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ooooooooooooooooooooooooh mann, das funzt.

../main.c:105: warning: passing argument 2 of 'sd_raw_write' from 
incompatible pointer type


Die warnung bleibt jedoch.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann müsste man mal wissen, wie der Prototyp von sd_raw_write genau 
aussieht. Ich bin von void* als zweiten Parameter ausgegangen.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uint8_t sd_raw_write(offset_t offset, const *uint8_t** buffer, 
uintptr_t length)


Bin ich der Einzige der es blöd findet, dass man Fettdruck hier durch 
Sterne davor und dahinter bekommt? Bzw. in so einem Fall wie oben nicht 
bekommt? [ b ]Fettdruck[ /b ] ist doch besser... (und wieso zum Teufel 
soll das Spam sein?!)

Nun gut, er will also einen Zeiger auf einen Puffer, der 8 Bit hat und 
unsigned ist. Und const. Dann gib ihm doch genau das.

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du das als Code formatierst sollte das nicht passieren
uint8_t sd_raw_write(offset_t offset, const *uint8_t** buffer, uintptr_t length)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uint8_t sd_raw_write(offset_t offset, const uint8_t* buffer, uintptr_t length)

> Nun gut, er will also einen Zeiger auf einen Puffer, der 8 Bit hat und
> unsigned ist. Und const.

Das const spielt hier keine Rolle.
Es ist im Grunde lediglich die Zusicherung der Funktion, dass sie die 
Bytes nicht ändern wird, auf die sie eine Adresse erhält.

> Dann gib ihm doch genau das.

Yep.
uint32_t data;
sd_raw_write( 0, (uint8_t*)&data, sizeof(data) );

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll denn argument 3 sein? Das müsste doch size_t sein?

Johann

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.