invalid conversion from 'void*' to 'unsigned char*'

Ik ben een Arduino mega 2560 aan het programmeren. Hierbij heb ik een tft LCD gekocht en daarvoor heb ik een SD kaart nodig zodat ik mijn fotos erop kan zetten

Ik heb deze bibliotheek gedownload maar het geeft me deze error:

C:\Arduino\libraries\pff\pff.cpp: In function 'FRESULT pf_read(void*, short unsigned int, short unsigned int*)': C:\Arduino\libraries\pff\pff.cpp:585: error: invalid conversion from 'void*' to 'unsigned char*'

Het probleem zit hier volgens mij:

pff.cpp:

FRESULT pf_read (
void* buff, /* Pointer to the read buffer (NULL:Forward data to the stream)*/
WORD btr, /* Number of bytes to read */
WORD* br /* Pointer to number of bytes read */
)

pff.h:

FRESULT pf_read (void*, WORD, WORD*); /* Read data from the open file */

Wanneer ik er een .c bestand van maak, krijg ik nog meer errors, zoals dezen:

tft_menu.cpp.o: In function open_root_dir()': C:\AppData\Local\Temp\build7310099894910129341.tmp/tft_menu.cpp:594: undefined reference topf_opendir(DIR*, char const*)'
tft_menu.cpp.o: In function mount_sd()': C:\AppData\Local\Temp\build7310099894910129341.tmp/tft_menu.cpp:583: undefined reference todisk_initialize()'
C:\AppData\Local\Temp\build7310099894910129341.tmp/tft_menu.cpp:585: undefined reference to pf_mount(_FATFS_*)'
tft_menu.cpp.o: In functionbitmap_show(char*)':
C:\AppData\Local\Temp\build7310099894910129341.tmp/tft_menu.cpp:472: undefined reference to pf_open(char const*)'
C:\AppData\Local\Temp\build7310099894910129341.tmp/tft_menu.cpp:476: undefined reference topf_read(void*, unsigned short, unsigned short*)' C:\AppData\Local\Temp\build7310099894910129341.tmp/tft_menu.cpp:518: undefined reference to pf_read(void*, unsigned short, unsigned short*)' tft_menu.cpp.o: In functionshow_bitmap()':
C:\AppData\Local\Temp\build7310099894910129341.tmp/tft_menu.cpp:603: undefined reference to `pf_readdir(DIR*, FILINFO*)'

Daarom denk ik dat et als een .cpp moet worden gecompileerd

Volgens mij moet het toch pff.c zijn. Of heb je hem als pff.cpp gedwonload? Zo ja: waar heb je die pff.cpp dan van gedownload? Dan kunnen wij met dezelfde bestanden als jij hebt het eens zelf proberen te compileren.

Er van uitgaande dat je toch een pff.c bestand hebt, zou je in de Arduino-sketch dan dit om de include van het header-bestand kunnen zetten:

[code=cpp]extern "C" {
#include "pff.h"
}[/code]

Nog een advies: zitten er geen c++-classes bij die hetzelfde doen (toegang krijgen tot de SD-kaart)? Ik heb voorbeelden gezien van dezelfde library (pff.c/pff.h) waarbij ook een bestanden als diskio.h zat met een functie

DRESULT disk_readp (void*, DWORD, WORD, WORD);

. Dan hoe je die hele pff-zaken in zijn geheel niet meer te gebruiken.

Tipp, bij compilers is het zo dat ze soms in de war raken als ze een fout hebben gezien. Dus controleer alle waarschuwingen tot de eerste fout, (of daar niet een echt probleem tussen zit), en richt je dan op de eerste fout.

Ja ik heb het bestand als cpp gedownload van: http://www.nuelectronics.com/estore/index.php?main_page=product_info&c…

en dan arduino library en dan tft examples en dan tft_menu, dan zie je wel drie bestanden staan: bitmap [PDE bestand], calibrate[.cpp], f15x22[H bestand] en tft_menu[.cpp].

Vervolgens heb ik in mijn arduino project drie tabbladen:
1) tft_menu
2) bitmap
3) calibrate

Bovenaan in de bitmap file staat wel:
extern "C"{
#include <pff.h>
#include <diskio.h>
}

Maar wanneer ik dit run met pff.c: krijg ik dit soort errors:
tft_menu.cpp.o: In function `mount_sd()':
C:\AppData\Local\Temp\build6087887561127459103.tmp/tft_menu.cpp:580: undefined reference to `disk_initialize'
pff\pff.c.o: In function `get_fat':
C:\libraries\pff/pff.c:84: undefined reference to `disk_readp'
C:\libraries\pff/pff.c:85: undefined reference to `disk_readp'
C:\Arduino\libraries\pff/pff.c:91: undefined reference to `disk_readp'
pff\pff.c.o: In function `dir_read':
C:\Arduino\libraries\pff/pff.c:251: undefined reference to `disk_readp'
pff\pff.c.o: In function `dir_find':

