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

 
 
> Запрет прерываний при вызове функций, и их разрешение
arttab
сообщение Mar 13 2006, 02:46
Сообщение #1


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

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



В моей программе есть вложеные функции (одна вызывает другую и т.д.). При вызове функции выключаются прерывания, но иногда мне нужно включить. вопрос если я в функции разрешаю прерывание и далее вызываю другую функцию что будет с разрешением прерываний при возврате из другой функции? И если не затруднит, раскажите как в иаре можно работать управлять поведением компилятора по глобальным прерываниям.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alechin
сообщение Mar 20 2006, 15:39
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Запретить прерывания именно для функции (не обработчика прерывания) можно через __monitor перед именем функции. Правда тогда inline для нее выполняться не будет.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 27 2006, 09:34
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Alechin @ Mar 20 2006, 18:39) *
Запретить прерывания именно для функции (не обработчика прерывания) можно через __monitor перед именем функции. Правда тогда inline для нее выполняться не будет.

Разве?
А если перед определением функции написать:
Код
#pragma inline=forced
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение May 29 2006, 09:42
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Дабы не плодить новых тем ещё один аналогичный вопрос... smile.gif

У меня несколько мелких прерываний и одно большое. Я хотел бы в большом разрешить прерывания (т.е. вызов маленьких). Когда я такое делал на asm, то я просто контролировал переменные/регистры. В С, если я правильно понимаю, достаточно просто разрешить прерывание __en_int. Так как при вызове используемые сохраняются в стеке. Или я не прав?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение May 29 2006, 15:43
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(SasaVitebsk @ May 29 2006, 12:42) *
Или я не прав?


Уже вижу что не прав. В зависимости от точки вызова появляются ошибки.
Поясню подробнее, т.к. никто не ответил.

Прога. В ней два прерывания от таймера, ну и там от RS232... Одно из прерываний от таймера выполняется очень часто (регенерация экрана) и её нельзя запрещать. Во втором прерывании от таймера (выполняется на много реже) используются подпрограммы.
Как сделать что-бы "регенерация" вызывалась в ходе другого прерывания? Иными словами как данное прерывание объявить так, чтобы оно ничего не портило?

Очччччень жду ответа!
Go to the top of the page
 
+Quote Post
oleg111
сообщение May 29 2006, 16:57
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 30
Регистрация: 20-01-06
Пользователь №: 13 385



Цитата(SasaVitebsk @ May 29 2006, 22:43) *
Цитата(SasaVitebsk @ May 29 2006, 12:42) *

Или я не прав?


Уже вижу что не прав. В зависимости от точки вызова появляются ошибки.
Поясню подробнее, т.к. никто не ответил.

Прога. В ней два прерывания от таймера, ну и там от RS232... Одно из прерываний от таймера выполняется очень часто (регенерация экрана) и её нельзя запрещать. Во втором прерывании от таймера (выполняется на много реже) используются подпрограммы.
Как сделать что-бы "регенерация" вызывалась в ходе другого прерывания? Иными словами как данное прерывание объявить так, чтобы оно ничего не портило?

Очччччень жду ответа!

Во втором прерывании от таймера (выполняется на много реже) используются подпрограммы - разрешить прерывания __enable_interrupt();, если прерывание от таймера может вмешатся в какойто критически важный процесс во втором прерывании то временно его запретить перед ним (процессом) , а затем разрешить опять.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- arttab   Запрет прерываний при вызове функций   Mar 13 2006, 02:46
- - dxp   Цитата(arttab @ Mar 13 2006, 08:46) В мое...   Mar 13 2006, 06:56
|- - IgorKossak   Цитата(dxp @ Mar 13 2006, 08:56) ... __en...   Mar 17 2006, 14:56
|- - dxp   Цитата(IgorKossak @ Mar 17 2006, 20:56) Ц...   Mar 20 2006, 09:03
- - arttab   Искузми, не указал. Да глобальное прерывание выклю...   Mar 13 2006, 08:10
|- - Old1   Цитата(SasaVitebsk @ May 29 2006, 18:43) ...   May 29 2006, 18:58
|- - SasaVitebsk   Цитата(Old1 @ May 29 2006, 21:58) ИМХО чт...   May 29 2006, 19:47
|- - SasaVitebsk   Цитата(SasaVitebsk @ May 29 2006, 22:47) ...   May 30 2006, 18:21
|- - SasaVitebsk   Что ещё настораживает, что записи у меня не было...   May 31 2006, 09:30
- - arttab   Не все просто с разрерением прерываний в прерывани...   May 30 2006, 06:50


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

 


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


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