jenya7 0 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба Правильно я понимаю что определив __no_init int my_var; переменная сохранит свое значение после отключения питания? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 13 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба Нет. По умолчанию глобальные переменные инициализируются нулями (если значение явно не задано). Если указано __no_init то инициализация не происходит и значения у этих переменных могут быть любыми. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба 1 hour ago, arhiv6 said: Нет. По умолчанию глобальные переменные инициализируются нулями (если значение явно не задано). Если указано __no_init то инициализация не происходит и значения у этих переменных могут быть любыми. спасибо. не понимаю тогда зачем нужен __no_init. как по мне пусть лучше переменная будет обнуленная чем с мусором. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 122 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба Только что, jenya7 сказал: спасибо. не понимаю тогда зачем нужен __no_init. как по мне пусть лучше переменная будет обнуленная чем с мусором. Бывает, что наоборот, требуется не обнулять переменную при сбросе. Сбросили девайс, а содержимое памяти с таким квалификатором останется неизменным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 января, 2019 Опубликовано 14 января, 2019 (изменено) · Жалоба 1 hour ago, Arlleex said: Бывает, что наоборот, требуется не обнулять переменную при сбросе. Сбросили девайс, а содержимое памяти с таким квалификатором останется неизменным. в том то и вопос либо 1 hour ago, Arlleex said: содержимое памяти с таким квалификатором останется неизменным. либо 2 hours ago, arhiv6 said: значения у этих переменных могут быть любыми. Изменено 14 января, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 44 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба переменная может находиться в какой-нибудь внешней памяти, контроллер которой ещё не проинициализирован. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба то есть при сбросе с сохраненной запиткой значение в переменной останется неизменным. а при полном спросе по питанию значения потеряются. 2 minutes ago, _pv said: переменная может находиться в какой-нибудь внешней памяти, контроллер которой ещё не проинициализирован. ну так инициализирую при обращении к внешней памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 44 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба __section (SDRAM) int var = 0x1234; void main(){ SDRAM_Controller_Init(); } компилятору в таком случае что по вашему сделать надо? догадаться что инициализировать переменную пока рано, и записать в неё значение только после инициализации контроллера памяти? ну а просто int var; равносильно int var = 0; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба 2 минуты назад, jenya7 сказал: то есть при сбросе с сохраненной запиткой значение в переменной останется неизменным. а при полном спросе по питанию значения потеряются. Совершенно верно. Только обратите внимание, что это поведение определяется устройством Вселенной в которой нам довелось жить и конструкцией конкретного микроконтроллера, а вовсе не иаровским расширением(extended keyword) __no_init. Последнее всего лишь отменяет инициализацию при старте программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба 26 minutes ago, _pv said: __section (SDRAM) int var = 0x1234; void main(){ SDRAM_Controller_Init(); } компилятору в таком случае что по вашему сделать надо? догадаться что инициализировать переменную пока рано, и записать в неё значение только после инициализации контроллера памяти? ну а просто int var; равносильно int var = 0; так а в чем проблема я не понял? опасение что я воспользуюсь переменной до SDRAM_Controller_Init(); ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба После отключения питания переменная не может сохранить свое значение, потому что перестает существовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба Например, для работы с сегментами EEPROM удобно __no_init использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 122 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба Или для флагов перехода в загрузчик, или для сохранения структуры причины отказа в бортовой журнал после немедленного сброса, или много еще почему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 116 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба 1 час назад, jenya7 сказал: так а в чем проблема я не понял? опасение что я воспользуюсь переменной до SDRAM_Controller_Init(); ? А как вы думаете, кто и когда должен занести 0x1234 в var? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 44 14 января, 2019 Опубликовано 14 января, 2019 · Жалоба 1 hour ago, jenya7 said: так а в чем проблема я не понял? опасение что я воспользуюсь переменной до SDRAM_Controller_Init(); ? Ну например, можно словить какое-нибудь исключение, за то что полезли туда куда не надо, до инициализации контроллера памяти. Повторюсь что просто int var; равносильно int var = 0; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться