Contenido>Indice>Intro CursoC51

UBICACIÓN DE VARIABLES EN DIRECCIONES ESPECÍFICAS


Utilizando el Linker

Un método para ubicar variables externas, especialmente arrays, en direcciones fijas consiste en utilizar el linker en lugar del compilador. Por ejemplo, para producir un array de 30 caracteres a partir de la dirección 0x8000 de RAM externa, se deben seguir los siguientes pasos:

/*** Módulo 1 ***/

/* Este módulo contiene solo declaraciones de variables */

unsigned char xdata array[30] ;

/* Fin del Módulo 1 */

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

/*** Módulo 2 ***/

/* Este módulo contiene sentencias ejecutables */

extern unsigned char xdata array[30] ;

   main()

   {
   unsigned char i ;

   i = array[i] ;

   }

Ahora, llamando al linker de la siguiente forma:

L51 modulo1.obj, modulo2.obj XDATA (?XD?modulo1 (8000H))

el linker hará que el segmento XDATA del Módulo 1 (indicado por ?XD?modulo1) comience en la dirección 0x8000, independientemente de cualquier otra declaración de variables xdata. De esta forma, el array comienza en dirección 0x8000 y tiene 30 bytes de longitud.

Se puede ejercer un control similar sobre las direcciones de los segmentos en cualquier otro espacio de memoria, sabiendo que C51 utiliza los siguientes nombres para los nombres de segmento:

CODE   ?PR?NombreDeFuncion?NombreDeFichero  (código ejecutable)
CODE   ?CO?NombreDeFuncion?NombreDeFichero  (tablas, etc.)
BIT    ?BI?NombreDeFuncion?NombreDeFichero
DATA   ?DT?NombreDeFuncion?NombreDeFichero
XDATA  ?XD?NombreDeFuncion?NombreDeFichero
PDATA  ?PD?NombreDeFuncion?NombreDeFichero

Así el área de parámetros (modelo LARGE) de la función  'test()' del fichero MOD1.C será:

?XD?TEST?MOD1,

y el código:

?PR?TEST?MOD1

El conocimiento de estos datos es útil para interrelacionar programas en ensamblador y en lenguaje C. Véase el capítulo 14.

 


   Contenido>Indice>Intro CursoC51