Autor Tema: Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL  (Leído 3741 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL
« en: 23 de Julio de 2009, 02:04:17 »
Bueno, no esta totalmente terminado, falta realizar el metodo disk_ioctl((), pero para este caso especifico no se usa.

La demo es de lo mas simple, se abre un filesystem (se soportan 4 si se conectan 4 SDs), se abre un archivo en modo lectura, el segundo en modo escritura (se crea si no existe) y se copia el contenido de uno al otro usando un buffer intermedio.

Lo cheto del asunto es que podes abrir multiples hilos de ejecucion y en cada uno manipular archivos sin inconvenientes, ya que la serializacion la maneja el componente diskio_sd.c (que es la implementacion que pide chan´s fat para que funcione FatFs) realizado con manejo de RTOS (FreeRTOS).

El codigo de FAT es de autoria de Chan yo solo implemente lo que pide el para soportar el dispositivo que uses (SD, SATA, PATA, NANDFLASH, etc).

A continuacion solo el main para que vean lo simple de su uso.

Código: C
  1. /* Scheduler include files. */
  2. #include "FreeRTOS.h"
  3. #include "task.h"
  4.  
  5. /* Hardware specific headers */
  6. #include "board.h"
  7.  
  8. /*Modules Header files*/
  9. #include "rtc\rtcTask.h"
  10. #include "fatfs\ff.h"
  11. #include "fatfs\diskio.h"
  12.  
  13. /*Global const*/
  14.  
  15. /*Defines*/
  16.  
  17. /*Global vars*/
  18. //Data for the demo task
  19. xTaskHandle xFatFsDemoHandle;
  20.  
  21. //For the Filesystem
  22. FATFS fs;            // Work area (file system object) for logical drive
  23. FIL fsrc, fdst;      // file objects
  24. FRESULT res;         // FatFs function common result code
  25. UINT br, bw;         // File R/W count
  26. portCHAR buffer[1000];
  27.  
  28. /*Functions and Tasks*/
  29. static void prvSetupHardware( void );
  30. static void vFatFsDemo( void *pvParameters );
  31.  
  32. /*Main Program*/
  33. int main( void )
  34. {
  35.     /* Setup the ports */
  36.     prvSetupHardware();
  37.  
  38.     /*Start and Init RTC*/
  39.     vRtcTaskStart();
  40.        
  41.     /*Tasks Start-up*/
  42.     xTaskCreate( vFatFsDemo, "FatFsDemo", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, &xFatFsDemoHandle );
  43.    
  44.     /*Start the scheduler.
  45.     NOTE : Tasks run in system mode and the scheduler runs in Supervisor mode.
  46.     The processor MUST be in supervisor mode when vTaskStartScheduler is
  47.     called.  The demo applications included in the FreeRTOS.org download switch
  48.     to supervisor mode prior to main being called.  If you are not using one of
  49.     these demo application projects then ensure Supervisor mode is used here. */
  50.     vTaskStartScheduler();
  51.  
  52.     /* Should never get here! */
  53.     return 0;
  54. }
  55.  
  56. /*A Demo of the features in the Graphic LCD driver for FreeRTOS*/
  57. static void vFatFsDemo( void *pvParameters )
  58. {
  59.      for ( ; ; )
  60.     {
  61.         // Register a work area for logical drive 0
  62.         res = f_mount(0, &fs);        
  63.  
  64.         // Open source file
  65.         res = f_open(&fsrc, "srcfile.dat", FA_OPEN_EXISTING | FA_READ);
  66.         if (res) {goto vFatFsDemo_finish;}
  67.  
  68.         // Create destination file
  69.         res = f_open(&fdst, "dstfile2.dat", FA_CREATE_ALWAYS | FA_WRITE);
  70.         if (res) {goto vFatFsDemo_close;}
  71.  
  72.         // Copy source to destination
  73.         for ( ; ; )
  74.         {
  75.             res = f_read(&fsrc, buffer, sizeof(buffer), &br);
  76.             if (res > 0) {goto vFatFsDemo_close2;}   // error
  77.             res = f_write(&fdst, buffer, br, &bw);
  78.             if (res || bw < br || (bw < sizeof(buffer))) {goto vFatFsDemo_close2;}   // error or disk full
  79.         }
  80.  
  81.         vFatFsDemo_close2:
  82.         // Close all files
  83.         f_close(&fdst);
  84.  
  85.         vFatFsDemo_close:
  86.         f_close(&fsrc);
  87.    
  88.         // Unregister a work area before discard it
  89.         f_mount(0, NULL);
  90.        
  91.         vFatFsDemo_finish:  
  92.         vTaskDelete(xFatFsDemoHandle);
  93.     }
  94. }
  95.  
  96.  
  97. static void prvSetupHardware( void )
  98. {
  99.     /* When using the JTAG debugger the hardware is not always initialised to
  100.     the correct default state.  This line just ensures that this does not
  101.     cause all interrupts to be masked at the start. */
  102.     AT91C_BASE_AIC->AIC_EOICR = 0;
  103.    
  104.     /* Most setup is performed by the low level init function called from the
  105.     startup asm file.
  106.     */
  107.  
  108.     /* Enable the peripheral clock to the PIO */
  109.     AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);
  110. }

Salutes espero que les guste.
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL
« Respuesta #1 en: 23 de Julio de 2009, 02:23:38 »
Me llama la atención como casi todo lo que publicas, Darukur, aunque cuando abro el código me vuelvo loco. Espero algún día hincarle el diente a estos temas y poder servirme de estos ejemplos

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL
« Respuesta #2 en: 23 de Julio de 2009, 09:58:18 »
Me llama la atención como casi todo lo que publicas, Darukur, aunque cuando abro el código me vuelvo loco. Espero algún día hincarle el diente a estos temas y poder servirme de estos ejemplos

No sos el unico que se vuelve loco... antes mis amigos decian que se mareaban cuando miraban mi codigo porque decian que estaba "ofuscado", despues empece a seguir los estandares de identado y semantica pero los vicios uno no los pierde... :)

