| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
14.07.2010, 22:44
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
Сообщение от kison
|
Ну так листинг то дайте. Интересно же посмотреть в чем проблемы.
Возьмите не последнюю версию компилятора. Я же дал - 16/23. Это меньше 25-ти.
|
Я вас не совсем понимаю. Какой листинг? Я тупо смотрю на экране осцилла ширину импульса. Скриншот могу прислать
Я не вижу этих 23 тактов. Я вижу, что если сигнал не меняется, тратится 15 тактов. Если сигнал с датчика изменился, то тратится 16 тактов. Такого быть не может.
Да ещё и при отключении оптимизации код вообще не работает...
|
|
|
|
14.07.2010, 23:06
|
|
|
Вид на жительство
Регистрация: 30.12.2006
Адрес: Junktown
Сообщений: 300
Сказал спасибо: 160
Сказали Спасибо 171 раз(а) в 59 сообщении(ях)
|
Re: Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
Если не трудно, выложите проект ВМлаб
__________________
Всегда стремись к недоступному
|
|
|
|
15.07.2010, 00:11
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
Сообщение от Godzilla82
|
|
Какой листинг?
|
Посмотрите там, где hex файл. Нужен файл с расширением lss. Или elf файл.
Сообщение от Godzilla82
|
|
Такого быть не может.
|
Вот чтоб это проверить и нужен листинг.
Студия есть? Вот выкладываю elf - откройте его студией, сохраните проект указав тип кристалла и запускайте симулятор.
https://kazus.run/forums/attachment....1&d=1279138246
|
|
|
|
15.07.2010, 00:15
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
Сообщение от rear
|
|
Если не трудно, выложите проект ВМлаб
|
Пожалуйста
main-o0.hex - оптимизация 0 (не работает)
main-o2.hex - оптимизация 2 (15/16)
Нажатие кнопки K0 на панели имитирует изменение одной фазы.
Сообщение от kison
|
|
Студия есть?
|
Студия как таковая есть. Но я пока с ней не работал вообще. Давно уже программированием не занимался, а тут по работе понадобилось. Да и интересно стало. Буду потихоньку разбираться.
Последний раз редактировалось Godzilla82; 15.07.2010 в 00:42.
|
|
|
|
15.07.2010, 00:53
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
Сообщение от Godzilla82
|
|
main-o2.hex - оптимизация 2 (15/16)
|
Да, забавно. Переменной count вообще не стало. Глючный релиз WinAvr похоже. Возьмите проверенный WinAvr 20071221. Я поэтому и не обновляю компилятор, в старом все предсказуемо. Вы CV трехлетней давности используете же, ну и возьмите WinAvr того же года. 
Вот хекс из старого WinAvr -
|
|
|
|
15.07.2010, 01:12
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
Сообщение от kison
|
|
Вы CV трехлетней давности используете...
|
Если есть лекарство от последней версии, поделитесь, плиз. Хотя бы паролем на установщик.
С CV работать приятнее в плане предсказуемости. Пусть он в некоторых случаях делает более громоздкий код, который работает на несколько процентов медленнее, но:
1. код работает так, как планировалось
2. не тратится время на танцы с бубном вокруг жадной оптимизации, съедающей чуть ли не весь код
3. в итоге получается работоспособная программа
4. особо радует мастер начального кода
и мне не важно, что там код не соответствует каким-то стандартам, что глобальные переменные располагаются не там, где надо. мне важно то, что я получи желаемый результат (работающую программу) с минимальными затратами. а также эта программа ненамного жирнее и работает ненамного медленнее "правильных" компиляторов.
Последний раз редактировалось Godzilla82; 15.07.2010 в 01:17.
|
|
|
|
15.07.2010, 02:41
|
|
|
Гражданин KAZUS.RUN
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
Сообщение от Godzilla82
|
|
С CV работать приятнее в плане предсказуемости.
|

