Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Есть в ИАРЕ неприятный момент
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
AlbertShklovich
Есть в ИАРЕ неприятный момент. Проявляется в том что он при высокой оптимизации коцает локальные переменные. Причём проявляется в больших проектах и на разных целевых платформах. Насколько я помню проблема возникает из-за конфликтного использования регистров - в качестве хранилища локальной переменной. Когда переменную делаю волатайл или выношу в область глобальных переменных проблема пропадала .. но истоки её так выяснть неуспел.
Amper25
Ну так может эти переменные используются в разных кусках программы и их действительно надо делать volatile.

Кстати, такая проблема может быть вызвана еще недостаточным размером Heap. И одни переменные коцаются другими.
rezident
Какая же это проблема? Это личное дело компилятора использовать локальные (автоматические) переменные на стеке или в регистрах. Если вам нужны локальные переменные именно в ОЗУ, то используйте тип static. Только учтите, что для такой переменной место в ОЗУ отводится как и для глобальной - постоянно.
WEST128
Это наблюдается не только в IAR, но и в любой другом хорошем компиляторе. Зачем пихать переменную в ОЗУ, если она используется только внутри функции, и больше нигде не нужна ? Доступ к регистру происходит быстрее, чем доступ к ОЗУ (за редким исключением). Проблема появляется при отладке кода, иногда бывают нюансы. Лично я не использую во время отладки оптимизацию, так проще. А если после включения оптимизации работа программы была нарушена, значит, я где-то нарушил правила языка программирования (с вероятностью 98%, и только 2% - глюки компилятора и/или железа).
Sat360
В том и смысл оптимизации... Если есть глобальная переменная, которая используется лишь в одном месте программы, и есть переменная, например, в прерывании, которая кроме него нигде не используется, то почему бы их не хранить в одном и том же месте? Конечно прерывание может сработать во время работы той функции, но раз программист сказал что эта переменная неволатильная (точнее наоборот - не сказал, что волатильная wink.gif, и хочет оптимизации, то мы пару байт сэкономим.
Сергей Борщ
Цитата(AlbertShklovich @ Jun 8 2008, 13:52) *
Проявляется в том что он при высокой оптимизации коцает локальные переменные.
Попытайтесь объяснить, что в вашем понимании означает "коцает", желательно с примером.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.