|
Запрет прерываний при вызове функций, и их разрешение |
|
|
|
 |
Ответов
|
Mar 27 2006, 09:34
|

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

|
Цитата(Alechin @ Mar 20 2006, 18:39)  Запретить прерывания именно для функции (не обработчика прерывания) можно через __monitor перед именем функции. Правда тогда inline для нее выполняться не будет. Разве? А если перед определением функции написать: Код #pragma inline=forced
|
|
|
|
|
May 29 2006, 15:43
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(SasaVitebsk @ May 29 2006, 12:42)  Или я не прав? Уже вижу что не прав. В зависимости от точки вызова появляются ошибки. Поясню подробнее, т.к. никто не ответил. Прога. В ней два прерывания от таймера, ну и там от RS232... Одно из прерываний от таймера выполняется очень часто (регенерация экрана) и её нельзя запрещать. Во втором прерывании от таймера (выполняется на много реже) используются подпрограммы. Как сделать что-бы "регенерация" вызывалась в ходе другого прерывания? Иными словами как данное прерывание объявить так, чтобы оно ничего не портило? Очччччень жду ответа!
|
|
|
|
|
May 29 2006, 18:58
|

Знающий
   
Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095

|
Цитата(SasaVitebsk @ May 29 2006, 18:43)  Цитата(SasaVitebsk @ May 29 2006, 12:42)  Или я не прав?
Уже вижу что не прав. В зависимости от точки вызова появляются ошибки. Поясню подробнее, т.к. никто не ответил. Прога. В ней два прерывания от таймера, ну и там от RS232... Одно из прерываний от таймера выполняется очень часто (регенерация экрана) и её нельзя запрещать. Во втором прерывании от таймера (выполняется на много реже) используются подпрограммы. Как сделать что-бы "регенерация" вызывалась в ходе другого прерывания? Иными словами как данное прерывание объявить так, чтобы оно ничего не портило? Очччччень жду ответа! ИМХО чтобы первое прерывание (регенерация экрана) не портило второе (которое выполняется намного реже) в обработчике первого прерывания нужно сохранить в стек вспомогательные регистры. Автоматически компилятор это делает если в обработчике прерывания вызывается функция (и если компилятор ее не inlin-ит). Поэтому, если содержимое обработчика первого прерывания поместить в функцию и при входе в первое прерывание ее вызывать, то возможно портиться ничего не будет, хотя конечно прерывание обрабатываться будет существенно дольше. Это только мысли, в натуре не проверял...
|
|
|
|
|
May 29 2006, 19:47
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Old1 @ May 29 2006, 21:58)  ИМХО чтобы первое прерывание (регенерация экрана) не портило второе (которое выполняется намного реже) в обработчике первого прерывания нужно сохранить в стек вспомогательные регистры. Автоматически компилятор это делает если в обработчике прерывания вызывается функция (и если компилятор ее не inlin-ит). Поэтому, если содержимое обработчика первого прерывания поместить в функцию и при входе в первое прерывание ее вызывать, то возможно портиться ничего не будет, хотя конечно прерывание обрабатываться будет существенно дольше. Это только мысли, в натуре не проверял... Я просмотрел листинг и увидел что компилятор сохраняет только 6 регистров в этом прерывании. А использует значительно больше. Вот из-за этого всё и происходит .... Варианты с запретом не прокатывают, - нельзя его запрещать. Спасибо за совет с п/п. А может слово какое-нибудь есть "волшебное" типа "рекурсия"  чтобы компилятор всё необходимое сам сохранил? На счёт быстродействия я пока не парюсь. Пока вроде хватает его. А в дальнейшем данное прерывание на asm напишу. Но хочу чтобы вариант на С тоже принципиально работал.
|
|
|
|
Сообщений в этой теме
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    oleg111 Цитата(SasaVitebsk @ May 29 2006, 22:43) ... May 29 2006, 16:57      SasaVitebsk Цитата(SasaVitebsk @ May 29 2006, 22:47) ... May 30 2006, 18:21       SasaVitebsk Что ещё настораживает, что записи у меня не было... May 31 2006, 09:30 arttab Не все просто с разрерением прерываний в прерывани... May 30 2006, 06:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|