-
- Если писать на ассемблере самому, или на Си с выключеной
оптимизацией, - то волятильность ничего не даёт. Иначе компилятор
наоптимизирует так, что программа может перестать работать.
Например, объявлены две переменные, им присвоены значения, после
эти переменные проверяются, по результатам модифицируются порты.
Текст на Си: vpv.vpv(1347 знак., 01.02.2023 06:53)
- Выкинул и правильно сделал, потому что ваш пример неудачный. Вот
вам лучше пример, переделайте под ваш проц/компилятор/среду. И
давайте смотреть, что будет выкинуто С ОПТИМИЗАЦИЕЙ. Costic(284 знак., 01.02.2023 14:07)
- Будет выкинуто ровно то же самое. Я не поленился, даже скриншоты
сделал (для пущей достоверности :-)))) vpv.vpv(385 знак., 02.02.2023 09:21, картинка, картинка)
- Вот volatile работает, внутри while(1) постоянно загружают
переменную vol_c из памяти. А вы утверждали: "Если писать ...на Си
с выключеной оптимизацией, - то волятильность ничего не даёт." ДАЁТ
ЖЕ! - Costic(02.02.2023 14:38)
- Волатильность "не даёт", если нет оптимизаццыи. Когда оптимизация,
то "даёт". Со всем уважэнием. Именно это вам и показывают. - mse homjak(02.02.2023 21:14)
- Именно так. С выключенной оптимизацией компилятор IAR становится максимально тупым (превращается в "компилятор для полных идиотов" :-))), ему всё равно, волятильна переменная или нет, всё равно, что значение уже есть в регистре - он всякий раз заново её пишет в регистр перед отправкой в порт. Вот листинг того же самого с ВЫКЛЮЧЕННОЙ оптимизацией: vpv.vpv(1 знак., 03.02.2023 08:24, картинка)
- У меня есть компилятор, в котором даже "оптимизация" такая, что ей
эта волатильность по барабану. Туповат он по сегодняшним меркам, но
всё равно хороший :-) - SciFi(02.02.2023 21:25)
- Ну, как грица, "это не ваше умение, это наша недоработка"(С) А мог бы и бритвой по лицу... - mse homjak(02.02.2023 21:33)
- Волатильность "не даёт", если нет оптимизаццыи. Когда оптимизация,
то "даёт". Со всем уважэнием. Именно это вам и показывают. - mse homjak(02.02.2023 21:14)
- Вот volatile работает, внутри while(1) постоянно загружают
переменную vol_c из памяти. А вы утверждали: "Если писать ...на Си
с выключеной оптимизацией, - то волятильность ничего не даёт." ДАЁТ
ЖЕ! - Costic(02.02.2023 14:38)
- Будет выкинуто ровно то же самое. Я не поленился, даже скриншоты
сделал (для пущей достоверности :-)))) vpv.vpv(385 знак., 02.02.2023 09:21, картинка, картинка)
- Выкинул и правильно сделал, потому что ваш пример неудачный. Вот
вам лучше пример, переделайте под ваш проц/компилятор/среду. И
давайте смотреть, что будет выкинуто С ОПТИМИЗАЦИЕЙ. Costic(284 знак., 01.02.2023 14:07)
- Гарантию того, что переменная не будет в регистре размещаться и
всегда будет содержать актуальное значение, что важно, например, во
время прерываний. - Costic(31.01.2023 17:59)
- все ли 8-ми битники гарантируют атомарное чтение/запись
многобайтовых переменных, если во время операции произойдёт
прерывание? - пpocтoвacя(01.02.2023 08:30, )
- Про все - не знаю. А вот у Силабса команда (любая) должна закончить выполнение (не важно сколько тактов): Costic(172 знак., 01.02.2023 14:20)
- Ни один не гарантирует. - vpv.vpv(01.02.2023 13:42)
- все ли 8-ми битники гарантируют атомарное чтение/запись
многобайтовых переменных, если во время операции произойдёт
прерывание? - пpocтoвacя(01.02.2023 08:30, )
- Если писать на ассемблере самому, или на Си с выключеной
оптимизацией, - то волятильность ничего не даёт. Иначе компилятор
наоптимизирует так, что программа может перестать работать.
Например, объявлены две переменные, им присвоены значения, после
эти переменные проверяются, по результатам модифицируются порты.
Текст на Си: vpv.vpv(1347 знак., 01.02.2023 06:53)