реклама на сайте
подробности

 
 
> Локалные переменные в регистры
Student2
сообщение Oct 27 2009, 03:37
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 4-08-09
Из: Болгария / София
Пользователь №: 51 737



Не тайна что через использование ключевое слово 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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016