реклама на сайте
подробности

 
 
> Вложенные прерывания в IAR, Как разрешить?
Dikoy
сообщение Nov 23 2012, 04:14
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 4-03-09
Из: Богота, Колумбия
Пользователь №: 45 676



Чтоб разрешить вложенные прерывания в AVR (IAR 6), надо просто сделать __enable_interrupt(); в начале тела обработчика?

Имеется ввиду вложенность, когда процу разрешается выходить из тела текущего обработчика прерывания, если возникло другое прерывание (любое).
Знаю, что это можно, но как-то до сих пор на АВР не пригождалось...
Стек левел нуждается в настройке? По умолчанию там 16.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
demiurg_spb
сообщение Nov 23 2012, 05:19
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Нет этого мало. Нужно также в самом конце обработчика снова заблокировать прерывания, т.к. если вы посмотрите на то, что делает компилятор при выходе из прерывания, вы сможете обнаружить раскрутку стека и присвоение 16-ти битному регистру SP некого значения, так вот, модификация этого регистра должна быть атомарной операцией...
В gcc есть специальные атрибуты у обработчиков прерывания, которые разрешают вложенность. Возможно, у ИАРа тоже есть нечто подобное.
Код
ISR(TIMER0_COMP_vect, ISR_NOBLOCK)
{
/* Code */
}
Что касается глубины стека - это вам виднее, мы не знаем сложность вашей программы и её требования к стеку.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
SSerge
сообщение Nov 23 2012, 06:32
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(demiurg_spb @ Nov 23 2012, 12:19) *
Нет этого мало. Нужно также в самом конце обработчика снова заблокировать прерывания, т.к. если вы посмотрите на то, что делает компилятор при выходе из прерывания, вы сможете обнаружить раскрутку стека и присвоение 16-ти битному регистру SP некого значения, так вот, модификация этого регистра должна быть атомарной операцией...

У IARа этих проблем нет, так как SP используется только для хранения адресов возврата, а стек данных у них отдельно, регистровая пара Y используется как указатель стека данных.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th August 2025 - 15:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016