8 de enero de 2012

Nota de aplicación 5262 Asignar memoria flash y SRAM en un microcontrolador MaxQ ® usando el compilador IAR

Resumen: Los dispositivos ofrecen funciones especiales MaxQ ROM de utilidad, que son llamados a leer y escribir datos desde la memoria del programa. Sin embargo, los datos almacenados en la memoria de programa no se puede acceder directamente en microcontroladores MaxQ. En cambio, las funciones de utilidad ROM direcciones de inicio están integrados en IAR Embedded Workbench ® para acceder a los datos almacenados. Esta nota de aplicación muestra cómo asignar y acceso a la memoria flash y SRAM en un microcontrolador MaxQ con IAR Embedded Workbench de herramientas.

Introducción

La arquitectura MaxQ describe un poderoso, de un solo ciclo RISC microcontrolador basado en el clásico de la arquitectura Harvard, en la que el programa y los buses de datos de la memoria están separados. Esta organización exige que los autobuses dedicados a cada uno de memoria (Figura 1 ), por lo que las instrucciones y operandos se pueden recuperar de forma simultánea. Porque no hay contención de un bus de datos única, instrucciones MaxQ puede ejecutar en sólo un ciclo.

Figura 1.  Arquitectura de Harvard.
Figura 1. Arquitectura de Harvard.

Cada dispositivo incorpora MaxQ los tipos de memoria:

  1. De memoria flash
  2. SRAM
  3. Utilidad ROM

Dispositivos MaxQ También puede ejecutar el código del programa de flash, ROM de servicios públicos, o SRAM . Mientras se ejecuta el código del programa a partir de un segmento de memoria, los otros dos segmentos de memoria se puede utilizar como memoria de datos (Refiérase a laejecución del Programa de Memoria Flash y ejecución ROM Funciones de utilidad secciones para obtener más detalles.) Esto es porque el programa y los buses de datos de memoria no se puede acceder al segmento de memoria simultáneamente.

Ser una máquina de Harvard, uno podría suponer que los microcontroladores MaxQ prohibir el almacenamiento de elementos de datos no volátilmemoria flash. Sin embargo, los dispositivos MaxQ están diseñados con las funciones integradas de ROM de utilidades que permiten la lectura y escritura de datos en memoria flash no volátil.

Programa de Ejecución de la memoria flash

En los dispositivos MaxQ, cuando el programa de aplicación se ejecuta desde la memoria flash, la memoria de datos SRAM (lectura y escritura) y la utilidad de ROM (sólo lectura). Consulte la Tabla 1 para el mapa de memoria de datos y en la figura 2 para el mapa de la memoria cuando el código se ejecuta desde la memoria flash.

  1. La memoria SRAM se encuentra en el mapa de memoria desde la dirección 0x0000 a 0x07FF (en el modo de direccionamiento de bytes) o desde la dirección 0x0000 a 0x03FF (en la palabra de modo de direccionamiento).
  2. La ROM de utilidades se encuentra en el mapa de memoria desde la dirección 0x8000 a 0x9FFFh (modo byte) o desde la dirección 0x8000 a 0x8FFF (en la palabra de modo de direccionamiento).

Tabla 1. Los datos del mapa de memoria cuando el código de aplicación se ejecuta desde la memoria Flash

Modo de direccionamiento
SRAM
Utilidad ROM

Dirección de inicio
Dirección final
Dirección de inicio
Dirección final

Byte modo
0x0000
0x07FF
0x8000
0x9FFF

Palabra modo
0x0000
0x03FF
0x8000
0x8FFF

Figura 2.  Mapa de la memoria cuando se ejecuta el código de programa de aplicación de la memoria flash.
Figura 2. Mapa de la memoria cuando se ejecuta el código de programa de aplicación de la memoria flash.

La ejecución de las funciones de utilidad ROM

Al ejecutar las funciones de utilidad ROM, la memoria de datos SRAM (lectura y escritura) y Flash (de lectura y escritura). Cuando el programa de aplicación se ejecuta desde la memoria flash y las variables u objetos de datos se asignan en la memoria flash, estas variables u objetos de datos pueden ser leídos o escritos a través de funciones de utilidad de ROM. Saltando por la ejecución del programa de las funciones de utilidad ROM, memoria flash ahora se puede acceder a los datos. Consulte la Tabla 2 para el mapa de memoria de datos y la Figura 3 el mapa de la memoria cuando el código se ejecuta desde la memoria ROM de servicios públicos.

  1. La memoria SRAM se encuentra en el mapa de memoria desde la dirección 0x0000 a 0x07FF (en el modo de direccionamiento de bytes) o desde la dirección 0x0000 a 0x03FF (en la palabra de modo de direccionamiento).
  2. En el byte de modo de direccionamiento, la mitad inferior de flash se encuentra en el mapa de memoria desde la dirección 0x8000 a 0xFFFFh cuando CDA0 = 0, y la mitad superior de flash se encuentra en el mapa de memoria desde la dirección 0x8000 a 0xFFFFh cuando CDA0 = 1. En la palabra el modo de direccionamiento, el flash se encuentra en el mapa de memoria desde la dirección 0x8000 a 0xFFFF.

