TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: ferdyto en 08 de Julio de 2008, 19:06:58
-
Hola amigos, estoy programando un ATMEGA9L en lenguaje C, el compilador no me ha compilado el programa porque tengo un error de memoria, me he excedido de la ram, por tanto querria saber como puedo almacenar datos en la EEPROM interna ( unas tablas que solo usare como lectura, en ningun caso como escritura).
Muchas gracias.
Un saludo a todos
-
Hola y Bienvenido al foro ferdyto.
Podrias especificar mejor de cuantos datos se trata y que compilador estas usando?
Saludos
-
Hola,
estoy usando el compilador "CodeVisionAVR C Compiler" . Lo que quiero saber es si hay varios tipos de memoria interna en este uC y como puedo mapear unos datos en una u otra memoria.
He programado con el AT89C51RD2 y ese micro por ejemplo podia almacenar datos en una ram externa declarando las variables como : xdata char i; ( por ejemplo). Queria saber si este micro tiene alguna posibilidad semejante para poder guardar datos en una memoria u otra.
Gracias
-
Pues esto es lo que dice el compilador sobre lo que preguntas:
Due to the Harvard architecture of the AVR microcontroller, with separate address spaces for data (SRAM), program (FLASH) and EEPROM memory, the compiler implements three types of pointers.
The syntax for pointer declaration is:
[<type storage modifier>] type * [<pointer storage modifier>]
[* [<pointer storage modifier>] ...] pointer_name;
or
type [<type storage modifier>] * [<pointer storage modifier>]
[* [<pointer storage modifier>] ...] pointer_name;
where type can be any data type.
Variables placed in SRAM are accessed using normal pointers.
For accessing constants placed in FLASH memory, the flash type storage modifier is used.
For accessing variables placed in EEPROM, the eeprom type storage modifier is used.
Although the pointers may point to different memory areas, they are by default stored in SRAM.
Example:
/* Pointer to a char string placed in SRAM */
char *ptr_to_ram="This string is placed in SRAM";
/* Pointer to a char string placed in FLASH */
flash char *ptr_to_flash1="This string is placed in FLASH";
char flash *ptr_to_flash2="This string is also placed in FLASH";
/* Pointer to a char string placed in EEPROM */
eeprom char *ptr_to_eeprom1="This string is placed in EEPROM";
char eeprom *ptr_to_eeprom2="This string is also placed in EEPROM";
In order to store the pointer itself in other memory areas, like FLASH or EEPROM, the flash or eeprom pointer storage modifiers must be used as in the examples below:
/* Pointer stored in FLASH to a char string placed in SRAM */
char * flash flash_ptr_to_ram="This string is placed in SRAM";
/* Pointer stored in FLASH to a char string placed in FLASH */
flash char * flash flash_ptr_to_flash="This string is placed in FLASH";
/* Pointer stored in FLASH to a char string placed in EEPROM */
eeprom char * flash eeprom_ptr_to_eeprom="This string is placed in EEPROM";
/* Pointer stored in EEPROM to a char string placed in SRAM */
char * eeprom eeprom_ptr_to_ram="This string is placed in SRAM";
/* Pointer stored in EEPROM to a char string placed in FLASH */
flash char * eeprom eeprom_ptr_to_flash="This string is placed in FLASH";
/* Pointer stored in EEPROM to a char string placed in EEPROM */
eeprom char * eeprom eeprom_ptr_to_eeprom="This string is placed in EEPROM";
Podemos por lo tanto utilizar las palabras reservadas: FLASH y EEPROM para almacenar variables en la memoria flash y en la memoria de programa.
Un saludo
-
Muchisimas gracias, es lo que necesitaba. :-)
Un saludo