|
Прерывания |
|
|
|
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, 06:56
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Allregia @ Sep 9 2009, 10:46)  IAR не дает обявить "volatile bool". А bool volatile ? Должен. Это нужно, если необходимо.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
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, 07:45
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Dog Pawlowa @ Sep 9 2009, 11:36)  В версии 410, например, нет такого типа и нужны в нем действительно нет, компилятор совершенно свободно использует bis/bic когда нужно. У меня версия 3.40 и там есть такой тип, нужно только stdbool.h подключить А там вот что: Цитата #ifndef __cplusplus
#define bool _Bool #define true 1 #define false 0
#define __bool_true_false_are_defined 1
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
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", тут не ру.эмбеддед и не с.х.азерс. Я ведь вопрос задал другой, и ответ на него уже есть.
|
|
|
|
|
Sep 9 2009, 16:05
|

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

|
Цитата(Allregia @ Sep 9 2009, 17:57)  то того что ее сделать volatile - хуже не будет Будет хуже. Совершенно лишние обращения к памяти, вместо регистровой работы. Цитата Volatile в т.ч. и для этого и придумана. Не для этого - от volatile в описаном случае может быть только еще хуже. Цитата Критические секции - это когда и в програме и в прерывании используются многобайтные переменные (long для 16-битных, или int для 8-битных). Отнюдь не только это. Цитата Я в основном для флагов использую. А что, надо целый int для каждого флага отводить? Посмотрите, сколько отводится bool в MSP430. Нужны флаги? Отлично, вот и описывайте отдельные биты в int и пользуйте. Цитата P.S. И плиз, не надо тут устраивать фидошного цепляния к словам, типа "всегда volaltile".... Ну оставаться в неведении это так сказать Ваши проблемы, а вот попутно, походя, дезинформировать нетвердо знающих, коих здесь немало  , нельзя.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|