Pages: [1]   Go Down
Author Topic: SD Karten Zugriff über Wifi sehr langsam  (Read 1051 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe einen Arduino Mega und ein Wifi-Shield. Ich möchte die SD Karte vom Wifi-Shield über WLAN auslesen. Das funktioniert prinzipiell auch ist aber leider sehr langsam und damit für mich ziemlich unbrauchbar.

Den Code habe ich von: http://www.ladyada.net/learn/arduino/ethfiles.html
übernommen und für den Wifi-Shield modifiziert.

Das auslesen der Daten von SD-Karte und senden über WLAN erfolgt in dieser Schleife:

Code:
int16_t c;
while ((c = file.read()) > 0) {
client.print((char)c);
}

Weiß jemand warum das Lesen so langsam ist? Und wie geht es schneller?
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 263
Posts: 21590
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie langsam ist langsam?
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe eine Textdatei mit Messwerten (2000 Werte) die ich übertragen möchte.
Über WLAN kommen so ca. 10 Zeichen pro Sekunde an. Es macht hinsichtlich Geschwindigkeit keinen Unterschied ob ich die Daten mit dem Browser oder über die Kommandozeile (get) anfordere.
Momentan verwende ich die Library: SdFat.h. Library SD.h habe ich auch schon ausprobiert. Ergebnis ist immer das gleiche.
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 263
Posts: 21590
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du liest immer 1 Byte und verschickst dann 1 Byte oder machst Du es in Blöcken?
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Genau...Ich lese 1Byte und schicke es anschließend raus:

Code:
int16_t c;
while ((c = file.read()) > 0) {
client.print((char)c);
}
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 263
Posts: 21590
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn Du es blockweise Machst wirds schneller. Ich weiß jetzt nicht wie umfangreich Dein Sketch ist (wieviel RAM frei ist). Fang mal mir 32 Byte an und versuch's dann mit größeren Blöcken.
Grüße Uwe
« Last Edit: December 09, 2012, 04:38:48 pm by uwefed » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für den Tipp! Ich probiere es mal Blockweise.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo, das gleiche habe ich auch vor und bei mir ist die Übertragung auch sehr langsam, vor allem weil ich bilder übertragen will. Allerdings bekomme ich es überhaupt nicht hin hier die Daten Blockweise zu übertragen. Hat hier jemand zufällig ein kleines Beispiel wie man Blockweise die SD Daten auslesen kann?

Danke
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Definiere Dir einfach einen Puffer, setze das letzte byte auf "0" (Wert Null, nicht das Zeichen 0) und lese byteweise von der SD-Karte (gibt leider kein Blockread). Am Ende dann den Puffer mittels client.print() abschicken.

z.B.
Code:

#define BUFFERSIZE 32

//BUFFERSIZE  bytes plus null-byte
char buffer[BUFFERSIZE +1];

//zähler für puffer
int i =0;

//solange noch daten vorhanden sind
while( file.available()) {
    buffer[i++] = file.read();
    //wenn BUFFERSIZE  zeichen gelesen, dann puffer abschicken
    if(i == BUFFERSIZE ) {
        //nullterminierung
        buffer[i] = 0

        //puffer abschicken
        clientprint(buffer);

        //zähler auf 0 setzen
        i=0;
    }
}
//letzen rest auch noch abschicken, weniger als BUFFERSIZE  bytes im puffer nach file-ende
if(i > 0) {
   //nullterminierung
    buffer[i] = 0

    //puffer abschicken
    clientprint(buffer);

}



Achtung!! Code ist aus der Hüfte geschossen und ungetestet.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke schon mal!!

Werde es mal testen. Sieht aber logisch aus
Logged

Pages: [1]   Go Up
Jump to: