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

 
 
> Как деликатнее настроить оптимизацию AVG-GCC
RodionGork
сообщение Sep 22 2009, 06:41
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 239
Регистрация: 30-10-07
Из: Санкт-Петербург
Пользователь №: 31 866



Уважаемые товарищи!

Вероятно тема уже хорошо зажеванная - но по ключевым словам "оптимизация" и "gcc" вываливается кошмарная масса ссылок - найти нужную я не в силах. ;-)

Речь идет о следующем. Контроллер (mega32) работает на 2МГц и больше сделать нельзя по "другим причинам". Каждый цикл длится 2000мкс, за это время происходит несколько несложных вещей:
- проводятся измерения;
- осуществляется передача данных;
- осуществляется прием синхрокоманды.

В общем все несложно и времени, казалось бы, хватает на все. Однако все три действия должны весьма четко разграничиваться по времени, что связано со спецификой использования канала связи. Привязка ко времени происходит с помощью одного из таймеров.

Пока все происходит при помощи Win-AVR

И тут я обнаруживаю, что с директивой компилятора -O0 компилятор даже три простые действия очень плохо умещает в отведенное время. Еще бы: например "PORTD|=(1<<6)" превращается в конструкцию из шести команд, суть которых в том чтобы взять значение из адреса памяти, соответствующего регистру и после манипуляций с ним туда же его вернуть.

Ладно, ставлю -O1 или -O2 - тогда компилятор разом вспоминает про инструкции sbi для этих случаев - ну умница! Однако при этом же он, как я наблюдаю, клонирует код и даже местами переставляет его. Из-за этого я очень плохо понимаю что вообще происходит и, что гораздо хуже, не могу точно определить где и сколько микросекунд проходит.

Можно ли ему как-то деликатно объяснить, чтобы избавил меня от этой "прыжковой оптимизации", но сохранил всю остальную?

Родион
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 00:38
Рейтинг@Mail.ru


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