Как правильно настроить грабли ввк 6



Настройки компилятора в Atmel Studio 6 и отладка на симуляторе - грабли

Интересная, но, в общем, неудивительная вещь при отладке — возможно, кому-то пригодится.

Заметил, что при пошаговом выполнении программы оказываюсь в той функции, которая в этот момент (да и вообще в данной конфигурации программы) не вызывается. Причем оказываюсь не в начале функции, а где-то в середине. Заинтересовался — какого, собственно?

Настройки компилятора (оптимизация) были следующие:
— уровень оптимизации -O2
— галки стояли на «Pack structure members together (-fpack-struct)» и «Prepare functions for garbage collection (-ffunction-sections)»

Попробовал поиграться с уровнями оптимизации — без толку. Выключаю -ffunction-sections — всё нормально. А жаба душит, включение этой опции даёт уменьшение размера почти в два раза.

В хелпе написано следующее:
"-ffunction-sections: Prepare functions for garbage collection, if a function is never used, its memory will be scrapped"
То бишь, если функция нигде не используется, то под неё вроде бы память не выделяется. Оно и логично, сборка мусора и все такое.

То, что меня удивило: при включенной опции — при попадании программы в середину нигде не использующейся функции выхожу я из неё буквально на следующем шаге и туда, куда мне и надо. Посмотрел окно «disassembly» — там, куда я попадаю, Сишный текст строчки из НЕИСПОЛЬЗУЕМОЙ функции есть, а ассемблерные инструкции все как надо (там идет сброс флага и выход из ИСПОЛЬЗУЕМОЙ функции, в которую я заходил и как раз должен из неё выйти) Что за ерунда — так и не понял, может, кто точно знает и расскажет? В железе пока не пробовал, но судя по ассемблерному тексту, все должно работать правильно.

В общем, резюмирую — при отладке этой опцией компилятора надо пользоваться аккуратно, а лучше не пользоваться.

Да, чуть не забыл, при использовании -ffunction-sections в опциях линкера должно быть включено «Garbage collect unused sections (-Wl--gc-sections)», а то толку от использования -ffunction-sections не будет.

Для интересующихся, про настройки компилятора и линкера: Optimisations of AVR programs using avr-gcc

Комментарии ( 15 )

А внимательней посмотреть? Скорей всего оптимизатор решил приколоться и обьединил куски кода, а логика не порушилась. А если O0 поставить та же фигня?

у меня похожие глюки вылазят в кейле и вроде в симуляторе четвертой студии тоже. Я как-то решил, что это глюк визуализации отладки, потому как дизассемблер показывает, что все правильно исполняется. Особенно любит отладчик скакать по инструкциям циклов, из-за этого иногда сложно определить сколько проходов реально прошло, приходится открывать окно переменных и смотреть.

В четвертой я тоже с таким сталкивался, и в итоге забил, т.к. дизассемблер и железо работали нормально. Видимо, это удачно переехавший глюк…

При нулевом уровне оптимизации картина примерно такая же, если на сишный текст смотреть, с ассемблерным сильно подробно не разбирался…

В CooCox таже фигня при отладке и это нормально — если используешь -O1,-O2 то при отладке среда «промахивается» и курсор ставиться нифига не туда где должно быть исполнение, но это не сильно мешает т.к. можно догадаться

Интересно, а почему она промахивается? Я сейчас попробовал — при выключенной оптимизации например даже <> как и должно быть считаются оператором и туда ставится курсор, а стоит включить оптимизацию и уже хренушки.

Похоже на косяки генерации debug info. Либо дебаг-инфо считает что функции не были почиканы линкером.
Алсо, это же надо додуматься обычный смартлинк так назвать. Ну и реализовано оно через задницу, отсюда и глюки. Последствия использования устаревшего формата объектников, в которых не предусмотрена возможность хранения нужной метаинформации.
Поковыряй настройки генерации дебажной инфы. А то мож ты вообще в релизе собирашь, с выключенной дебаг-инфо и оно использует старую случайно сгенеренную в дебаг-конфигурации.

Собираю в дебаге с максимальным уровнем дебаг-инфо (-g3). А что есть смартлинк?

Смартлинк — выкидывание неиспользуемых функций, переменных и всего такого при линковке. Из-за излишне глубокого разделения этапов компиляции и линковки в С реализация ее затруднена. По крайней мере основанные на BinUtils компиляторы реализуют умную линковку через задницу — создавая по секции на функцию, а то и по объектнику на функцию, из-за ограничений BinUtils и его формата объектников. Особо страшно это выглядит в паскале — он рассчитан на модульную компиляцию и прикручивание его к binutils выглядит как лес костылей.

сейчас глянул, да, почти по секции на функцию получается
по объектнику на функцию это конечно вообще жесть.
спасибо за инфу.

