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

 
 
> Конфликт флагов прерываний SREG- TCCR1A.
mogikanin
сообщение Jun 5 2011, 04:03
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 5-06-11
Пользователь №: 65 486



Конфликт флагов прерываний SREG- TCCR1A.
Установлено ПО: WinAVR-20100110, AvrStudio418Setup+ AVRStudio4.18SP1. Программа на AVR GCC. При загрузке регистр TCCR1A=0x02. Последней операцией идёт разрешение прерываний SREG|=(1<<SREG_I);. Пробовал и SREG=0x80; - результат один и тот же: одновременно с флагом I (7-й разряд) устанавливается так же 7-й разряд в TCCR1A. И результат становится TCCR1A=0x82. Кто-нибудь сталкивался с такой проблемой? И как она решается? На форуме уже обсуждался аналогичный вопрос с взаимовлияниями TCCR1A и SREG, но я не понял решения и ситуация там была с выходом из программы, а не во время загрузки. В загрузке я после установки SREG добавил TCCR1A=0x02; - это помогло. Но как этот дефект скажется во время работы программы? Опасаюсь.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ARV
сообщение Jun 6 2011, 04:38
Сообщение #2


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



если вы "тупо" переделали программу на Си, не исключено, что внесли при этом ряд ошибок.
в частности, с SREG-ом в WinAVR напрямую работать нужды почти никогда не возникает, т.к. для разрешения и запрещения прерываний имеются макросы sei() и cli(). все периферийные регистры в WinAVR объявлены как volatile-переменные, поэтому оператор SREG|=(1<<SREG_I); выполняется неатомарно, что может давать странные эффекты.

используйте правильные средства - будет правильный результат.


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 6 2011, 04:48
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ARV @ Jun 6 2011, 08:38) *
поэтому оператор SREG|=(1<<SREG_I); выполняется неатомарно, что может давать странные эффекты.
Практически исключено (может кроме нулевого уровня оптимизации). SREG в SFR области и такой код превратится в атомарные инструкции SBI и CBI.
Хотя нет я погорячился. SBI и CBI адресуют лишь 32 байта, а SREG за этой границей. Так что очистка-установка битиков регистра SREG по маске в общем случае - неатомарная операция.

Также стоит покопать в сторону:
Цитата(Палыч @ Jun 5 2011, 10:59) *
Вероятнее всего, что как только Вы разрешили прерывания глобально (бит I в SREG), то какое-то прерывание тут же и случилось... В процедуре обработки этого прерывания был установлен 7-ой бит регистра таймера TCCR1A.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jun 6 2011, 05:47
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(demiurg_spb @ Jun 6 2011, 07:48) *
Хотя нет я погорячился. SBI и CBI адресуют лишь 32 байта, а SREG за этой границей. Так что очистка-установка битиков регистра SREG по маске в общем случае - неатомарная операция.

Вы так больше не пугайте sm.gif
Код
sei/cli set/clt sev/clv sen/cln sez/clz sec/clc
- что еще забыл? Да и ладно - смысл и так понятен - это атомарные операции.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mogikanin   Конфликт флагов прерываний SREG- TCCR1A.   Jun 5 2011, 04:03
- - VladislavS   Даташит:ЦитатаThe I-bit can also be set and cleare...   Jun 5 2011, 06:40
- - Палыч   Цитата(mogikanin @ Jun 5 2011, 08:03) одн...   Jun 5 2011, 06:59
|- - mogikanin   Цитата(Палыч @ Jun 5 2011, 13:59) Вероятн...   Jun 6 2011, 02:00
|- - Палыч   Цитата(mogikanin @ Jun 6 2011, 06:00) ......   Jun 6 2011, 05:20
|- - mogikanin   Цитата(Палыч @ Jun 6 2011, 12:20) Хорошо ...   Jun 6 2011, 10:22
|- - demiurg_spb   Цитата(_Pasha @ Jun 6 2011, 09:47) Кодsei...   Jun 6 2011, 05:56
- - VladislavS   1. Смотри ассемблерный код. Чудес не бывает. 2. Ис...   Jun 6 2011, 11:12
|- - Палыч   Закоментируйте всё до приведенной Вами конструкции...   Jun 6 2011, 12:33
|- - mogikanin   Цитата(VladislavS @ Jun 6 2011, 18:12) 1....   Jun 7 2011, 03:53
|- - demiurg_spb   Цитата(mogikanin @ Jun 7 2011, 07:53) sei...   Jun 7 2011, 04:28
||- - mogikanin   Цитата(demiurg_spb @ Jun 7 2011, 11:28) Н...   Jun 8 2011, 02:13
||- - Палыч   Цитата(mogikanin @ Jun 8 2011, 06:13) Я п...   Jun 8 2011, 05:51
||- - mogikanin   Цитата(Палыч @ Jun 8 2011, 12:51) Если са...   Jun 9 2011, 04:22
||- - SysRq   Цитата(mogikanin @ Jun 9 2011, 08:22) ......   Jun 9 2011, 14:26
||- - Marian   Цитата(mogikanin @ Jun 9 2011, 07:22) Хор...   Jun 9 2011, 17:22
||- - mogikanin   Цитата(Marian @ Jun 10 2011, 00:22) Время...   Jun 10 2011, 05:37
||- - demiurg_spb   Цитата(mogikanin @ Jun 10 2011, 09:37) if...   Jun 10 2011, 11:43
||- - Палыч   Цитата(demiurg_spb @ Jun 10 2011, 15:43) ...   Jun 10 2011, 11:58
||- - mogikanin   Цитата(Палыч @ Jun 10 2011, 18:58) Почему...   Jun 12 2011, 12:58
||- - demiurg_spb   Цитата(Палыч @ Jun 10 2011, 15:58) Почему...   Jun 13 2011, 16:35
||- - Палыч   Цитата(demiurg_spb @ Jun 13 2011, 20:35) ...   Jun 14 2011, 07:21
|- - _Pasha   Цитата(mogikanin @ Jun 7 2011, 06:53) А с...   Jun 7 2011, 05:50
- - Marian   Цитата(mogikanin @ Jun 5 2011, 07:03) Кон...   Jun 7 2011, 11:27


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

 


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


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