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

 
 
> Оптимизатор кода в WinAVR, сплошное непонятство
Panych
сообщение Aug 21 2006, 13:31
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 335
Регистрация: 17-06-04
Из: Москва
Пользователь №: 35



Никак не могу понять, почему это требуется?: код без оптимизации работает, с оптимизацией по параметру "s" - приходится вставлять строки 170, 211 и 300.
Как они влияют на работу?
Смотрел листинг ассемблера - вроде ничего не меняется с их использованием, но ведь начинает работать!

Программа - начального уровня, конечно, но в самом начале хотелось бы уяснить, как оптимально писать...


--------------------
Всегда не хватает времени, чтобы выполнить работу как надо, но на то, чтобы ее переделать, время находится. (Закон Мескимена.)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tiro
сообщение Aug 21 2006, 14:44
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



1. Мне тоже непонятно, как влияет перестановка 169 и 170.
Зато понятно, как влияют друг на друга 172 и 173

169 DDRA = 0; // DATA_LCD_IO = 0;
170 NOP( 1 );
171 SETBIT( PORT_KN2, KN2 ); //включение
172 PORTB &= ~(1<<3);//CLEARBIT( PORT_KN1, KN1 ); //первого вывода
173 PORT_READ = PINA; // PORT_READ = READ_LCD; //считывание порта

которые скорее всего в ассемблере выглядят так
out portb, reg1
in reg2, porta
без задержки на такт, а она нужна.

2. Дело не в перегруженности прерываний, а в том, что компилятор может оптимизировать обращение к переменной, не объявленной как volatile

Пример:

int global_var;

ISR (vector)
{
global_var = 2;
}

int main (void)
{
for (;;)
{
global_var = 1;
// здесь произошло прерывание
if (global_var == 2)
{
printf ("Почему я не попал сюда? Надо использовать volatile");
}
}
}

Компилятор оптимизировал обращение к global_var в функции main и вообще удалил ветку с
if () как недостижимый код.

С уважением.

Сообщение отредактировал Tiro - Aug 21 2006, 14:59
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:43
Рейтинг@Mail.ru


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