Tabla 2. Los datos del mapa de memoria al ejecutar las funciones de utilidad ROM

Modo de direccionamiento
SRAM
Memoria Flashmitad inferior (CDA0 = 0)
Memoria FlashMedia Superior (CDA0 = 1)
Memoria Flash

Dirección de inicio
Dirección final
Dirección de inicio
Dirección final
Dirección de inicio
Dirección final
Dirección de inicio
Dirección final

Byte modo
0x0000
0x07FF
0x8000
0xFFFF
0x8000
0xFFFF
-
-

Palabra modo
0x0000
0x03FF
-
-
-
-
0x8000
0xFFFF

Figura 3.  Mapa de la memoria al ejecutar las funciones de utilidad ROM.
Figura 3. Mapa de la memoria al ejecutar las funciones de utilidad ROM.

De asignación de memoria en la memoria flash y SRAM

IAR Embedded banco de trabajo IDE se utiliza para la programación de MaxQ núcleo basado en microcontroladores. IAR ™ compilador de C (para el microcontrolador MaxQ) ofrece la opción de definir los objetos de datos o variables en los lugares de memoria flash o SRAM. El compilador tiene especiales palabras ubicación pragma y pragma necesario , mediante el uso de estas palabras clave, la memoria se pueden asignar a los objetos de datos o variables en la dirección absoluta. Estas variables u objetos de datos se debe declarar con la palabra clave IAR __no_init oconst (la palabra clave estándar C). Vea las descripciones de la palabra clave __no_init , const , ubicación pragma , y el programa requeridoa continuación.

Descripción Palabras clave

pragma ubicación

El # pragma ubicación palabra clave se utiliza para colocar cada variable global o estática u objetos de datos a las direcciones absolutas. Las variables u objetos de datos debe ser declarada bien __no_init o const . Esto es útil para objetos de datos individuales que deben ser ubicados en una dirección fija, como las variables, objetos de datos con interfaces externas o internas, o llenar tablas de hardware.

pragma necesario

El # pragma requiere asegura que un símbolo de lo que se necesita por otro símbolo está incluido en la producción ligados. La directiva debe ser colocado inmediatamente antes del segundo símbolo. Utilice la directiva si el requisito de un símbolo no es otra cosa visible en la aplicación. Por ejemplo, si una variable es sólo se hace referencia indirectamente a través del segmento que se encuentra en, # pragma requerido debe ser utilizado.

__no_init

Normalmente, el entorno de ejecución de IAR se inicializa todas las variables globales y estáticas a 0 cuando se inicia la aplicación. IAR compilador de C soporta la declaración de variables que no se iniciará, con el __no_init modificador de tipo. Las variables declaradas con__no_init se suprimen en el inicio. No es posible dar una __no_init objeto de un valor inicial.

Ejemplo: __no_init caracteres MaximChar @ 0x0200;

En este ejemplo, un __no_init variable declarada se sitúa en una dirección absoluta en la memoria de datos por defecto (SRAM).

const

El const palabra clave implica que un objeto es de sólo lectura. Este tipo de clasificación se utiliza para indicar que un objeto de datos, acceder directamente oa través de un puntero, es nonwritable. Cuando const se utiliza con la palabra clave # pragma ubicación y # pragma requiere , asigna memoria IAR en la ubicación definida por el lugar # pragma . Esto es útil para los parámetros de configuración que son accesibles desde una interfaz externa. Estos datos los objetos de Flash pueden ser leídos o escritos por las funciones de utilidad ROM.

Variables constantes colocado en una dirección absoluta no se puede acceder en el modelo de memoria asociadas a la perfusión por defecto.Utilice las constantes opción Colocar en código (en proyecto IAR Opción General de Opción ventana de destino ) para que sean accesibles, como se muestra en la Figura 4 .

Figura 4.  Proyecto IAR opción de la ventana.
Figura 4. Proyecto IAR opción de la ventana.

Ejemplo 1

const int FLASH_DATA0;
/ / FLASH_DATA0 se inicializa a 0x0000 y el enlazador asignará la dirección de memoria.

Ejemplo 2

# Location = pragma 0xA000
const int FLASH_DATA1 = 0x1234;
# pragma necesario = FLASH_DATA1
Aquí se asigna la memoria en la dirección de flash 0xA000 y se inicializa a 0x1234.

Ejemplo 3

# Location = pragma 0xA002
__no_init const int FLASH_DATA2 / / La memoria se asigna a la dirección 0xA002 (dirección byte)
# pragma necesario = FLASH_DATA2

Aquí la memoria es asignada a la dirección 0xA002 flash sin inicialización.

En los ejemplos anteriores, hay tres objetos const declarado, si el primero es inicializada a cero, el segundo se inicializa a un valor específico, y la tercera es sin inicializar. Las tres variables se colocan en el flash.

