[an error occurred while processing this directive]
Достала уже эта IAR EW для AVR! Уже версия 4.11А, а до сих пор они заставляют линкер пихать сегмент NEAR_N (те данные что по __no_init) во внешнюю память! А её нету! Сколько можно уже править эту лабуду?! Или может я что-то проглядел, отстал от жизни?(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
Dimonira 13 сентября 2005 г. 11:02
Я ставлю __no_init, чтобы выкинуть кусок стартового кода. В версии 4.11А я правил файлы:
cfg1s.xcl cfg3s.xcl cfg5s.xcl
Менял в них строку:
-Z(DATA)NEAR_N_..X_EXT_NV_BASE:+_..X_EXT_NV_SIZE
на строку:
-Z(DATA)NEAR_N=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_NV_BASE:+_..X_EXT_NV_SIZE
Составить ответ
|||
Конференция
|||
Архив
Ответы
В 3.20D вроде нормально было. — Михаил Е. (13.09.2005 15:32 81.13.30.10 , пустое )
И вообще нормальная оболочка, скобочки подсвечивает правда xcl руками править надо зато скобочки подсвечивает.... :) — F8 (13.09.2005 13:58 213.130.22.7 , пустое )
Тож хня :( — ВМФ (13.09.2005 13:50 195.170.224.107 , 94 байт, ссылка )
Объяснялище(+) — Lamer (13.09.2005 11:28 80.243.1.229 , 314 байт)
Ну может теоретически компилятор и прав. Поверяли есть ли такое предупреждение если эти переменные 32 бита, то есть равны разрядности MCU? — Elektronik (13.09.2005 14:25 194.85.99.225 , пустое )
А что с volatile? Я тоже не въехал. Эта версия 4.11А тоже начала писать странные варнинги на сравнение двух volatile переменных в if. Даже когда ставлю бит в volatile переменной, тот же варнинг. Дурь, которой раньше не было. — Dimonira (13.09.2005 11:58 195.131.122.9 , пустое )
Это не дурь а предупреждение, что такие операции в принципе некорректны(даже с запрещением прерываний), внимать предупреждению или нет - дело ваше — F8 (13.09.2005 12:36 213.130.22.7 , пустое )
Интересно, чем же это они некорректны? С какого перепою они стали некорректны? — Dimonira (13.09.2005 13:00 195.131.122.9 , пустое )
А как вы представляете себе корректное сравнение volatile? — F8 (13.09.2005 13:15 213.130.22.7 , пустое )
Примерно так как и делается на компиляторах. Хотя б как на древнем ТурбоС. — Lamer (13.09.2005 13:26 80.243.1.229 , пустое )
А так как компиллятор и делает: одну и другую в регистры, потом регистры сравнить. И ежу ясно, что в момент сравнения регистров сами переменные могут измениться. Дык на то и прерывания, чтобы происходить в любой момент. Это и компиллятору и программисту известно (надеюсь). Чего тогда плакаться компилятору? Только мозги пудрит. Тем более, что эти операции я делаю в самом обработчике прерывания (хотя в общем случае без разницы). — Dimonira (13.09.2005 13:25 195.131.122.9 , пустое )
Вот именно, что могут изменится, о чем он и ПРЕДУПРЕЖДАЕТ он же не говорит, что ошибка, а говорит - ''сделаю, что смогу, но результат не гарантирован'' если вас это раздражает запретите выдавать это предупреждение (например #pragma diag_suppress=...), кстати volatile необязательно связан с прерыванием. — F8 (13.09.2005 13:47 213.130.22.7 , пустое )
Позвольте, но повторяю, - volatile для этого и вводился. Изменение переменной volatile в любой момент уже ПОДРАЗУМЕВАЕТСЯ. Зачем тогда об этом предупреждать?! А если что-то некорректно, как вы говорите, то тогда это ошибка, а не предупреждение. Да и какая нахрен разница компиллятору что я делаю с volatile переменной? У него одна задача - использовать всегда только её (из одной ячейки памяти), а не плодить копии по своему усмотрению. — Dimonira (13.09.2005 14:00 195.131.122.9 , пустое )
И воопще на этот вопрос может ответить только Bill. О чем он молчит? — Lamer (13.09.2005 14:15 80.243.1.229 , пустое )
Потому, что эту операци в принципе невозможно провести корректно еси не нравится еще раз повторяю запретите это предупреждение, если считаете ошибкой - возведите в ранг ошибки (dial_error) :) — F8 (13.09.2005 14:13 213.130.22.7 , пустое )
Как в стенку горох! Если говорить о принципе, тогда ВСЕ операции с volatile-переменными некорректны. Но если так, тогда они не нужны, иначе зачем что-то, с чем нельзя ничего сделать! Но, если они всё-таки нужны и допустимы, что толку говорить о корректности, если её не может быть?! Типа, компилятор мне говорит: "А-а-а-а! А вы что, разве не знали? Эти переменные, volatile которые, они такие-секие... У-у-у-у!" — Dimonira (13.09.2005 14:53 195.131.122.9 , пустое )
Да не только прерывания... C помощью volatile чаще приходится уходить от навязчивой компилерной оптимизации (у оптимизаторов свои закидоны, как известно). — Lamer (13.09.2005 13:42 80.243.1.229 , пустое )
Для того volatile и вводился, чтобы заставить компиллятор корректно сделать код, который должен выполнить корректную операцию. — Dimonira (13.09.2005 13:02 195.131.122.9 , пустое )
Ответ: — Dimonira (13.09.2005 11:57 195.131.122.9 , пустое )
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru