Autor Tema: CCS C ¿tenéis alguna libreria para emular EEPROM en la Flash del Micro PIC18F?  (Leído 1603 veces)

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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Pues eso, estoy trabajando con un 18F67J60 que no tiene EEPROM interna y quiero guardar unas configuraciones y tal en la Flash de programa como si fuese una EEPROM. El firmware lo hago con el CCS C.

He visto que en el directorio de Drivers hay un virtual_eeprom.c que puede servirme de base pero os pregunto por si acaso tenéis ya hecha por ahí alguna librería fácil de implementar para eso que os comento, en total son unos 250 bytes de configuración.

Ea, pues ya está. Un saludote amigos.  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Tienes que averiguar primero cuál es el tamaño del bloque de lectura/escritura usando getenv() por ejemplo o viéndolo en el datasheet del micro. 

  Una vez que lo sepas te haces un buffer lógico del tamaño del bloque.

   Haces una reserva de espacio en flash (al final mejor) con la directiva #org

   Para guardar datos:

   Los grabas en tu buffer. Cuando ya no tengas nada más que guardar entonces lo grabas en la flash con la función write_program_memory();

  Para leer:

   Cargas el buffer con la función read_program_memory(); y lees del buffer.

  Saludos.

   

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Tienes que averiguar primero cuál es el tamaño del bloque de lectura/escritura usando getenv() por ejemplo o viéndolo en el datasheet del micro. 

  Una vez que lo sepas te haces un buffer lógico del tamaño del bloque.

   Haces una reserva de espacio en flash (al final mejor) con la directiva #org

   Para guardar datos:

   Los grabas en tu buffer. Cuando ya no tengas nada más que guardar entonces lo grabas en la flash con la función write_program_memory();

  Para leer:

   Cargas el buffer con la función read_program_memory(); y lees del buffer.

  Saludos.

 

Ok, muchas gracias remi, si, trabajo sobre un buffer del tamaño adeacuado en RAM, dependiendo de los bloques mínimos que lee o escribe los xxx_program_memory(), que es el que leo o escribo.

Muchas gracias de nuevo.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Que tal RedPic,

Encontré esta nota de aplicación de Microchip con respecto a tu tema. Espero te pueda servir:

https://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en530593

elreypic

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Gracias amigos ...  :mrgreen:

Algo no estoy haciendo bien porqueeeeee ....  :5]

Con tan solo colocar el #include del virtual_eeprom.c ya me salta este error al compilar, sin siquiera hacer uso de ninguna de sus funciones, tan solo con sus defines y a la hora de proteger con #org el área que va a utilizar ....  :shock: :(

--- Info 300 "firmware_iACD_v22j60.c" Line 751(1,2): More info:   Segment at 00000-00000 (0002 used)  Priv
--- Info 300 "firmware_iACD_v22j60.c" Line 751(1,2): More info:   Segment at 00002-00008 (0004 used)  Priv
--- Info 300 "firmware_iACD_v22j60.c" Line 751(1,2): More info:   Segment at 0000A-0FFFE (0000 used)
--- Info 300 "firmware_iACD_v22j60.c" Line 751(1,2): More info:   Segment at 10000-1F3FE (0000 used)
--- Info 300 "firmware_iACD_v22j60.c" Line 751(1,2): More info:   Segment at 1F400-1F7FE (0000 used)  Priv
--- Info 300 "firmware_iACD_v22j60.c" Line 751(1,2): More info:   Segment at 1F800-1FBFE (0000 used)  Priv
--- Info 300 "firmware_iACD_v22j60.c" Line 751(1,2): More info:   Segment at 1FC00-1FFF6 (0000 used)
--- Info 300 "firmware_iACD_v22j60.c" Line 751(1,2): More info:   Attempted to create: 00008-000E0  for ISR
*** Error 126 "firmware_iACD_v22j60.c" Line 751(1,2): Invalid ORG range
      1 Errors,  0 Warnings.
Build Failed.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
¿Si no protejo ese área con el #org puedo escribir y/o leer de esas direcciones o no?
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18271
    • MicroPIC
¿Puedes poner el mapa de direcciones que ocupa tu firmware sin añadir el virtual_eeprom?

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
¿Puedes poner el mapa de direcciones que ocupa tu firmware sin añadir el virtual_eeprom?

¿Donde lo miro?

Esto es del LST

CCS PCH C Compiler, Version 5.048, 34092               10-jun.-20 09:41

               Filename:   D:\proyectos\firmware\iACD_V2.2.0\Firmware_iACD_18F67J60\output\firmware_iACD_v22j60.lst

               ROM used:   63504 bytes (48%)
                           Largest free fragment is 65528
               RAM used:   1903 (51%) at main() level
                           2482 (67%) worst case
               Stack used: 9 locations (8 in main + 1 for interrupts)
               Stack size: 31
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania



 

anything