Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: тупой вопрос по WINAVR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
_Pasha
Доброго времени!

Пишу:
Код
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


Вопрос к гуру: насколько такая немного дураковатая конструкция портабельна?
sKWO
Цитата(_Pasha @ Jun 20 2008, 22:18) *
насколько такая немного дураковатая конструкция портабельна?

А чё именно смущает?
alx2
А где определения ATOMIC_BLOCK и ATOMIC_RESTORESTATE?

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

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

Запрещением и разрешением прерываний занимаются конструктор и деструктор Locker. Портабильность довольно высокая - для портирования на другую платформу меняется только класс Locker.
_Pasha
Цитата(sKWO @ Jun 21 2008, 10:57) *
А чё именно смущает?


Смущает использование return внутри for(), коим ATOMIC_BLOCK и является.

Цитата(alx2 @ Jun 21 2008, 14:08) *
Запрещением и разрешением прерываний занимаются конструктор и деструктор Locker.


Логично. Еще один плюс плюсов.
Сергей Борщ
Цитата(_Pasha @ Jun 21 2008, 15:04) *
Смущает использование return внутри for(), коим ATOMIC_BLOCK и является.
"Альтернатива - утки!" Аналогичная функциональность без for(). А вот return внутри цикла без плюсов (конструктора/деструктора) - действительно подводный камень. Лишняя временная переменная и ее return после цикла не должны влиять на качество кода, а портабельность увеличат.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.