TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: gonz147 en 01 de Abril de 2010, 23:42:37
-
Hola amigos del foro.
Estoy empezando un programita en el que debería guardar cierta configuración en la flash para no perderla.
CCS trae unas funciones para esto (write_program_eeprom(), write_program_memory() ) pero no entiendo 2 cosas en principio:
1) Por lo visto la función write_program_eeprom() es para grabar la flash y no la eeprom, ya que hay otra función para esto ultimo (write_eeprom() ), es así no?
2) Si la función write_program_eeprom() sirve para guardar en flash, el archivo de ayuda dice que hay que borrar el bloque de memoria antes (erase_program_eeprom() ), lo que no encuentro es la segmentacion de memoria que usan los pic (particularmente PIC16F716), donde puedo encontrarla?
Ah, me olvidaba de preguntar si es posible ver el mapa de memoria resultante en CCS.
Espero sus respuestas
-
Hola amigos del foro.
Estoy empezando un programita en el que debería guardar cierta configuración en la flash para no perderla.
CCS trae unas funciones para esto (write_program_eeprom(), write_program_memory() ) pero no entiendo 2 cosas en principio:
1) Por lo visto la función write_program_eeprom() es para grabar la flash y no la eeprom, ya que hay otra función para esto ultimo (write_eeprom() ), es así no?
2) Si la función write_program_eeprom() sirve para guardar en flash, el archivo de ayuda dice que hay que borrar el bloque de memoria antes (erase_program_eeprom() ), lo que no encuentro es la segmentacion de memoria que usan los pic (particularmente PIC16F716), donde puedo encontrarla?
Ah, me olvidaba de preguntar si es posible ver el mapa de memoria resultante en CCS.
Espero sus respuestas
write_program_eeprom() es para guardar en la Memoria EEProm de tu Pic, em la Flash esta grabado el codigo fuente de tu Pic donde se ejecutan las instrucciones
-
write_program_eeprom() es para guardar en la Memoria EEProm de tu Pic, em la Flash esta grabado el codigo fuente de tu Pic donde se ejecutan las instrucciones
No.
Esa instrucción sí se usa para grabar la Flash de memoria de programa donde reside el código fuente del PIC. Se usa comúnmente para actualizar firmware mediante bootloaders, por ejemplo.
-
Esa instrucción sí se usa para grabar la Flash de memoria de programa donde reside el código fuente del PIC. Se usa comúnmente para actualizar firmware mediante bootloaders, por ejemplo.
Eso es lo que suponía, pero no encuentro información acerca de la segmentación, ya que al borrar en la flash lo hace de a bloques, y puedo borrar parte del programa principal si no lo tengo en cuenta.
saludos
-
write_program_eeprom() es para guardar en la Memoria EEProm de tu Pic, em la Flash esta grabado el codigo fuente de tu Pic donde se ejecutan las instrucciones
No.
Esa instrucción sí se usa para grabar la Flash de memoria de programa donde reside el código fuente del PIC. Se usa comúnmente para actualizar firmware mediante bootloaders, por ejemplo.
Sacado desde la ayuda de CCS:
WRITE_PROGRAM_EEPROM:
Writes to the specified program EEPROM area.
See our WRITE_PROGRAM_MEMORY for more information on this function.
También está WRITE_PROGRAM_MEMORY y dice:
Writes count bytes to program memory from dataptr to address. This function is most effective when count is a multiple of FLASH_WRITE_SIZE. Whenever this function is about to write to a location that is a multiple of FLASH_ERASE_SIZE then an erase is performed on the whole block.
Por lo que leo la primera escribe en la EEPROM y la segunda en memoria de programa.
Entonces si es asi, ¿podria usar la memoria flash para ir guardando valores que se refrescan cada un segundo, una hora; a pesar de que recomienden guardar en bloques?)
-
finalmente desistí y guardo los valores en la eeprom, es sencillo como guardar un valor en una variable, no vale la pena renegar, de todas maneras la flash que traen los pic no es mucha como para suponer que te puede sobrar una cantidad significativa para guardar datos, si no te alcanza con la eeprom que trae conviene usar otro micro o poner memoria externa.
Yo estaba acostumbrado a los MSP430 que tienen mucha flash y ademas esta se puede manejar como si fuera una flash externa y esta bien explicado en la hoja de datos.
Salduos
-
hola amigos tambien ando indagando sobre este tema ya que estoy haciendo un sistema que me envia 2 datos de 8 bits y necesito guardarlo en eeporm o en flash Curso Básico de programación Lenguaje C compilador CCS (Capitulo 3) Vídeo 1 es un video en youtube donde explican muy claro como conseguir las localidades disponibles para comenzar a grabar en la flash, en mi caso necesito concatenar esos 2 bytes y guardarlos en la flas que es de 16 its en el caso del 16f628a o guardarlos en memoria eeprom y despues crear un for que me lea de 2 en 2 para poder hacer el barrido y las comparaciones de los datos guardados con el dato que envio.
-
En el PIC16F628A no puede grabarse la FLASH desde el mismo programa del micro, si se puede guardar variables en la FLASH en el momento de compilacion, cada posicion de memoria tiene 14 bits, por lo cual no vas a poder guardar 16bits. Lo que vas a poder guardar si es 8 bits por cada lugar, Y seguramente sea reemplazado por RETLW los valores de la misma.
Si vas a poder guardarlo en la EEPROM, no importa si son de 16/24/32 bits, siempre se van a ir guardando de byte a byte, es decir, si tenes un entero de 16 bits, procedes a tomar los bits de menos peso y guardarlo en una posicion de memoria ( ejemplo 0x00 ) luego tomas los 8 bits de mas importancia y lo guardas en el que sigue ( 0x01 ) , para reconstruir podes hacer el paso inverso anterior, lees las 2 posicion de memoria, y usas make16 o desplazas en 8 bits al mas grande y lo sumas al mas pequeño guardandolo en una variable de 16bits.