Ford Focus ST Facelifted &#169; › Бортжурнал › PB Brakes BBK Big Brakes Kit 6-pot 330mm УСТАНОВЛЕНЫ!

Все доброго утра!
В субботу наконец-то был установлен комплект. Сразу скажу, без танцев с бубном не обошлось. Ну во-первых, я не знаю как я так собирался, что забыл шланг для прокачки тормозов и собственно тормозную жидкость. Во-вторых, в моем багажнике не хватило некоторого инструмента. Слава Богу, установка производилась в гараже, добродушно предоставленном Вячеславом fordfocusclub . поэтому все чего не хватило, в том числе моих мозгов, было у него в наличии )) гыыыыыы

Домкратим колесо, откручиваем гайки/секретки, снимаем колесо.Снимаем фиксирующую пружину (следим чтоб не в глаз). Демонтируем колпачки с пальцев крепления суппорта, откручиваем оные шестигранником на "7". Снимаем суппорт, откручиваем от него тормозной шлан, приготовив перед этим что-нибудь чем можно его заткнуть во избежание пролива тормозной жидкости (тут у меня улилось грамм 50).
Откручиваем ключом на "18" болты крепления скобы, снимаем тормозные диски (прикипевшие — сбиваем чем-нить тяжелым через деревянную проставку).
Офигеваем от масштаба мероприятия)))
Дальше нужно делать так: прикручиваем переходную планку из набора,

ставим диск, примеряем новый суппорт — ага порядок… прикручиваем к новому суппорту тормозной шланг из комплекта с крепежом "banjo". Снимаем старый тормозной шланг (вытащив плоской отверткой скобу из под кронштейна на кузове и открутив гайку на трубке). Тут же прикручиваем новый шланг и воодружаем суппорт на его законное место.

новый тормозной шланг

Были нюансы с месторасположением нового шланга, но Вячеслав предложил отличную идею, которая впоследствии оказалось правильной (производитель подтвердил).

Прокачиваем тормоза чем-то похожим на трубку (пришлось воспользоваться хомутами и утекло немало лишней тормозухи — ну тут сам виноват, лучше бы бутерброды забыл, а трубку взял).

Ну естесно проставки STARLEKS 15мм шпилечные по кругу. На стоковые диски с вылетом ET55 данный комлпект не встает.

Как правильно и профессионально настроить Counter-Strike

Форум Navi-gaming.com

На форуме Na`Vi пользователи могут найти полезную информацию, касающуюся игровых дисциплин, в которые играют профессиональные игроки нашей команды. Почерпнуть для себя полезные советы и уроки из статей, написанных специально для того, чтобы каждый мог найти ответы на интересующие его вопросы. Также пользователи имеют возможность поделиться полезными сведениями и личным опытом, помочь друг другу и просто пообщаться на интересные темы.

Игровое сообщество «Natus Vincere» состоит из следующих разделов:

  • Natus Vincere
  • Counter-Strike: Global Offensive
  • Dota 2
  • Hearthstone
  • World of Tanks
  • Heroes of the Storm
  • Разное


Каждый из разделов киберфорума включает подразделы, в которых активно обсуждаются популярные игровые дисциплины, видеоматериалы и турнирные подробности, провайдеры и качество предоставляемого хостинга, игровые девайсы, технические проблемы, как с играми, так и с железом, а также другие важные для каждого геймера детали. Специальный раздел форума «Разное» содержит подразделы, в которых можно обсудить темы, не касающиеся игровых дисциплин, например, подраздел мувимейкинга поможет узнать тонкости создания красивых мувиков и хайлайтов, поделиться советами или найти для себя что-то новое.

Team Natus Vincere (lat. – born to conquer) also known as Na`Vi is a Ukrainian multigaming e-Sports organization. In 2010 our team was the first in Counter-Strike history to win three major tournaments in one calendar year: the Intel Extreme Masters, Electronic Sports World Cup and World Cyber Games. In 2011, Na`Vi.DotA won the $1,000,000 grand prize at The International, the first ever DotA 2 tournament, and defended their DotA 2 champion title at ESWC 2011. Natus Vincere now has Counter-Strike 1.6, DotA 2, StarCraft 2, FIFA 2012, League of Legends and Rage of Titans squads and holds 6 world champion titles in these disciplines.

Источники: http://we.easyelectronics.ru/madmazy/nastroyki-kompilyatora-v-atmel-studio-6-i-otladka-na-simulyatore---grabli.html, http://www.drive2.ru/l/3521751/, http://forum.navi-gaming.com/counter-strike_nastroyki_tehpomosch_i_utility/kak_pravilno_i_professionalno_nastroit_counter-strike/




Комментариев пока нет!

Поделитесь своим мнением