Size: a a a

2019 January 29

GK

Grigorii Kuzmin in ELECTRONIX
и вернуть тебе предыдущее значение из временной переменной
источник

GK

Grigorii Kuzmin in ELECTRONIX
Thorn
1. такие вещи надо объявлять volatile
2. инкремент будет транслирован минимум в 3 машинные команды, так что атомарности не будет
4. см. литературу по cortex-m (Джозеф Ю и др.), там все это описано в деталях
я в эти пункты бы ещё добавил использовать преинкремент, если нет разницы какой брать
источник

A

Aleksander in ELECTRONIX
Grigorii Kuzmin
сохранить его во временную переменную
зачем? процессор может сразу увеличить регистр на месте
источник

S

Sergey in ELECTRONIX
Thorn
1. такие вещи надо объявлять volatile
2. инкремент будет транслирован минимум в 3 машинные команды, так что атомарности не будет
4. см. литературу по cortex-m (Джозеф Ю и др.), там все это описано в деталях
1. Я думал, что volatile - это для случая, если эту переменную может изменить какой-то периферийный модуль. Получается, что и прерывание считается "неожидаемым" для оптимизатора компилятора?
источник

A

Aleksander in ELECTRONIX
компилятор разместит счетчик в регситре и все
источник

GK

Grigorii Kuzmin in ELECTRONIX
Aleksander
зачем? процессор может сразу увеличить регистр на месте
а с чего ты взял, что твоя переменная в регистре лежит
источник

GK

Grigorii Kuzmin in ELECTRONIX
Sergey
1. Я думал, что volatile - это для случая, если эту переменную может изменить какой-то периферийный модуль. Получается, что и прерывание считается "неожидаемым" для оптимизатора компилятора?
конечно
источник

AZ

Andrey Zaostrovnykh in ELECTRONIX
Grigorii Kuzmin
а с чего ты взял, что твоя переменная в регистре лежит
😄
источник

A

Aleksander in ELECTRONIX
Grigorii Kuzmin
а с чего ты взял, что твоя переменная в регистре лежит
компилятор умный ,скорее всего так и сделает
источник

GK

Grigorii Kuzmin in ELECTRONIX
на обработчик прерывания нигде нет ссылок из кода
источник

A

Aleksander in ELECTRONIX
хотя да, см ASM код
источник

T

Thorn in ELECTRONIX
Aleksander
зачем? процессор может сразу увеличить регистр на месте
глобальная переменная в регистре жить не может, у нее адрес должен быть (по крайней мере если она экспортируется из модуля)
источник

GK

Grigorii Kuzmin in ELECTRONIX
опередил)
источник

S

Sergey in ELECTRONIX
Спасибо! Сейчас гляну, что там в ASM...
источник

GK

Grigorii Kuzmin in ELECTRONIX
глобальная переменная в бсс живёт вроде
источник

T

Thorn in ELECTRONIX
п. 3 — в свежем arm-gcc вроде должны работать стандартные atomic типы, вот их можно использовать
источник

A

Aleksander in ELECTRONIX
а по косвенной адресации нельзя увеличить на месте?
источник

T

Thorn in ELECTRONIX
Aleksander
а где п3? и с чего простой инкремент будет 3 инструкции занимать?
google load/store architecture
источник

T

Thorn in ELECTRONIX
Aleksander
а по косвенной адресации нельзя увеличить на месте?
это не x86
источник

GK

Grigorii Kuzmin in ELECTRONIX
Grigorii Kuzmin
глобальная переменная в бсс живёт вроде
@pthorn я прав?
источник