[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Напомню вопрос :
Есть массив ARRAY переменных типа B_TYPE.
т.е. B_TYPE ARRAY[10];
по определенным причинам, прямо так определять массив в памяти
не могу. Надо "виртуально" разместить его в определенном адресе.
Не прибегая к средствам компилятора размещать переменные по абсолютным
адресам, хочется сделать "универсально", т.е. через typedef, a
доступ по define.
Так вот, как правильно написать выражение в С через typedef, чтобы обозвать етот
массив одним типом X,
а потом
#define X_DEF (X *)(0x5000000)
и X_DEF->[5] = X_DEF->[6] и т.д.
не используя typedef объявил так
#define X_DEF((B_TYPE (*)[3])(0x5000080)) // (типа нужно всего 3 элемента)
тип B_TYPE имеет следующую структуру
typedef struct {
/* размер 2 байта */ sync;
/* размер 1 байт */ line[43];
} A_TYPE;typedef struct {
A_TYPE data0 [16];
A_TYPE data1 [16];
} B_TYPE;
пишу следующее:
long adr1,adr2,adr3;
adr1 = (long)&(X_DEF[0]);
adr2 = (long)&(X_DEF[1]);
adr3 = (long)&(X_DEF[2]);
после чего получается
adr1 = 0x5000080;
adr2 = 0x50011С0;
adr3 = 0x5002300;
т.е получается, что
sizeof(B_TYPE) = 0x1140 = 4416 т.е. ровно в 3 раза больше реального
а ежели объявить так
#define X_DEF((B_TYPE (*)[1])(0x5000080))
то sizeof(B_TYPE) = 1472 как и надо...
Где я не догоняю? и почему так и как же все-таки правильно в С
объявить данное чудо? В конце концов че обозначает цифирь в [] в данном
define ?:)
E-mail: info@telesys.ru