Easyelectronics.ru

Электроника для всех
Текущее время: 25 сен 2022, 06:46

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: volatile IAR'у не указ?
СообщениеДобавлено: 15 фев 2022, 17:12 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 2588
Откуда: Волноваха
Создаю в EEPROM инициализированный массив, обьявлен как volatile. При запуске отладки - EEPROM девственно чист.
Вложение:
2022-02-15_14-01-23.png
2022-02-15_14-01-23.png [ 28.69 Кб | Просмотров: 2141 ]

Если в программе указать, что массив есть, то он честно инициализируется и записывается в EEPROM:
Вложение:
2022-02-15_14-02-24.png
2022-02-15_14-02-24.png [ 29.46 Кб | Просмотров: 2141 ]

Уровень оптимизации на поведение компилятора не влияет, для чистоты эксперимента каждый раз контроллер полностью стирался,версия IAR 3.11.4
Разве volatile не должен запретить компилятору трогать эту переменную, даже если она не используется?

_________________
Хранитель форума


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: volatile IAR'у не указ?
СообщениеДобавлено: 15 фев 2022, 17:39 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3896
Думаю что дело в нестандартном ключевом слове __eeprom, да и в целом в том, что EEPROM не часть линейного адресного пространства. Стандарт Си про такое в принципе ничего не говорит, так что видимо компилятор в данном случае волен поступать как ему вздумается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: volatile IAR'у не указ?
СообщениеДобавлено: 15 фев 2022, 17:45 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 8083
Мое прочтение "volatile" означает: руки прочь с оптимизаторами (ускорителями). Т.е., аналогично параметру -O0 (для этой переменной).
А, в остальном, вся логика работы с переменной остается той-же, как и без оного ключа. IMHO, есссно. ))


Последний раз редактировалось u37 15 фев 2022, 17:47, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: volatile IAR'у не указ?
СообщениеДобавлено: 15 фев 2022, 17:46 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1712
Допустим есть volatile переменная значение которой считывается в цикле, тогда компилятор будет перечитывать ее значение на каждой итерации т.к., и это следует уже из названия, volatile переменные могут изменяться где-то в другом месте. Именно поэтому, а не потому, что для volatile отменяются все оптимизации. Если же переменная объявлена, но не используется, то компилятору без разницы меняется она или нет, на ход исполнения программы это никак не влияет, потому такую volatile переменную можно и выкинуть, gcc тоже так делает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: volatile IAR'у не указ?
СообщениеДобавлено: 15 фев 2022, 17:48 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 854
volatile гарантирует только, что 1) при обращении к переменной обязательно будет чтение или запись памяти, 2) при нескольких обращениях к volatile не будет изменён порядок обращений. Ничего другого оно не гарантирует, в том числе что компилятор не выбросит переменную, если она не используется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: volatile IAR'у не указ?
СообщениеДобавлено: 15 фев 2022, 18:02 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 1541
А с чего ты решил, что массив выкинул компилятор? Это сделал линковщик, который совершенно справедливо так поступил, не увидев обращений к секции данных в ееprom. У линковщика есть ключ, который заставляет его помещать в выходной файл всё, что он видит, не выкидывая ничего.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: volatile IAR'у не указ?
СообщениеДобавлено: 15 фев 2022, 18:07 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 2588
Откуда: Волноваха
Понятно, всем спасибо!
В реальном проекте, конечно, будет чтение и/или запись в такой массив, поэтому компилятор его не тронет.

_________________
Хранитель форума


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: volatile IAR'у не указ?
СообщениеДобавлено: 15 фев 2022, 18:30 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 854
tonyk писал(а):
А с чего ты решил, что массив выкинул компилятор?
Лень было писать "линковщик" ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: volatile IAR'у не указ?
СообщениеДобавлено: 15 фев 2022, 21:38 
Старожил

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 1541
Финский писал(а):
поэтому компилятор его не тронет.

Ещё раз: не компилятор, а линковщик. Не оговаривайся, следи за терминологией и это сбережёт тебе кучи времени и нервов. Проверено на собственной шкуре.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB