Скачиваний:
46
Добавлен:
21.03.2016
Размер:
985.51 Кб
Скачать

Keil Software — C51 Compiler User’s Guide

71

 

 

Absolute Variable Location

Variables may be located at absolute memory locations in your C program source modules using the _at_ keyword. The usage for this feature is:

!memory_space" type variable_name _at_ constant;

 

where:

 

 

memory_space

is the memory space for the variable. If missing from the

 

 

declaration, the default memory space is used. Refer to

 

 

 

 

“Memory Models” on page 61 for more information about

3

 

the default memory space.

 

 

type

is the variable type.

 

variable_name

is the variable name.

 

constant

is the address at which to locate the variable.

 

The absolute address following _at_ must conform to the physical boundaries of the memory space for the variable. C51 checks for invalid address specifications.

The following restrictions apply to absolute variable location:

1.Absolute variables cannot be initialized.

2.Functions and variables of type bit cannot be located at an absolute address.

72

Chapter 3. Language Extensions

 

 

The following example demonstrates how to locate several different variable types using the _at_ keyword.

struct link

 

{

 

struct link idata *next;

char

code *test;

};

 

 

idata struct link list _at_ 0x40;

 

xdata char text[256] _at_ 0xE000;

 

xdata int i1

_at_ 0x8000;

 

void main ( void ) {

 

link.next = (void *) 0;

3

i1

= 0x1234;

text [0]

= 'a';

}

 

 

 

/* list at idata 0x40 */ /* array at xdata 0xE000 */ /* int at xdata 0x8000 */

Often, you may wish to declare your variables in one source module and access them in another. Use the following external declarations to access the _at_ variables defined above in another source file.

struct link

 

 

{

 

 

struct link idata *next;

 

char

code *test;

 

};

 

 

extern idata struct link list;

/* list at idata 0x40 */

extern xdata char text[256];

/* array at xdata 0xE000 */

extern xdata int i1;

/* int at xdata 0x8000 */

Соседние файлы в папке Лаборатория