Problema al listar nombres de ficheros de la SD

Deseo guardar en cadenas char lor nombres de los ficheros que hay en una SD (hasta un tope de 55), pero no lo consigo.

Si listo los nombres con openNextFile() utilizando el ejemplo listFiles de la librería SD, me dice que hay 10 ficheros, y muestra los nombres uno a uno por consola.

#define MAXFILES 55
char names[14][MAXFILES];
int x;

void listFiles2(File dir) 
{
   x = 0;
   while(true) 
   {
     File entry =  dir.openNextFile();
     if (! entry)  break;   
     x++ ;
     if(x == MAXFILES - 1) break;
     Serial.println(entry.name());   
     entry.close();
   }
   Serial.print(x); 
   Serial.println(" ficheros en la SD");
}

Pero si listo los nombres copiándolos en names[][], no muestra ningún nombre por consola y me dice que hay 0 ficheros, o sea, dir.openNextFile() da error

#define MAXFILES 55
char names[14][MAXFILES];
int x;

void listFiles2(File dir) 
{
   x = 0;
   while(true) 
   {
     File entry =  dir.openNextFile();
     if (! entry)  break;   
    strcpy(names[x],entry.name());  // --- esta línea es la que estropea todo ---
     x++ ;
     if(x == MAXFILES - 1) break;
     Serial.println(entry.name());   
     entry.close();
   }
   Serial.print(x); 
   Serial.println(" ficheros en la SD");
}

¿Tenéis alguna sugerencia de por qué la línea que contiene strcpy() produce ese comportamiento anómalo?

[win xp, ide arduino 1.0.5, tarjeta Nano V3.0 ATmega328 16M]

Hola.
Prueba primero cambiando la definición de names al contrario (creo que debe ser así):

char names[MAXFILES][14]

y reduce MAXFILES por ejemplo a 5. Podrías estar sufriendo un problema de falta de RAM (no sé cuánta se puede estar tragando por sí sola la librería SD).

Y digo yo, es tan dificil postear todo el código y no solo la rutina que te da problemas. Asi podriamos verlo en su contexto. Siempre eso ayuda.

Gracias a los dos.

@noter, tenías razón, por lo visto era un problema de memoria, poniendo MAXFILES = 25 va bien. Pero no entiendo la razón de ese comportamiento: al declarar la variable names ya se toma la memoria necesaria para ella (no hay asignación de memoria dinámica). El problema surge al usar strcpy() cuando MAXFILES es >= 48 (más o menos).

Adjunto el código completo.

listFiles2.ino (689 Bytes)