(Używam wersji WinAVR 20040404 - gdyż pod nią poprawnie działa biblioteka do obsługi dysku)
Urządzenie działa poprawnie, czyli czyta pliki, zapisuje itp. ale z kodem męczę się od jakiegoś czasu i nic ciekawego dotychczas nie uzyskałem.
Fragment kodu: (na prośbę zamieszczę co trzeba)
Kod: Zaznacz cały
void UARTReceiveString(void)
{
unsigned char i=0;
do
{
if ((bufor[i] = uart_getc()) == '\n') ReadHDD(); printf_P(PSTR("WORK")); break; //dodaje odebrane znaki do tablicy, jesli odbierze '\n' to przerywa petle, wychodzi z funkcji i uruchamia odczyt pliku.
i++;
}while (i < 32); // zeby nie przepelnic bufora
}
void ReadHDD(void)
{
if (farq = fatFopen(bufor)) { //Otwiera plik
printf_P(PSTR("\r\nReading file...\r\n"));
while(!fatFeof(farq)) { //Petla odczytuje znaki
printf_P(PSTR("%c"), fatFgetc(farq)); //Wyswietla je
}
fatFclose(farq); //Zamkniecie
} else { printf_P(PSTR("Nie mozna otworzyc")); }
}
int main(void)
{
mcuInit(); // start ATMega32
fdevopen(uart_putc, uart_getc, 0); // configure printf to send data to serial port
printf_P(PSTR("ODCZYT PLIKOW\r\n"));
ataInit(); // Start ATA
fatInit(); // Start FAT
fatCddir("pliki"); //Wchodzi do folderu pliki
printf_P(PSTR("PLIKI\r\n"));
dir_serial(fatGetCurDirCluster()); //Wyswietla listing plikow (funkcja biblioteki)
printf_P(PSTR("Podaj nazwe pliku (np. plik.txt) do odczytania\r\n"));
/*Tu jest cos nie tak - proba zrobienia aby program czekal na przeslanie danych i uruchamial funkcje "USARTReceiveString()" ktora do tablicy bufor laduje kolejne znaki.
*/
while(1) {
if (uart_getc()) {
UARTReceiveString();
printf_P(PSTR("cos odebrano"));
//opcjonalnie break;
}
}
}(Skąd to się niby bierze?)
Może ma ktoś jakiś prosty przykład działającego odbierania? Szukałem, ale to co znalazłem próbowałem zaimplementować, lecz z marnym skutkiem...
Dziekuje za pomoc.