[an error occurred while processing this directive]
Объяснялище(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Способы избавления такие ( совместно с Михаил Е. )
1. убрать галочку Configure system not .XCL file
2. сунуть __no_init в функцию
3. дать переменной адрес @
4 послать нах сырую среду
Я выбрал 4. Тем более это не единственная странность.
Попробуйте перемножить 2 volatile числа - тоже не слава Богу.
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Ну может теоретически компилятор и прав. Поверяли есть ли такое предупреждение если эти переменные 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