[an error occurred while processing this directive]
Интересно, чем же это они некорректны? С какого перепою они стали некорректны?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
Dimonira
13 сентября 2005 г. 13:00
В ответ на:
Это не дурь а предупреждение, что такие операции в принципе некорректны(даже с запрещением прерываний), внимать предупреждению или нет - дело ваше
отправлено <font color=gray>F8</font> 13 сентября 2005 г. 12:36
Составить ответ
|||
Конференция
|||
Архив
Ответы
А как вы представляете себе корректное сравнение 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
,
пустое
)
Да не молчу я! Просто уже не помню, а что такое volatile?
—
Билл Гейтс
(13.09.2005 15:17
195.131.122.9
,
пустое
)
Ну это типа твой счет в банке:)))
—
F8
(13.09.2005 15:20
213.130.22.7
,
пустое
)
На самом деле, проблема понятна и прозрачна, и выеденного яйца не стоит, согласен c F8.
—
Щ.C.
(13.09.2005 14:27
144.206.186.102
,
пустое
)
Ага, я за почти 20 лет пользовал туеву хучу разных компилляторов и нигде такого предупреждения не было. Но тут, наконец, появился компиллятор 21-го века, "IAR 4.11A for AVR", который оказался самым правильным и корректным. Дождались! Ура-а-а-а!!!
—
Dimonira
(13.09.2005 14:44
195.131.122.9
,
пустое
)
Кстати, не только AVR, под MSP430 подобные предупреждения лепит, но я не делаю из этого трагедии :)
—
Щ.C.
(13.09.2005 15:02
144.206.186.102
, 127 байт)
Код генерит нормальный. Просто предупреждает не очень понятно. На первый взгляд возникает мысль, что работать не будет. Полез в дизассемлер (в отладчике) и посмотрел - всё нормально.
—
Dimonira
(13.09.2005 15:16
195.131.122.9
,
пустое
)
В ряде случаев, при переносе проектов в новые версии, заметил, что некоторые volatile просто лишние (+)
—
Щ.C.
(13.09.2005 15:24
144.206.186.102
, 58 байт)
А больше нигде и "не положено". Оптимизация на работу алгоритма влиять не должна, разве что на скорость. Так что остальное - магия.
—
Dimonira
(13.09.2005 15:51
195.131.122.9
,
пустое
)
А вот это уже интересно. Хотелось бы узнать субъективный или объективный критерий где надо ставить volatile. Ну, кроме употребляемых в прерывании конечно.
—
Lamer
(13.09.2005 15:34
80.243.1.229
,
пустое
)
Коротко - ставить на те переменные, которые могут меняться без ведома компиллятора, т.е. по другим "причинам".
—
Dimonira
(13.09.2005 16:14
195.131.122.9
,
пустое
)
Ну об этом часто уже здесь говорили (+)
—
Щ.C.
(13.09.2005 16:00
144.206.186.102
, 358 байт)
Понятно. Я злоупотребляю ими честно говоря :)
—
Lamer
(13.09.2005 16:16
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
,
пустое
)
Раз разработчики компилятора добавили это предупреждение зачит либо они идиоты, что маловероятно, либо имели на то причины,(+)
—
F8
(13.09.2005 15:13
213.130.22.7
, 274 байт)
Сомнительно, чтобы реагировали на жалобы ламеров. Так что причины "пересмотра канонов" непонятны. Может готовятся к появлению двух'ядерных AVR-ов с двух'портовой памятью?
—
Dimonira
(13.09.2005 15:24
195.131.122.9
,
пустое
)
Вот-вот, а генные инженеры под это дело збацают программера с двумя головами)))
—
F8
(13.09.2005 15:36
213.130.22.7
,
пустое
)
Не-е-е, голова одна. Но мозга - два. :)))
—
Dimonira
(13.09.2005 16:17
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
,
пустое
)
Отправка ответа
Имя (обязательно):
Пароль:
E-mail:
NoIX ключ
:
Запомнить
Тема (обязательно):
Сообщение:
Ссылка на URL:
Название ссылки:
URL изображения:
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru