Благодаря товарищу TESTER (Вик Тимофеев) (спасибо ему, дал пинок у нужном направлении
![Улыбка](images/smilies/icon_smile.gif)
)
Я разобрался с подключением .асм в проект и
написанием кода для сохранения контента в прерываниях (и вызов функций СИ для обработки самого прерывания). Осталось обьявить 1 переменную по одному адресу во всех банках RAM для сохранения W.
например 0x20, 0xA0. 0x120 0x1A0.
Сам адрес непринципиален, важно что бы был одинковым на всех банках RAM.
Если пишу так:
Код:
|
unsigned char W_TEMP;
unsigned char bank1 W_TEMP_B1;
unsigned char bank2 W_TEMP_B2;
unsigned char CUNTER;
unsigned char bank1 Cunter1.
unsigned char bank2 Cunter2. |
То всё нормально, компилятор пишет что использовано 6 байт RAM. НО! адреса он распределяет сам. Естественно не так как нужно.
Если пишу так:
Код:
|
unsigned char W_TEMP @ 0x20;
unsigned char W_TEMP_B1 @ 0xA0;
unsigned char W_TEMP_B2 @ 0x120;
unsigned char CUNTER;
unsigned char bank1 Cunter1.
unsigned char bank2 Cunter2. |
И компилятор указывает что использовано RAM 3 байт хотя переменных обьявлено на 6 байт.
И почему то CUNTER так же имеет адрес 0x20(как и W_TEMP), Cunter1 имеет 0xA0(как и W_TEMP_B1) а Cunter2 имеет 0x120(как и W_TEMP_B2).
Пробовал volatile.
Код:
|
//код Си
volatile unsigned char W_TEMP @ 0x20;
volatile unsigned char W_TEMP_B1 @ 0xA0;
volatile unsigned char W_TEMP_B2 @ 0x120;
unsigned char CUNTER;
unsigned char bank1 Cunter1.
unsigned char bank2 Cunter2. |
Все переменные обьявленые с указанием адреса (@ 0xXX) компилятор как бы не считает в RAM и на их место обьявляет обычные переменные. Хотя он их видит и в файле асм происходит обращение к этим переменным.
Вопрос. КАК указать компилятору адрес размещения переменной?