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);
1 | sd_raw_write(0,myByte,1); |
->
1 | sd_raw_write(0,&myByte,1); |
Vielen Dank, funzt bestens. Wie kann ich ein uint32_t abspeichern?
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
Dein Aufruf bzw. die Argumente von sd_raw_write passen nicht zum Prototyp von sd_raw_write -- wie immer der auch aussieht.
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)
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
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 ...
>warum nicht also die 32bit in 4x 8bit daten verpflücken
genau das versuche ich nun schon nen Tag.
aber wie?
1 | uint32_t data; |
2 | 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.
ooooooooooooooooooooooooh mann, das funzt. ../main.c:105: warning: passing argument 2 of 'sd_raw_write' from incompatible pointer type Die warnung bleibt jedoch.
Dann müsste man mal wissen, wie der Prototyp von sd_raw_write genau aussieht. Ich bin von void* als zweiten Parameter ausgegangen.
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.
Wenn du das als Code formatierst sollte das nicht passieren
1 | uint8_t sd_raw_write(offset_t offset, const *uint8_t** buffer, uintptr_t length) |
1 | 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.
1 | uint32_t data; |
2 | sd_raw_write( 0, (uint8_t*)&data, sizeof(data) ); |
Was soll denn argument 3 sein? Das müsste doch size_t sein? Johann
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.