Не тайна что через использование ключевое слово
register можно указать компилятору поставит переменную в регистр. В проекте можно тоже указать компилятору не использовать определенные регистры и потом создать глобальные регистровые переменные.
Вопрос идет об локальных переменных в какой то процедуре - если в процедуре много переменных оптимизация часто не принимает во внимание мои инструкции поставит переменные в регистры.
Например:
Код
register uint8_t var1, var2, var3, var4; // переменные в регистры
var1 = 15; // установка значения
var2 = 61;
var3 = 45;
var4 = 1;
DDRA = var1;
PORTC = var2;
DDRA = var3;
DDRB = var4;
После компиляции часто можно увидеть что в листинге находиться что то вроде:
Код
// DDRA = var1;
0000017A E07F LDI R23, 15 // load R23 with 15
0000017C B97D OUT 0x0D, R23 // out to DDRA
вместо ожидаемого:
Код
// DDRA = var1;
0000017C B97D OUT 0x0D, R21 // out directly var1 to DDRA
Как можно обмануть компилятору и поставить локальные переменные воистину в регистры (без использование глобальных переменных в регистров).
Сообщение отредактировал Student2 - Oct 27 2009, 03:38