en wanneer ik het dus als .cpp bestand opsla krijg ik de fout waarmee ik deze topic ben begonnen.

En wanneer ik het in mijn tft_menu zet krijg ik ook een mooi waslijst aan errors met extern "c" rondom de include:
tft_menu:-1: error: 'POINT' was not declared in this scope
tft_menu:-1: error: 'tp' was not declared in this scope
tft_menu:-1: error: 'POINT' was not declared in this scope
tft_menu:-1: error: 'tp' was not declared in this scope
tft_menu:-1: error: 'POINT' was not declared in this scope
tft_menu:-1: error: 'displayPtr' was not declared in this scope
tft_menu:-1: error: 'POINT' was not declared in this scope
tft_menu:-1: error: 'screenPtr' was not declared in this scope
tft_menu:0: error: 'MATRIX' was not declared in this scope
tft_menu:0: error: 'matrixPtr' was not declared in this scope
tft_menu:0: error: initializer expression list treated as compound expression
tft_menu.cpp: In function 'uint8_t get_stable_tp(POINT*)':
tft_menu:135: error: 'uint8_t get_stable_tp(POINT*)' redeclared as different kind of symbol
tft_menu:-1: error: previous declaration of 'uint8_t get_stable_tp'
tft_menu.cpp: In function 'char tp_inside_menu(POINT*)':
tft_menu:161: error: 'char tp_inside_menu(POINT*)' redeclared as different kind of symbol
tft_menu:-1: error: previous declaration of 'char tp_inside_menu'

Ik ben hier al zo LANG mee bezig, ik zou een opl ECHT WAARDEREN!

PS: ik gebruik arduino 1.0 om te compileren etc.


#ifdef __cplusplus
extern "C" {
#endif 

#include a
#include ...

#ifdef __cplusplus
}
#endif

Dan werkt het ook als je het toch als C compileert.

Wat als je


BYTE *rbuff = buff

veranderd in:


BYTE *rbuff = (BYTE *) buff

(in pff.c 585)

Al verandert en het resultaat is helaas nog steeds hetzelfde :(

ik startte dus vanaf begin zoals OP, en zocht dus naar die functies, bleek dat die in mmc.c zitten en dat ze er niet bij geinclude zijn. Dus ik heb ze geinclude nu. En nu geeft ie mij deze error vanaf init_spi():

C:\libraries\mmc/mmc.h: In function 'void init_spi()':
C:\libraries\mmc/mmc.h:21: error: 'PORTL' was not declared in this scope
C:\libraries\mmc/mmc.h:21: error: 'PORTL0' was not declared in this scope
C:\libraries\mmc/mmc.h:22: error: 'PORTB' was not declared in this scope
C:\libraries\mmc/mmc.h:22: error: 'PORTB2' was not declared in this scope
C:\libraries\mmc/mmc.h:22: error: 'PORTB1' was not declared in this scope
C:\libraries\mmc/mmc.h:23: error: 'DDRB' was not declared in this scope
C:\libraries\mmc/mmc.h:23: error: 'PORTB0' was not declared in this scope
C:\libraries\mmc/mmc.h:25: error: 'DDRL' was not declared in this scope
C:\libraries\mmc/mmc.h:27: error: 'SPCR' was not declared in this scope
C:\libraries\mmc/mmc.h:27: error: 'SPE' was not declared in this scope
C:\libraries\mmc/mmc.h:27: error: 'MSTR' was not declared in this scope
C:\libraries\mmc/mmc.h:28: error: 'SPSR' was not declared in this scope
C:\libraries\mmc/mmc.h:28: error: 'SPI2X' was not declared in this scope

En ik ben aan het uitzoeken hoe ik deze definities eraan toevoeg

#include TFT_ARDUINO_MEGA.h [had ik al in mijn sketch staan, maar nu heb ik het in de mmc.h gezet]

Geen verschill... Maar ik ben toch wel op de goede weg nu??

Het rare is dat het deze kerel wel gelukt is, dus wat doe ik verkeerd?? Ik heb ook de 2.4 inch library gedownload en geprobeerd en ik krijg dezelfde error...

http://arduino.cc/forum/index.php/topic,85061.0.html

Dit probleem is gefixt.

Het probleem was dat ik niet goed had gelezen en dacht dat ik de libraries moest kopieren naar een mapje die aruino zelf had gemaakt in mijn documenten 'Arduino' en dan daar een map libraries aan moest maken en daar voor elk .cpp en .h een map moest maken met de desbetreffende naam van de header en dan de .cpp/.c/.h erin zetten.

Ik kon ze wel daarna bij import library boven kiezen, dus ik dacht dat dat wel goed was, maar niet dus.

Oplossing: Wanneer je Arduino download en unzipt, staat er een folder bij, Libraries. Die open je en vervolgens exctract je de map met alle libraries en examples die erin zitten naar je map 'Libraries'.

En nu werkt het :)