USO DE LOS CONTROLES _at_ Y _ORDER_
Aquí. el orden de las variables no debe cambiar y se deben corresponder con las posiciones de los registros del reloj. La directiva #pragma ORDER ordena a C51 que coloque los objetos en orden de direcciones crecientes, con el primer elemento en la dirección más baja. El linker se utiliza para fijar la dirección de todo el bloque en memoria.
Módulo MAIN.C#pragma ORDER unsigned char xdata RTC_segundos ; unsigned char xdata RTC_minutos ; unsigned char xdata RTC_horas ; main() { RTC_minutos = 1 ; }
Fichero de entrada para el linker MAIN.LIN
main.obj to main XDATA(?XD?MAIN(0fa00h))
Alternativamente, el control _at_ obliga a que C51 ponga los objetos en las direcciones especificadas en el fichero fuente:
unsigned char xdata RTC_segundos _at_ 0xfa00 ; unsigned char xdata RTC_minutos _at_ 0xfa01 ; unsigned char xdata RTC_horas _at_ 0xfa02 ; main() { RTC_minutos = 1 ; }
...lo que felizmente resulta auto-explicativo.