Hola a todos.
Como he sacado bastante información de este foro, voy a compartir con vosotros mi proyecto.
He realizado una especie de sistema operativo en disco (aunque ese término le queda muy grande) para PIC y tarjeta MMC.
Se trata básicamente de un software que permite ejecutar programas almacenados en una tarjeta MMC (lo que sería básicamente un bootloader) pero con muchas más funciones.
Mi proyecto se inspira en el funcionamiento (muy general, no lo tomeis al pie de la letra) de un sistema operativo tipo MS-DOS. Dispone de un "núcleo" o "kernel", de un intérprete de comandos y de librerías para el desarrollo de programas.
EL Núcleo:
Se trata del programa que permanece constantemente cargado en la memoria del PIC. Tiene implementado un cargador, que se encarga de leer un archivo ".hex" de la tarjeta MMC, escribirlo en la memoria del PIC y "ejecutarlo". Además tiene implementadas todas la funciones necesarias para leer y escribir de la tarjeta MMC, para manejar el sistema de archivos (FAT16), para enviar y recibir información del puerto serie. Además dispone de reloj de tiempo real con calendario (incluido soporte para años bisiestos, ejejeje).
El Intérprete de Comandos
Como su nombre indica es un intérprete de comandos. Es la interfaz entre el núcleo y el usuario. Mediante éste el usuario ejecuta los programas, y puede ejecutar otra serie de comandos, para mostar o cambiar la hora, crear directorios, eliminar archivos, etc... POr ejemplo en una de las imagenes que adjunto podeis ver el resultado del comando "dir" (mostrar un listado de un directorio) en el directorio raíz de la tarjeta. Además permite ejecutar archivos script (los ".bat"), así como ejecutar el archivo script de inicio "autoexec.bat". (los que hayais usado MS-DOS lo entendereis mejor)
Las librerías
Por último, para darle mayor utilidad al proyecto he desarrollado dos librerías
-La primera contiene llamadas a las funciones del núcleo. Es decir, como en el núcleo tengo implementado todo el manejo del formato FAT16, por ejemplo, si el usuario quiere desarrollar un programa que cree un archivo, basta con que realize la llamada a la función que está en implementada en el núcleo encargada de crear un archivo.
-La segunda es una librería estándar de C, la librería stdio. De esta forma, el usuario del sistema dispone de funciones estándar de C para el manejo de archivos que facilitan muchisimo el proceso de crear programas que trabajen con archivos. Dispone de las funciones mas importantes que define el estándar: fopen, fclose, fputs, fwrite, etc...
Aquí os muestro un programa de ejemplo que se encarga de copiar un archivo de la tarjeta MMC llamado "prog01.hex" dentro de una carpeta llamada "COPIA":
unsigned char buffer[2048];
void main (void){
unsigned int leidos;
FILE *fichero1;
FILE *fichero2;
char nombre1[20] = "prog01.hex";
char nombre2[20] = "Copia/prog01.hex";
putst("\nCopiando...",0);
fichero1 = fopen( nombre1, "r" );
fichero2 = fopen( nombre2, "w" );
while(leidos=fread(buffer,2048,1,fichero1)){
fwrite(buffer,leidos,1,fichero2);
}
fclose(fichero1);
fclose(fichero2);
putst("\nArchivo Copiado...",0);
Exit_Program();
}
Como podeis ver es muy sencillo programar con esta serie de funciones.
Bueno, esto a grandes rasgos, me extendería mucho si quisiera entrar en detalles. Es importante decir que todo el código está desarrollado en C con el compilador PICC18 de Hi-Tech, que creo que no goza de mucha popularidad por aquí.
También decir que es compatible con tarjetas SD (que no es mas que una evolución de las MMC).
Creo que puede ser interesante para aquellos que están trabajando con tarjetas SD. La comunicación con la tarjeta es vía SPI.
Bueno, supongo que la información no es del todo clara, pero es que el trabajo que he realizado es muy amplio (o eso me parece a mi). ASí es que si alguien está interesado en algo que no dude en preguntármelo.