Это потому, что у Вас сложилось ложно впечатление, что регистр должен обладать свойствами ячейки памяти.
Это в ячейку памяти, если мы что-то записали, то она должна это хранить без искажений.
А с регистром - совсем не так, он на запись должен отвечать действием. И это действие может быть любым. Например, поменять все биты в регистре на противоположные. Причем, этот регистр, в котором изменяются биты, может быть совсем не тем, куда мы пишем.
Просто откажитесь от заблуждения "регистр должен хранить записанную в него информацию", и все встанет на свои места.
PS. Кстати, регистр может отвечать действием не только на запись, но и на чтение. Т.е. прочитали мы что-то из регистра, а в нем от этого что-то поменялось.
Ок, принял к сведению. А где про подобные особенности регистров расписано? Про TIFR2 в даташите совсем не написано что его нужно перезаписать целиком чтобы сбросить флаг. Или есть какие то общие "правила поведения регистров"?
BOOM, если произойдет другое, то выставится флаг и потом выполнится согласно приоритету. При этом, между прерываниями должна выполниться хоть одна команда основного кода.
Ок, принял к сведению. А где про подобные особенности регистров расписано? Про 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
Так его и не надо перезаписывать целиком. Соответсвующий флаг сбрасывается записью 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ы в нужный флаг. • 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, он и сбрасывается. Остальные флаги остаются неизменными
Ну про это вроде камрады растолковали, что работа с регистрами не совсем то что работа с переменными в памяти. Раньше не сталкивался с такой логикой работы, вот и возмутило меня это до глубины души )))
Или есть какие то общие "правила поведения регистров"?
Общие правила заключаются в том, что нет никаких общих правил.
"Правила" для каждого конкретного изделия определяются исключительно его разработчиком и, по идее, должны быть описаны в дэйташите.
С точки зрения программиста не следует делать в отношении регистров никаких априорных допущений. Ну, например, по одном у и тому же адресу может быть расположено два совершенно различных регистра - один на запись, другой - на чтение.
Или есть какие то общие "правила поведения регистров"?
Общие правила заключаются в том, что нет никаких общих правил.
"Правила" для каждого конкретного изделия определяются исключительно его разработчиком и, по идее, должны быть описаны в дэйташите.
С точки зрения программиста не следует делать в отношении регистров никаких априорных допущений. Ну, например, по одном у и тому же адресу может быть расположено два совершенно различных регистра - один на запись, другой - на чтение.
"Это смутно мне напоминает..."
Цитата:
Проблемы семантики
Необходимо иметь в виду и постоянно помнить, что высказывания дам многоплановы. Анализируя любое высказывание дамы, следует ответить, как минимум, на три вопроса:
Т.е. прочитали мы что-то из регистра, а в нем от этого что-то поменялось.
"и как тут не быть дураком..."?
Это потому, что у Вас сложилось ложно впечатление, что регистр должен обладать свойствами ячейки памяти.
Ок, принял к сведению. А где про подобные особенности регистров расписано? Про TIFR2 в даташите совсем не написано что его нужно перезаписать целиком чтобы сбросить флаг. Или есть какие то общие "правила поведения регистров"?
BOOM, если произойдет другое, то выставится флаг и потом выполнится согласно приоритету. При этом, между прерываниями должна выполниться хоть одна команда основного кода.
Ок, принял к сведению. А где про подобные особенности регистров расписано? Про TIFR2 в даташите совсем не написано что его нужно перезаписать целиком чтобы сбросить флаг. Или есть какие то общие "правила поведения регистров"?
• 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
Камрад dimax пишет что нужно перезаписывать регистр аднака... TIFR2 = 1<<OCF2A
Ну тут же записывается 1-ца только в OCF2A, он и сбрасывается. Остальные флаги остаются неизменными
Хинт: запись нуля флаг не сбрасывает.
Ну про это вроде камрады растолковали, что работа с регистрами не совсем то что работа с переменными в памяти. Раньше не сталкивался с такой логикой работы, вот и возмутило меня это до глубины души )))
Или есть какие то общие "правила поведения регистров"?
Общие правила заключаются в том, что нет никаких общих правил.
"Правила" для каждого конкретного изделия определяются исключительно его разработчиком и, по идее, должны быть описаны в дэйташите.
С точки зрения программиста не следует делать в отношении регистров никаких априорных допущений. Ну, например, по одном у и тому же адресу может быть расположено два совершенно различных регистра - один на запись, другой - на чтение.
С точки зрения программиста не следует делать в отношении регистров никаких априорных допущений.
Какие емкие и важные уточнения.
П.С. моя реплика - легкий троллинг
Или есть какие то общие "правила поведения регистров"?
Общие правила заключаются в том, что нет никаких общих правил.
"Правила" для каждого конкретного изделия определяются исключительно его разработчиком и, по идее, должны быть описаны в дэйташите.
С точки зрения программиста не следует делать в отношении регистров никаких априорных допущений. Ну, например, по одном у и тому же адресу может быть расположено два совершенно различных регистра - один на запись, другой - на чтение.
"Это смутно мне напоминает..."
Проблемы семантики
Необходимо иметь в виду и постоянно помнить, что высказывания дам многоплановы. Анализируя любое высказывание дамы, следует ответить, как минимум, на три вопроса:
Далее следуют вопросы второго уровня:
и так далее… Уровней может быть много.
По мойму, у AVR эти особенности касаются только флагов прерываний. Только там они сбрасываются этим "хитрым" способом.