Ejemplos de palabras clave

Ejemplo 1

En el siguiente ejemplo, FLASH_CONFIG es una variable de estructura FlashMemoryMap. Frente a esta variable de estructura de inicio se define explícitamente en el lugar "CONFIG_FLASH" (0xEE00) con las palabras clave # pragma ubicación y # pragma necesario .

/ / Estructura para la Asignación de la memoria
typedef struct
{
system_config unsigned char / / Dirección 0x00
TEMP_CONFIG unsigned char / / Dirección 0x01
unsigned char SLAVE_ADDR_A0 / / Dirección 0x02
unsigned char NULL_A0_3 / / Dirección 0x03
firmado INTERNAL_TEMP_THRES int / / Dirección 0x04-5
firmado EXTERNAL_TEMP_THRES int / / Dirección 0x06-7
firmado DS75_TEMP_THRES int / / Dirección 0x08-9
FlashMemoryMap};

# Define CONFIG_FLASH = 0xEE00 / / Flash Dirección

Lugar # pragma = CONFIG_FLASH
const FlashMemoryMap FLASH_CONFIG = / / Inicializar los objetos de datos variables
{
0x00, / / ​​system_config
0xFE, / / ​​TEMP_CONFIG
0xA0, / / ​​SLAVE_ADDR_A0
0x00, / / ​​NULL_A0_3
0x3200, / / ​​INTERNAL_TEMP_THRES
0x4200, / / ​​EXTERNAL_TEMP_THRES
0x5200 / / DS75_TEMP_THRES
};
# Pragma necesario = FLASH_CONFIG

Para ver la asignación de memoria y la inicialización en IAR IDE banco integrado de trabajo, vaya a Ver de memoria . En el cuadro de edición se muestra, en el tipo de 0xEE00 Ir al cuadro y seleccione Código de la caja desplegable, como se muestra en la Figura 5 .


Figura 5.  De asignación de memoria.
Figura 5. De asignación de memoria.


Ejemplo 2

En el siguiente ejemplo, una variable de datos SRAMMemoryMap estructura (DATA_MONITOR) se crea en la dirección 0x0116, y no se inicializa (con __no_init modificador de tipo).

typedef struct
{
/ / Sólo lectura
firmado int INTERNAL_TEMP / / Dirección = OFFSET + 0x00-1
firmado int EXTERNAL_TEMP / / Dirección = OFFSET + 0x02-3
firmado int DS75_TEMP / / Dirección = OFFSET + 0x04-5
int firmado VOLTAGE0 / / Dirección = OFFSET + 0x06-7
firmado int VOLTAGE1 / / Dirección = OFFSET + 0x08-9
SRAMMemoryMap};

# Define Dirección CONFIG_SRAM 0x0116 / / SRAM 0x0116

Lugar # pragma = CONFIG_SRAM
__no_init SRAMMemoryMap DATA_MONITOR;
# Pragma necesario = DATA_MONITOR

Para ver el contenido de la variable de estructura en la depuración en el IAR, seleccione la variable, a la derecha , haga clic y seleccione la opción Añadir a. Ver la Figura 6 .

Figura 6.  Una ventana Inspección IAR.
Figura 6. Una ventana Inspección IAR.


Visualización de la memoria asignada en el procesador Intel ® hex


Memoria asignada a los objetos de datos en la memoria de código se pueden ver en el archivo HEX generado por Intel IAR Embedded Workbench.Vea el área resaltada en la figura 7 . Aquí, los objetos de datos se asignan memoria en el flash entre 0xEE00 y 0xEE15.

Figura 7.  Un IAR-hex generado en el modo de lanzamiento.
Figura 7. Un IAR-hex generado en el modo de lanzamiento.


Ejemplo de código

El código de ejemplo que se incluye tiene archivos que demuestran cómo se puede asignar memoria para las variables en flash y SRAM, y también a leer y escribir en las variables de flash. Los archivos incluidos son los siguientes:



  1. main.c muestra cómo leer y escribir en la memoria flash.


  2. memory.h demuestra la creación de datos de objetos y la inicialización en flash y SRAM. Este archivo utiliza el __no_init , const ,ubicación pragma , y pragma requieren palabras clave.


  3. flash.c tiene flash leer y escribir funciones (funciones C). Estas funciones se llaman funciones de la Asamblea, que se definen en elassembly.asm archivo.


  4. flash.h declara flash de leer y escribir prototipos de funciones. Estas funciones tienen definiciones en flash.c y assembly.asm .


  5. assembly.asm tiene varias funciones de la Asamblea de leer y escribir en la memoria flash. Todas las funciones tienen las llamadas a funciones de utilidad ROM.

Descargar proyecto completo.

IAR Embedded Workbench es una marca registrada de IAR Systems AB. IAR es una marca registrada de IAR Systems AB. Intel es una marca registrada y marca de servicio registrada de Intel Corporation. MaxQ es una marca registrada de Maxim Integrated Products, Inc.


No hay comentarios:

Publicar un comentario