also wie PickNick und auch ich das sehen, ist das nur logisch, es wird ERST p++ ausgehführt und DANACH der cast auf char-pointer!
PickNicks Lösung musst du verwenden, dann sollte es gehen!
Der 2te fehler ist genau das gleiche Problem, er kann einen void-pointer nicht inkrementieren, weil der Cast erst NACH der Operation durchgeführt werden würde!
@PickNick deine 2te Lösung sieht gruselig aus, du castest die Adresse in einen Zahlenwert um, manipulierst ihn udn dann wieder zu einem Pointer ... (da schüttelt es mich XD)
PS: ich würde statt einem char* lieber einen byte* oder einen uint8* verwenden ... ist jetzt nur ne stilsache, aber char kann auch als unicode interpretiert werden und der hat 16bit!
muss mich selber zusammenreissen nicht immer char zu schreiben
So viel Klammer muss halt sein wenn man sicher gehen will dass der compiler es auch versteht!Code:void uart_send(void* data, unsigned int size) { while(size--) uart_putc(*(((byte*)data)++)); /* erst casten, dann inkrementen, dann dereferenzieren */ } void uart_send(void* data, unsigned int size, unsigned int repeat = 1 ) { //keine Ahnung ob der WinAVR optionale Parameter unterstützt aber macht es noch multifunktionaler! while(repeat--) { for(unsigned int i = 0; i < size; i++) uart_putc(*(((byte*)data)++)); /* erst casten, dann inkrementen, dann dereferenzieren */ } }








Zitieren

Lesezeichen