TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: RedPic en 07 de Junio de 2020, 09:23:40
-
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:
-
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.
-
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.
-
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
-
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.
-
¿Si no protejo ese área con el #org puedo escribir y/o leer de esas direcciones o no?
-
¿Puedes poner el mapa de direcciones que ocupa tu firmware sin añadir el virtual_eeprom?
-
¿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
-
View -> Statistics -> Segments