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

 
 
> тупой вопрос по WINAVR
_Pasha
сообщение Jun 20 2008, 18:18
Сообщение #1


;
******

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



Доброго времени!

Пишу:
Код
extern volatile uint16_t time;
uint16_t get_time(void)
{
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
  {
   return(time);
  }
}


gcc 4.2.2 Компилер генерит идеально:

Код
00000208 <get_time>:
208:    2f b7           in    r18, 0x3f; 63
20a:    f8 94           cli
20c:    80 91 b6 00     lds    r24, 0x00B6
210:    90 91 b7 00     lds    r25, 0x00B7
214:    2f bf           out    0x3f, r18; 63
216:    08 95           ret


Вопрос к гуру: насколько такая немного дураковатая конструкция портабельна?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alx2
сообщение Jun 21 2008, 11:08
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



А где определения ATOMIC_BLOCK и ATOMIC_RESTORESTATE?

Я для запрещения прерываний на некотором участке кода обычно создаю объект специального класса:

/* тут прерывания разрешены */
{
Locker l;
/* тут прерывания запрещены */
}

Запрещением и разрешением прерываний занимаются конструктор и деструктор Locker. Портабильность довольно высокая - для портирования на другую платформу меняется только класс Locker.

Сообщение отредактировал alx2 - Jun 21 2008, 11:23


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 15:25
Рейтинг@Mail.ru


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