Непредсказуемый компилятор - это что-то новое.
Как раз IAR, к примеру, предсказуем. Что вам подробно доказали.
Например в зависимости от объявления переменной он правильно её размещает. Предсказуемо.
|
Цитата:
|
Пусть он в некоторых случаях делает более громоздкий код, который работает на несколько процентов медленнее, но:
1. код работает так, как планировалось
|
Код везде работает как планировалось. Иначе как вообще можно работать? Не везде же 10 строк? Некоторые проекты состоят из десятков файлов и результирующий код - сотни килобайт. Лови там потом блох.
|
Цитата:
|
2. не тратится время на танцы с бубном вокруг жадной оптимизации, съедающей чуть ли не весь код
3. в итоге получается работоспособная программа
|
Это всё применимо к любому компилятору.
|
Цитата:
|
|
4. особо радует мастер начального кода
|
Это обсуждали. Для проффессионалов - это не нужно, для начинающих - крайне вредно.
|
Цитата:
|
|
и мне не важно, что там код не соответствует каким-то стандартам, что глобальные переменные располагаются не там, где надо. мне важно то, что я получи желаемый результат (работающую программу) с минимальными затратами.
|
Если это перенести на продукты питания, то вы написали следующее. Мне неважно, что колбаса не соответствует стандартам (например там химикатов много) и не важно, что что-то там не так заполнено, но, главное, что ей можно наестся.
|
Цитата:
|
|
а также эта программа ненамного жирнее и работает ненамного медленнее "правильных" компиляторов.
|
Вам никто не мешает пользоваться тем, чем вам нравится пользоваться. И вас никто не отговаривает от этого.
|
|
|
|
15.07.2010, 03:11
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
|
Re: Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
Сообщение от SasaVitebsk
|
|
Как раз IAR, к примеру, предсказуем.
|
Я в данном случае про WinAVR
Сообщение от SasaVitebsk
|
|
Код везде работает как планировалось. Иначе как вообще можно работать? Это всё применимо к любому компилятору.
|
Не ко всем. В WinAVR после включения оптимизации (а вот в случае с kison-ом и при отключении) нужно 1000 раз проверять, что выкинулось и что стало работать не так, как задумывалось из-за того, что компилятору вздумалось выкинуть половину кода.
Сообщение от SasaVitebsk
|
|
Это обсуждали. Для проффессионалов - это не нужно, для начинающих - крайне вредно.
|
Это сокращает время разработки. Значит полезно.
Сообщение от SasaVitebsk
|
|
Если это перенести на продукты питания, то вы написали следующее. Мне неважно, что колбаса не соответствует стандартам (например там химикатов много) и не важно, что что-то там не так заполнено, но, главное, что ей можно наестся.
|
Вот не надо всё коверкать. Есть задача - получить готовую программу, выполняющую конкретные действия в конкретные временные рамки. При работе с CVAVR время тратится в основном на алгоритм работы программы, а не на изучение багов и особенностей компилятора при различных режимах оптимизации.
Но если уж вы хотите аналогию с колбасой, то:
Есть две палки колбасы. Одна приготовлена за одно время. Другая - за другое время. И та и та колбаса соответствует все нормам, гостам и по вкусу - одинаковая. И количество химикатов в ней примерно одинаковое (в допустимых пределах).
Сообщение от SasaVitebsk
|
|
Вам никто не мешает пользоваться тем, чем вам нравится пользоваться. И вас никто не отговаривает от этого.
|
Не совсем так  Одна программа платная, другая - нет
|
|
|
|
15.07.2010, 04:09
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
Сообщение от Godzilla82
|
|
Если есть лекарство от последней версии, поделитесь, плиз. Хотя бы паролем на установщик.
|
Нету. Я сторонник свободного софта. Но тут на форуме появлялось лекарство.
Ну или вот информация, на другом форуме - http://forum.giga.ua/viewtopic.php?f...436720#p436720
Сообщение от Godzilla82
|
|
а также эта программа ненамного жирнее и работает ненамного медленнее "правильных" компиляторов.
|
Это пока программа маленькая. Стоит ей подрасти или например появится "плавучее" умножение/деление, как вместо проигрыша в единицы процентов Вы получите замедление раза в полтора. Кроме того свалка исходника в один файл удобна только на малых проектах. Как только он становится больше Вы начнете путаться. Особенно при отладке. Но впрочем уговаривать не буду - нравится CV, не планируются серьезные программы - им и пользуйтесь.
Сообщение от Godzilla82
|
|
Это сокращает время разработки. Значит полезно.
|
Это время увеличивает. Если Вы ошибетесь где расставляя галочки, то найти эту ошибку очень сложно.
|
|
|
|
15.07.2010, 11:17
|
|
|
Вид на жительство
Регистрация: 30.12.2006
Адрес: Junktown
Сообщений: 300
Сказал спасибо: 160
Сказали Спасибо 171 раз(а) в 59 сообщении(ях)
|
Re: Может ли меняться логика откомпилированной программы при использовании разных режимов оптимизации?
Первое, что бросилось в глаза:
register volatile unsigned int count asm("r4");
не можно так делать, так как инт - для winavr - 16 битный тип.
нужно так:
register volatile unsigned char count asm("r4");
Далее.
вместо count = 0; в самом начале кода нужно написать
asm("clr r4"); Не могу сказать почему так, но иначе не работает.
Дальше по тексту прогаммы можно смело писать
count = 0;
И тогда все будет работать независимо от выбранной оптимизации, и переменная count никуда не денется.
Также я пересобрал проект, с МАКЕ файлом, автоматически сгенерированным ВМЛАБом.
результат компиляции:
При отключенной оптимизации размер кода 107 слов (см. листинг opt_enable.lss )
При оптимизации по мин. размеру: код 45 слова (см. листинг opt_size.lss )
так же можно посмотреть файлы дизасемблера opt_size.asm и opt_disable.asm
__________________
Всегда стремись к недоступному
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:01.
|
|