Вопрос по прерываниям и таймерам

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andriano пишет:

 Т.е. прочитали мы что-то из регистра, а в нем от этого что-то поменялось.

"и как тут не быть дураком..."?

Dinosaur
Dinosaur аватар
Offline
Зарегистрирован: 01.01.2018

andriano пишет:

Это потому, что у Вас сложилось ложно впечатление, что регистр должен обладать свойствами ячейки памяти.

Это в ячейку памяти, если мы что-то записали, то она должна это хранить без искажений.
А с регистром - совсем не так, он на запись должен отвечать действием. И это действие может быть любым. Например, поменять все биты в регистре на противоположные. Причем, этот регистр, в котором изменяются биты, может быть совсем не тем, куда мы пишем.
Просто откажитесь от заблуждения "регистр должен хранить записанную в него информацию", и все встанет на свои места.
 
PS. Кстати, регистр может отвечать действием не только на запись, но и на чтение. Т.е. прочитали мы что-то из регистра, а в нем от этого что-то поменялось.

Ок, принял к сведению. А где про подобные особенности регистров расписано? Про TIFR2 в даташите совсем не написано что его нужно перезаписать целиком чтобы сбросить флаг. Или есть какие то общие "правила поведения регистров"?

__Alexander
Offline
Зарегистрирован: 24.10.2012

BOOM, если произойдет другое, то выставится флаг и потом выполнится согласно приоритету. При этом, между прерываниями должна выполниться хоть одна команда основного кода.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Dinosaur пишет:

Ок, принял к сведению. А где про подобные особенности регистров расписано? Про TIFR2 в даташите совсем не написано что его нужно перезаписать целиком чтобы сбросить флаг. Или есть какие то общие "правила поведения регистров"?

Так его и не надо перезаписывать целиком. Соответсвующий флаг сбрасывается записью 1ы в нужный флаг. 

• Bit 2 – OCF2B: Output Compare Flag 2 B The OCF2B bit is set (one) when a compare match occurs between the Timer/Counter2 and the data in OCR2B – output compare register2. OCF2B is cleared by hardware when executing the corresponding interrupt handling vector. Alternatively, OCF2B is cleared by writing a logic one to the flag 

Dinosaur
Dinosaur аватар
Offline
Зарегистрирован: 01.01.2018

asam пишет:
Так его и не надо перезаписывать целиком. Соответсвующий флаг сбрасывается записью 1ы в нужный флаг. • Bit 2 – OCF2B: Output Compare Flag 2 B The OCF2B bit is set (one) when a compare match occurs between the Timer/Counter2 and the data in OCR2B – output compare register2. OCF2B is cleared by hardware when executing the corresponding interrupt handling vector. Alternatively, OCF2B is cleared by writing a logic one to the flag 

Камрад dimax пишет что нужно перезаписывать регистр аднака...  TIFR2 = 1<<OCF2A

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Dinosaur пишет:

asam пишет:
Так его и не надо перезаписывать целиком. Соответсвующий флаг сбрасывается записью 1ы в нужный флаг. • Bit 2 – OCF2B: Output Compare Flag 2 B The OCF2B bit is set (one) when a compare match occurs between the Timer/Counter2 and the data in OCR2B – output compare register2. OCF2B is cleared by hardware when executing the corresponding interrupt handling vector. Alternatively, OCF2B is cleared by writing a logic one to the flag 

Камрад dimax пишет что нужно перезаписывать регистр аднака...  TIFR2 = 1<<OCF2A

Ну тут же записывается 1-ца только в OCF2A, он и сбрасывается. Остальные флаги остаются неизменными

Хинт: запись нуля флаг не сбрасывает.

Dinosaur
Dinosaur аватар
Offline
Зарегистрирован: 01.01.2018

Ну про это вроде камрады растолковали, что работа с регистрами не совсем то что работа с переменными в памяти. Раньше не сталкивался с такой логикой работы, вот и возмутило меня это до глубины души )))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Dinosaur пишет:

Или есть какие то общие "правила поведения регистров"?

Общие правила заключаются в том, что нет никаких общих правил.

"Правила" для каждого конкретного изделия определяются исключительно его разработчиком и, по идее, должны быть описаны в дэйташите.

С точки зрения программиста не следует делать в отношении регистров никаких априорных допущений. Ну, например, по одном у и тому же адресу может быть расположено два совершенно различных регистра - один на запись, другой - на чтение. 

Upper
Offline
Зарегистрирован: 23.06.2020

andriano пишет:

С точки зрения программиста не следует делать в отношении регистров никаких априорных допущений.

Какие емкие и важные уточнения.

П.С. моя реплика - легкий троллинг

SLKH
Offline
Зарегистрирован: 17.08.2015

andriano пишет:

Dinosaur пишет:

Или есть какие то общие "правила поведения регистров"?

Общие правила заключаются в том, что нет никаких общих правил.

"Правила" для каждого конкретного изделия определяются исключительно его разработчиком и, по идее, должны быть описаны в дэйташите.

С точки зрения программиста не следует делать в отношении регистров никаких априорных допущений. Ну, например, по одном у и тому же адресу может быть расположено два совершенно различных регистра - один на запись, другой - на чтение. 

"Это смутно мне напоминает..."

Цитата:

Проблемы семантики

Необходимо иметь в виду и постоянно помнить, что высказывания дам многоплановы. Анализируя любое высказывание дамы, следует ответить, как минимум, на три вопроса:

1) Что сказала дама,
2) Что хотела сказать дама,
3) Что она фактически сказала.

Далее следуют вопросы второго уровня:

4) Что она хотела фактически сказать,
5) Что она на самом деле фактически сказала,

и так далее… Уровней может быть много. 

(Д. В. Беклемишев. Заметки о женской логике)

Green
Offline
Зарегистрирован: 01.10.2015

По мойму, у AVR эти особенности касаются только флагов прерываний. Только там они сбрасываются этим "хитрым" способом.