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);
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
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 ...
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.
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.
> 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.
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.