Изюминка подпрограммы обслуживания прерывания по таймеру

Якуценя Максим Январь 16,2014

Основная изюминка — в подпрограмме обслуживания прерывания по таймеру TIMER_ISR. Она осуществляет следующие действия. Сначала сохраняет в стеке текущей задачи её регистры, о которых мы говорили выше (для контроля правильности сохранения в процессе последующей отладки мы занесли в упомянутые регистры различные численные значения для каждой из задач). Далее осуществляется обмен содержимым ячеек SP и SP_NEXT. Напомню, что в первой из них к моменту завершения первого выполнения фрагмента первой задачи хранится указатель стека первой из задач, а во второй — соответственно второй задачи. После обмена SP указывает на стек второй задачи, и именно из него происходит загрузка аккумулятора и остальных регистров, а на хранящийся в этом стеке адрес возврата микроконтроллер переходит по команде RETI.
Таким образом, после завершения прерывания микроконтроллер оказывается полностью во второй задаче и выполняет её до следующего прерывания. И так далее.

Свяжитесь с нами

Отправьте ваш запрос на почту sales@chipslon.ru

Телефон:+7-(499)-408-37-63

Отправить запрос по e-mail

Рассылка

ChipSlon