Salutes y gracias por mirarlo!
Espero comentarios! buenos o malos!
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL
« Respuesta #3 en: 23 de Julio de 2009, 16:25:08 »
Darukur como estás  :-/

Yo también he visto la librería que estás usando para FAT pero he visto que por cuestiones de complejidad en si del código no podría funcionar para PIC18F. Ahora que modificaciones pensas que podrían dar resultado para dicho código corra sin problemas en un PIC18F4620  o PIC18F4550 ??

PD: Me gustaría tratar de migrar el código a C de CCS ya que el autor de la librería usa el C18.

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL
« Respuesta #4 en: 23 de Julio de 2009, 18:10:21 »
Probaste que no funciona o estimas que no funciona? Asi mismo, con que compilador lo queres compilar (hitech, CCS, Microchip)?
Tal vez podrias mirar del mismo autor su implementacion de FAT para dispositivos mas pequeños (Petit FAT) con este no creo que tengas problemas.

Creo que no tendrias problemas de compilarlo para que ande sin complicarlo con un RTOS sobre un PIC18 con C18 o hitech PICC18, con CCS realmente creo que no porque no sigue el estandar ANSI.

Saludos
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL
« Respuesta #5 en: 23 de Julio de 2009, 19:12:55 »
La verdad no he probado el código pero el autor dice que la RAM del microcontrolador usado tiene que ser mayor a 3k con lo que me traería problemas con el PIC18F2550 que tiene 16K ROM (ocupamos la mitad) RAM: 2K nos queda corto.

Pero he econtrado una librería en C de CCS (no la que viene en el compilador) que le ha funcionado a varios usuarios en el foro de CCS en micros como el PIC18F4520 y PIC18F4550.

Otra cosa por que podría llegar a tener problemas al migrar el código a CCS ?

Te dejo la librería que encontre:

Lo que yo quiero hacer es un logger mediante targetas SD

- Tengo que crear un fichero con extensión .txt y guardar los datos del logger que son 3 variables + hora y fecha.


 

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL
« Respuesta #6 en: 24 de Julio de 2009, 00:55:12 »
Otra cosa por que podría llegar a tener problemas al migrar el código a CCS ?

