Witam
Próbuje od jakiegoś czasu zaadoptować bibliotekę FatFSby ElmChan R0.15.
Załączam oryginalną lib R0.15(zip) poniżej.
Użyłem Atmegi 1284P Dip40 . Czytnik kart skonstruowałem sam (pod arduino libs działa).
Jakie zmiany w kodzie zrobiłem:
W oryginale Elm użył konfiguracji przez USART SPI – ja skonfigurowałem pod SPI
W pliku ffconf.h:
* dodałem dyrektywę „#define DRV_MMC 0” , żeby funkcje w diskio.c były wywoływane dla mmc_avr_spi.c i dodałem wpis „mmc_avr_spi.c” w sekcji: CSRC
* zmieniłem #define FF_VOLUMES 2 na #define FF_VOLUMES 1
W main. c używam funkcji:
// Give a work area to the default drive
if((f_mount(&FatFs[0], "", 1)) != FR_OK) { //if mount not succedes switch off the RED LED
PORTA &= ~(1 << PA0);
}
, ale otrzymuje błąd jak build’uje :
Compiling .pio\build\ATmega1284P\src\main.o
Linking .pio\build\ATmega1284P\firmware.elf
C:\Users\piern\AppData\Local\Temp\ccLykUVs.ltrans0.ltrans.o: In function `main':
<artificial>.text.startup+0x4f0): undefined reference to `mmc_disk_write'
<artificial>.text.startup+0x568): undefined reference to `mmc_disk_write'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\ATmega1284P\firmware.elf] Error 1
Prześledziłem kolejność wywołań poszczególnych funkcji, aż do `mmc_disk_write' i wygląda to tak:
f_mount(&FatFs[0], "", 1) -->
res = mount_volume(&path, &fs, 0); -->
fmt = find_volume(fs, LD2PT(vol)); -->
fmt = check_fs(fs, 0); -->
if (move_window(fs, sect) != FR_OK) -->
res = sync_window(fs); -->
if (disk_write(fs->pdrv, fs->win, fs->winsect, 1) == RES_OK) -->
DRESULT disk_write (BYTE pdrv, const BYTE *buff, LBA_t sector, UINT count) -->
mmc_disk_write(buff, sector, count); - ta funkcja jest w pliku mmc_avr_spi.c
Co może być przyczyną????
Pozdrawiam
Próbuje od jakiegoś czasu zaadoptować bibliotekę FatFSby ElmChan R0.15.
Załączam oryginalną lib R0.15(zip) poniżej.
Użyłem Atmegi 1284P Dip40 . Czytnik kart skonstruowałem sam (pod arduino libs działa).
Jakie zmiany w kodzie zrobiłem:
W oryginale Elm użył konfiguracji przez USART SPI – ja skonfigurowałem pod SPI
W pliku ffconf.h:
* dodałem dyrektywę „#define DRV_MMC 0” , żeby funkcje w diskio.c były wywoływane dla mmc_avr_spi.c i dodałem wpis „mmc_avr_spi.c” w sekcji: CSRC
* zmieniłem #define FF_VOLUMES 2 na #define FF_VOLUMES 1
W main. c używam funkcji:
// Give a work area to the default drive
if((f_mount(&FatFs[0], "", 1)) != FR_OK) { //if mount not succedes switch off the RED LED
PORTA &= ~(1 << PA0);
}
, ale otrzymuje błąd jak build’uje :
Compiling .pio\build\ATmega1284P\src\main.o
Linking .pio\build\ATmega1284P\firmware.elf
C:\Users\piern\AppData\Local\Temp\ccLykUVs.ltrans0.ltrans.o: In function `main':
<artificial>.text.startup+0x4f0): undefined reference to `mmc_disk_write'
<artificial>.text.startup+0x568): undefined reference to `mmc_disk_write'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\ATmega1284P\firmware.elf] Error 1
Prześledziłem kolejność wywołań poszczególnych funkcji, aż do `mmc_disk_write' i wygląda to tak:
f_mount(&FatFs[0], "", 1) -->
res = mount_volume(&path, &fs, 0); -->
fmt = find_volume(fs, LD2PT(vol)); -->
fmt = check_fs(fs, 0); -->
if (move_window(fs, sect) != FR_OK) -->
res = sync_window(fs); -->
if (disk_write(fs->pdrv, fs->win, fs->winsect, 1) == RES_OK) -->
DRESULT disk_write (BYTE pdrv, const BYTE *buff, LBA_t sector, UINT count) -->
mmc_disk_write(buff, sector, count); - ta funkcja jest w pliku mmc_avr_spi.c
Co może być przyczyną????
Pozdrawiam
