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

 
 
> Оптимизация кода Keil
aanbor
сообщение Dec 27 2012, 06:00
Сообщение #1


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

Группа: Свой
Сообщений: 103
Регистрация: 23-06-07
Пользователь №: 28 642



Добрый день всем.
Давно хотел получать оптимизированный код, все руки не доходили. Сейчас начинаю проект с нуля, самое время начать осваивать. Первым делом начал с эзернета, запустил без оптимизации, пинги проходят. Затем ставлю уровень 3, смотрю что получилось.
Вот кусок из ETH_STM32F2xx:
Код
  id1 = read_PHY (PHY_REG_IDR1);
  id2 = read_PHY (PHY_REG_IDR2);

Обе переменные объявлены локально внутри функции и вроде должны вести себя одинаково. Но если шагать отладчиком, видно, что id1=0x22, а вот id2=not in scope. Почему не отображается id2? Да и много чего не могу посмотреть отладчиком, но видимо все работает правильно, раз плата пингуется. Как тогда отлаживать при включенной оптимизации?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
scifi
сообщение Dec 27 2012, 06:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(aanbor @ Dec 27 2012, 10:00) *
Как тогда отлаживать при включенной оптимизации?

Никак. Отлаживать нужно на самом низком уровне оптимизации. Когда всё работает, повышаем уровень оптимизации до максимального и надеемся, что ничто не сломается. Соответственно, изначально код пишем так, чтобы при повышении уровня оптимизации не вылазили баги (это чаще всего относится к своевременному применению volatile, а также избегаем зависимость от скорости исполнения). Также надеемся, что нет багов в компиляторе.
Если ну очень хочется поотлаживать оптимизированный код, то делаем это через дизассемблер, что может быть очень трудоёмко для нетривиального кода.
Как-то так.
Go to the top of the page
 
+Quote Post
aanbor
сообщение Dec 27 2012, 08:18
Сообщение #3


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

Группа: Свой
Сообщений: 103
Регистрация: 23-06-07
Пользователь №: 28 642



В принципе я так себе и представлял: отладил-вышел-включил оптимизацию-пересобрал проект-запустил-вышел-отключил оптимизацию-пересобрал проект и так много-много итераций. Тогда возникает вопрос: если памяти хватает, особо высокая скорость не требуется, а так ли нужна эта самая оптимизация?
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 27 2012, 10:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(aanbor @ Dec 27 2012, 12:18) *
Тогда возникает вопрос: если памяти хватает, особо высокая скорость не требуется, а так ли нужна эта самая оптимизация?

В этой ситуации (хватает и памяти, и скорости) оптимизация не даёт ничего.
Однако, если вы рассчитываете использовать написанный код в других проектах, в которых может быть включен высокий уровень оптимизации, тестирование кода с включенной оптимизацией может помочь заранее отловить баги, зависящие от уровня оптимизации. То есть по сути дополнительное тестирование как инвестиция в будущее повторное использование кода.
Go to the top of the page
 
+Quote Post
aanbor
сообщение Dec 27 2012, 13:12
Сообщение #5


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

Группа: Свой
Сообщений: 103
Регистрация: 23-06-07
Пользователь №: 28 642



Спасибо, scifi, за полезную информацию.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 28 2012, 05:39
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Полностью согласен с scifi. Могу только добавить, что включение полной оптимизации полезно в выявлении скрытых багов, которые могут проявиться при её включении. Если её не включать, то баг останется, но не будет проявляться до некоторого момента, пока так сложатся звёзды на небе и переменные в map-файле, что и без оптимизации перестанет работать, но тогда уже будет непонятно где искать баг.
При полной оптимизации обычно более полно используются регистры, да и вообще - код более перетасовывается, что часто помогает скрытым багам вылазить наружу.
Всё сказанное конечно не относится к случаю если оптимизатор криво реализован в компиляторе. В таком случае оптимизацию вообще нельзя включать.
Go to the top of the page
 
+Quote Post

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

 


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


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