-
- Ну, например, для STM8 это может выглядеть так: Bill(220 знак., 19.12.2017 10:03)
- Если избавиться от семантического сахара, то получается вот что: Дупкин(113 знак., 18.12.2017 14:41, )
- Уголовка - это вообще без чтения (берется временное значение из регистра). Если требовать два чтения, это значит сажать за колоски, т.к. практического смысла нет (прерывание могло придти позже). И не думаю, что исправление исходников повлияет на VLLV(11 знак., 18.12.2017 13:30)
- Поэтому содержимое volatile-переменной лучше явно переложить в обычную переменную перед началом работы, и наоборот, в конце вложить обратно. - fk0(18.12.2017 13:33)
- +1 - 3m(18.12.2017 20:46)
- Это да. Но, скажем, на arm это даёт эффективный код (регистров довольно много), а на STM8 (где, грубо говоря, только аккумулятор, зато есть всякие режимы адресации) - наоборот. Впрочем, это издержки volatile. - SciFi(18.12.2017 13:49)
- Да, это часто требуется и из-за предупреждений о конфликте с другими volatile. - VLLV(18.12.2017 13:40)
- Поэтому содержимое volatile-переменной лучше явно переложить в обычную переменную перед началом работы, и наоборот, в конце вложить обратно. - fk0(18.12.2017 13:33)
- ИМХО, если использовать значение от предыдущего чтения — то это уже не volatile. А декомпилятор чего показывает? - Alex B.(18.12.2017 13:07)
- Немного не так. В результатом выражения v++ является предыдущее значение v. А побочным эффектом -- операция чтение-инкремент-запись над v. А результат это уже не сама v как бы, поэтому по-моему имеет право быть одно чтение, а имеет право быть fk0(108 знак., 18.12.2017 13:26)
- GNU Arm Embedded делает одно чтение и одну запись. Я думаю, вывод такой: если это имеет значение, переделать исходник так, чтобы убрать правовые коллизии... - SciFi(18.12.2017 13:18)
- Пока выхлоп реальных компиляторов не очень интересен. Я подхожу к этому вопросу с точки зрения юриспруденции :-) - SciFi(18.12.2017 13:09)