Autor Tema: ATMEGA8L Necesito ayuda con el manejos de las memorias internas del uC  (Leído 2776 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado ferdyto

  • PIC10
  • *
  • Mensajes: 3
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

Desconectado Micro23

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 226
Re: ATMEGA8L Necesito ayuda con el manejos de las memorias internas del uC
« Respuesta #1 en: 08 de Julio de 2008, 20:25:17 »
Hola y Bienvenido al foro ferdyto.
Podrias especificar mejor de cuantos datos se trata y que compilador estas usando?
Saludos
El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado ferdyto

  • PIC10
  • *
  • Mensajes: 3
Re: ATMEGA8L Necesito ayuda con el manejos de las memorias internas del uC
« Respuesta #2 en: 08 de Julio de 2008, 21:41:27 »
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

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: ATMEGA8L Necesito ayuda con el manejos de las memorias internas del uC
« Respuesta #3 en: 08 de Julio de 2008, 21:49:38 »
Pues esto es lo que dice el compilador sobre lo que preguntas:

Citar
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
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado ferdyto

  • PIC10
  • *
  • Mensajes: 3
Re: ATMEGA8L Necesito ayuda con el manejos de las memorias internas del uC
« Respuesta #4 en: 08 de Julio de 2008, 22:04:34 »
Muchisimas gracias, es lo que necesitaba. :-)

Un saludo