-
- Успех будет лишь в том случае, если адрес константы будет даден
правильный. А если вдруг компилятор решил (допустим, оптимизация на
скорость) оставить константу в ОЗУ? И даст контроллеру ПДП адрес из
ОЗУ, с которым тот не совладает? Volatile заставляет компилятор,
при обращении к константе, обращаться именно к флэш. А значит, и
адрес для ПДП будет взят и передан верный. - Nikolay_Po(21.08.2023 17:14)
- Это не так работает. В заповедях написано, что переменная static
живёт от начала работы программы и до конца. Если взят её адрес,
переменную нельзя выкидывать. Всё, больше там ничего нет. Вы просто
транслируете распространённые мифы. - SciFi(21.08.2023 17:18)
- ну, кстати, Николай интересные вещи говорит ) статик не означает, что переменная обязательно во флэше расположится - 0men(21.08.2023 17:29)
- Так компилятор и не выкинет переменную (константу), и адрес сохранит. Просто модифицирует адресную арифметику под ту область памяти, куда ему удобно эту константу положить. К примеру, GCC с -O3 -flto, может хранить константы в ОЗУ лишь потому, что для чтения ПЗУ нужна особая процедура, увеличивающая время выполнения кода (к примеру, в AVR). И я не мог заставить программу читать серийный номер прямо из ПЗУ, до тех пор, пока не объявил константу volatile. - Nikolay_Po(21.08.2023 17:25)
- Это не так работает. В заповедях написано, что переменная static
живёт от начала работы программы и до конца. Если взят её адрес,
переменную нельзя выкидывать. Всё, больше там ничего нет. Вы просто
транслируете распространённые мифы. - SciFi(21.08.2023 17:18)
- Успех будет лишь в том случае, если адрес константы будет даден
правильный. А если вдруг компилятор решил (допустим, оптимизация на
скорость) оставить константу в ОЗУ? И даст контроллеру ПДП адрес из
ОЗУ, с которым тот не совладает? Volatile заставляет компилятор,
при обращении к константе, обращаться именно к флэш. А значит, и
адрес для ПДП будет взят и передан верный. - Nikolay_Po(21.08.2023 17:14)