Puede que ya haya cambiado, pero cuando lo probe no me gusto porque no me dejaba manejar el codigo de la manera que se debe (multiples modulos C, cada uno compilado por separado y despues linkeado).

CCS por lo que vi maneja un solo objeto, por lo que debes fusionar todo tu codigo en un gran .c donde incluyes lo que necesitas con includes de headers.
Esto creo que es porque no existe tal cosa como un linker en CCS, esto tambien limita a la creacion de librerias estaticas para tu desarrollo, por ejemplo desarrollaste una libreria muy cheta de LCD que no quieres revelar su codigo, asi que entregas el lib con una descripcion de la api y listo, el compiler solo debe linkear este objeto precompilado para que lo usen otros modulos.

Despues busco info mas solida sobre lo que digo... pero repito, puede haber cambiado... hace un tiempo q no programo en PICs.

Saludos!

El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL
« Respuesta #7 en: 25 de Julio de 2009, 02:50:29 »
Estuve haciendo unas pruebas de las tasas de transferencias que se logran y estos son los resultados que obtuve (un buffer menor que el tamaño de un sector obviamente afecta negativamente a la tasa de transferencia ya que la lectura de sector es indivisible (512 bytes).

XTAL 48Mhz
512 bytes buffer
write: 345246 bytes/sec
read: 3665714 bytes/sec

1024 bytes buffer
write: 347708 bytes/sec
read: 363000 bytes/sec


2048 bytes buffer
write: 350200 bytes/sec
read: 335000 bytes/sec

Se puede ver que la tasa de escritura sube pero la de lectura decae, puede estar relacionado a la actividad de busqueda de los sectores a la tabla de FAT, tengo que analizar las optimizaciones del CHAN´s FAT para hacer que la lista enlazada pueda cachearse en memoria para mayor velocidad (lo que hacia el conocido smartdisk de M$ en epocas del DOS).

Salutes

PD: Ya se pueden imaginar que para reproducir un mp3 de mediana calidad se requieren de 128 a 256kbps (16 a 32 KBytes por seg) osea que esto realmente VUELA, ademas tengan en cuenta que el micro esta casi totalmente liberado ya que se realiza por DMA y el tiempo que la MMC esta trabajando el micro puede hacer otras tareas gracias a la gestion del RTOS...
« Última modificación: 25 de Julio de 2009, 02:53:56 por Darukur »
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL
« Respuesta #8 en: 25 de Julio de 2009, 03:09:33 »
Darukur  como estás , los tiempos de escritura lectura son exelentes por lo que veo.

Ahora te hago unas preguntas:

Si yo solamente tubiera que crear un archivo en una memoria SD , leerlo y escribir en el... necesitaría todas las funciones del la librería ??

Crees que se podría achicar la librería sacando las funciones que no se usan??

FreeRtos soporta C18 ??

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Driver de Fat FS para AT91SAM7S sobre FreeRTOS y KEIL
« Respuesta #9 en: 25 de Julio de 2009, 15:17:26 »
Darukur  como estás , los tiempos de escritura lectura son exelentes por lo que veo.

Ahora te hago unas preguntas:

1.Si yo solamente tubiera que crear un archivo en una memoria SD , leerlo y escribir en el... necesitaría todas las funciones del la librería ??

2.Crees que se podría achicar la librería sacando las funciones que no se usan??

3.FreeRtos soporta C18 ??

1.Si quisieses alterar los datos dentro de un archivo, conociendo que sectores ya tiene ubicados, solo necesitarias funciones basicas de transferencia de SPI para afectarlos, pero obvio con cualquier modificacion desde PC al archivo, haria que el dispositivo escriba posiblemente en cualquier lado.
Esto lo hizo un amigo para un proyecto de la facu, que usaba un micro muy acotado, mientras no toques el archivo desde la pc, todo esta bien.

2.Podes usar la implementacion petit de Chan e incluso si queres achicarlo comentar el codigo que no vas a usar (por ej solo queres leer comenta la escritura o desactiva el ioctrl.

3.SI, pero tiene sus bemoles, todo debido a que C18 utiliza una implementacion no estandar para algunos calculos matematicos que posicionan memoria que debe ser resguardada por el RTOS, encima dependiendo del caso dicha memoria cambia.
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/


 

anything