Зарезервированные адреса AVR

Область памяти программ в документации обычно изображают так, как показано на рисунке выше. Это пример для микроконтроллера AVR ATtiny13A, у которого последняя ячейка памяти в этом блоке имеет адрес 0x01FF (или 511 в десятичной системе). Нетрудно догадаться, что эта модель имеет память объёмом 512 байтов (адресация начинается с нуля).

У других микроконтроллеров адрес последней ячейки памяти может быть другим (в зависимости от объёма памяти). Например, для ATtiny2313 этот адрес будет 0х07FF (2047), то есть этот микроконтроллер имеет уже 2 кБ памяти.

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

Эти зарезервированные адреса необходимы для разных особых целей. Например, нулевой адрес - это вектор системного сброса. Именно с этого адреса начинается выполнение программы после системного сброса микроконтроллера. Остальные зарезервированные адреса - это векторы прерываний.

То есть если где-то вы встретите непонятное словосочетание “вектор прерывания”, то для упрощения можете просто заменить слово “вектор” на слово “адрес”, хотя это будет и не совсем точно.

Почему же тогда это называется “вектор”? Ну наверняка я не знаю. Возможно потому, что непосредственно адрес ячейки памяти, в котором хранится адрес обработчика прерывания, не совпадает с адресом этого обработчика. И, видимо, не очень удобно говорить “адрес адреса прерывания”. Поэтому и придумали слово “вектор”. Но это лишь моё предположение.

Ну и кроме того, обычно цепочка выполнения прерывания тянется по нескольким адресам, то есть это уже можно называть вектором, потому что он начинается с зарезервированного адреса и продолжается до адреса обработчика примерно так:

Адреса, разумеется, могут быть другими. Но суть правильная. В зарезервированном адресе хранится адрес обработчика прерывания (на рисунке зарезервированный адрес 0001, а адрес обработчика прерывания 0020).

Таким образом, когда происходит прерывание, связанное с адресом 0001, то программа читает ячейку 0001, находит там адрес 0020, и переходит на этот адрес. А по этому адресу хранится первая команда обработчика прерывания. Так начинает выполняться процедура обработки этого прерывания.

На этом всё. Подписывайтесь на канал или подключайтесь к группе, чтобы ничего не пропустить…

ТОП