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

 
 
> Запрещение/разрешение прерываний, использование _BIS_SR и _BIС_SR
dimanisu
сообщение Apr 6 2010, 06:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-10-07
Пользователь №: 31 055



Здравствуйте!
Возник следующий вопрос

Для организаций критических секций в msp430 используются конструкции _BIС_SR и _BIS_SR. Как поведет себя программа, когда в такой критической секции будет вызвана функция тоже использующая крит секцию. Пример

CODE

_BIC_SR(GIE);
func();
// тут делаем еще чего нибудь
_BIS_SR(GIE);

void func (void)
{
_BIC_SR(GIE);
// тут делаем еще чего нибудь
_BIS_SR(GIE);
}



НЕ будут ли при выходе из этой функции разрешены прерывания (чего очень бы не хотелось)?
Это вообще нормальный подход, или нужно иначе организовывать крит секции?

С уважением.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dimanisu
сообщение Apr 6 2010, 07:23
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-10-07
Пользователь №: 31 055



Цитата
Да, при выходе из функции прерывания будут разрешены. Для чего вы используете запрет прерываний?


Если переменные из основной программы используются и в прерываниях.

А как тогда грамотно организовать крит секцию в такой ситуации?

Просто я раньше работал с С51 и там использовал такую конструкцию:

Код
#define DISABLE_INTERRUPTS(ea_bit)    ea_bit = 1; if (!_testbit_(EA))    ea_bit = 0
#define ENABLE_INTERRUPTS(ea_bit)            if (ea_bit)    EA = 1


//вызов в программе:

bit ea_bit;

DISABLE_INTERRUPTS(ea_bit);
    func();
ENABLE_INTERRUPTS(ea_bit);


Справка:

Функция _testbit_ выполняет инструкцию процессора JBC в сгенерированном коде программы, что позволяет одновременно проверить бит b и очистить его. Эта функция может использоваться только с прямо адресуемыми битовыми переменными, и неприменима к любым другим типам выражений. Эта функция реализована в виде встроенной функции. Весь генерируемый код вставляется непосредственно в месте вызова функции, вместо использования обычного вызова подпрограммы.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 10:43
Рейтинг@Mail.ru


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