|
Прерывания |
|
|
|
Sep 8 2009, 04:36
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Если я правильно понял, приоритет прерываний в МСП фиксированный и поменять его нельзя. У меня в программе используются несколько прерываний - от вотчдога, дух таймеров, УАРТов и АЦП. Но (!) - прерывание от одного из таймеров должно быть самым приоритетным, остальные не важно, подождут. Правильно ли будет для этого в процедуре обработки прерывания этого таймера запретить глобально прерывания вообще, а при выходе разрешить? Или в этом есть "подводные камни" ? т.е.: Код #pragma vector=TIMERB0_VECTOR __interrupt void TIMERB0_interrupt(){ __disable_interrupt(); ......... тут остальной код обработчика прерывания
__enable_interrupt(); }
|
|
|
|
|
 |
Ответов
|
Sep 9 2009, 07:00
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Allregia @ Sep 9 2009, 08:46)  переменные, используемые в прерывании, всегда обьявлять volatile. Все огульно? Глупость явная  Цитата Но IAR не дает обявить "volatile bool". bool это вообще отдельная песня и на большинстве платформ (не имеющих битово-адресуемой памяти)никакой пользы окромя вреда от bool нет.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 9 2009, 14:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(zltigo @ Sep 9 2009, 10:00)  Все огульно? Глупость явная  Если переменная, используется и в прерывании и в программе, то если она не volatile, то при ее использовании в программе могут быть (и часто бывают) глюки. bool volaltile тоже не работает. Но чуть поразмыслив, я подумал что для битовых это и не нужно. Цитата bool это вообще отдельная песня и на большинстве платформ (не имеющих битово-адресуемой памяти)никакой пользы окромя вреда от bool нет. Мы кажется, говорим здесь об одной, конкретной платформе.
|
|
|
|
|
Sep 9 2009, 15:42
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Allregia @ Sep 9 2009, 16:37)  ...в программе могут быть (и часто бывают) глюки. Вот, ключевое слово "глюки", его употребляют именно тогда, когда не ведают, что творят и вместо этого стучат в бубен и уповают на волшебные слова типа volatile: Цитата переменные, используемые в прерывании, всегда обьявлять volatile. Ну ненужно ВСЕГДА нужно только тогда, когда действительно нужно. Не нужно, когда переменная используется исключительно в обработчике прерывания. Не поможет (а то и помешает) и тогда, когда хоть некая переменная декларирована как volatile к ней несколько раз обращаются за пределами прерывания - волшебное изменение по ходу развития алгоритма тоже не подарок - тут volatile давить и прикрываться, например, критическими секциями. Цитата Мы кажется, говорим здесь об одной, конкретной платформе. Да, ну и как у MSP430 c битовоадресуемой памятью? Зачем ему bool?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 9 2009, 15:57
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(zltigo @ Sep 9 2009, 18:42)  Вот, ключевое слово "глюки", его употребляют именно тогда, когда не ведают, что творят и вместо этого стучат в бубен и уповают на волшебные слова типа volatile: Помоему, отчего происходят такие глюки - совершенно очевидно. Цитата Ну ненужно ВСЕГДА нужно только тогда, когда действительно нужно. Не нужно, когда переменная используется исключительно в обработчике прерывания. Да, это так - если переменная используется ТОЛЬКО в прерывании - можно и не volatile, но если она статик, то того что ее сделать volatile - хуже не будет, зато не надо будет если захочется ее в программе использовать. Конечно если переменная не статическая и используется только в прерывании, то volaltile не нужно. Цитата Не поможет (а то и помешает) и тогда, когда хоть некая переменная декларирована как volatile к ней несколько раз обращаются за пределами прерывания - волшебное изменение по ходу развития алгоритма тоже не подарок Volatile в т.ч. и для этого и придумана. Цитата - тут volatile давить и прикрываться, например, критическими секциями. Критические секции - это когда и в програме и в прерывании используются многобайтные переменные (long для 16-битных, или int для 8-битных). Тоже по понятным причинам. Цитата Да, ну и как у MSP430 c битовоадресуемой памятью? Зачем ему bool? Я в основном для флагов использую. А что, надо целый int для каждого флага отводить? Я привых к ОЗУ в МК относиться бережно, второй ведь по значимости ресурс после I/O, IMHO. P.S. И плиз, не надо тут устраивать фидошного цепляния к словам, типа "всегда volaltile", тут не ру.эмбеддед и не с.х.азерс. Я ведь вопрос задал другой, и ответ на него уже есть.
|
|
|
|
Сообщений в этой теме
Allregia Прерывания Sep 8 2009, 04:36 MrYuran Если я чего-то не путаю, вложенные прерывания по у... Sep 8 2009, 04:48 Allregia Да, я не совсем правильно выразился. Интересует им... Sep 8 2009, 04:52 VAI А при обработке прерываний глобальные прерывания и... Sep 8 2009, 05:06 Allregia Всем спасибо. Sep 8 2009, 06:42 MrYuran Цитата(Allregia @ Sep 9 2009, 10:46) IAR ... Sep 9 2009, 06:56  Dog Pawlowa Цитата(MrYuran @ Sep 9 2009, 09:56) А boo... Sep 9 2009, 07:36   MrYuran Цитата(Dog Pawlowa @ Sep 9 2009, 11:36) В... Sep 9 2009, 07:45     zltigo Цитата(Allregia @ Sep 9 2009, 17:57) то т... Sep 9 2009, 16:05      Allregia Цитата(zltigo @ Sep 9 2009, 19:05) Будет ... Sep 9 2009, 19:11       zltigo Цитата(Allregia @ Sep 9 2009, 21:11) Я та... Sep 9 2009, 19:59       Dog Pawlowa Цитата(Allregia @ Sep 9 2009, 22:11) Это ... Sep 9 2009, 20:29        Allregia Цитата(Dog Pawlowa @ Sep 9 2009, 23:29) Э... Sep 9 2009, 21:07         zltigo Цитата(Allregia @ Sep 9 2009, 23:07) О то... Sep 10 2009, 06:25         Dog Pawlowa Цитата(Allregia @ Sep 10 2009, 00:07) Это... Sep 10 2009, 07:28 VAI Я флаги так делаю:
Описываю
Кодenum on_off { ... Sep 10 2009, 06:43 Allregia Кстати о препроцессоре, хотя это немного не в тему... Sep 12 2009, 10:24 zltigo Цитата(Allregia @ Sep 12 2009, 12:24) Мож... Sep 12 2009, 10:30 Allregia Можно использовать и как именнованные:
#define P... Sep 12 2009, 13:44 zltigo Цитата(Allregia @ Sep 12 2009, 15:44) А т... Sep 12 2009, 14:04  Allregia Цитата(zltigo @ Sep 12 2009, 17:04) Тольк... Sep 12 2009, 15:03   zltigo Цитата(Allregia @ Sep 12 2009, 17:03) Во ... Sep 12 2009, 15:19 Allregia Согласен, с тем макросом должно быть просто BIN8(1... Sep 12 2009, 15:33 AHTOXA Всё больше утверждаюсь во мнении, что High Tech (д... Sep 12 2009, 15:37
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|