Например TDA7294

Форум РадиоКот • Просмотр темы - Правильная обработка переменных в контексте прерываний
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 16:56:24

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 85 ]    , , , , 5
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Правильная обработка переменных в контексте прерываний
СообщениеДобавлено: Чт окт 07, 2021 15:42:53 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2801
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18058
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
COKPOWEHEU писал(а):
Для кого конвенции придумали?
те конвенции придумали для взаимодействия между Си и ассемблером.
поскольку я Си не использую вообще, от слова совсем, мне эти конвенции по фигу. и я использую регистры, как мне угодно.
но, естественно, регистры r0 и r1 я не занимаю под постоянное использование, так как они используются в умножении. но остальные регистры я могу использовать для чего угодно.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Правильная обработка переменных в контексте прерываний
СообщениеДобавлено: Чт окт 07, 2021 16:06:25 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14053
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Однако Z для команд косвенных переходов (ICALL, IJMP) также желательно не особо трогать.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Правильная обработка переменных в контексте прерываний
СообщениеДобавлено: Чт окт 07, 2021 16:17:43 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
Dimon456 писал(а):
все зависит от программиста.
правильно
лично я пишу прямо в теле функции:
static u8 flg;

такая запись ограничивает область видимости переменной только телом функции (а точнее - фигурными скобками, внутри которых она описана). При этом значение такой переменной сохраняется между вызовами функции. Только вот причём здесь прерывания?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Правильная обработка переменных в контексте прерываний
СообщениеДобавлено: Чт окт 07, 2021 16:49:38 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 0
Если не равняется, то вместо наложения маски будет сравнение и вычитание/сложение, вот и все.

На STM32 у меня так:
Спойлер
Код:
uint32_t size() const
{
   if constexpr (pot)
   {
      return (TI&)tail - (TI&)head;
   }
   else
   {
      int32_t sz = (TI&)tail - (TI&)head;
      return (sz < 0) ? sz + Capacity + 1 : sz;
   }
}

private:
static constexpr bool pot = std::has_single_bit(Capacity);             
using TI = std::conditional_t<ThreadSafe, volatile uint32_t, uint32_t>;
T buf[Capacity + !pot];
uint32_t head, tail;


COKPOWEHEU писал(а):
Пока что я вижу только явный недостаток с тем, что к полю размера нужен доступ и при записи, и при чтении. Но вы говорите, что такие реализации есть. Чем именно они настолько хороши, что перевешивают этот недостаток?

Мы о разных вещах говорим, ты пытаешься доказать превосходство одного из подходов, с чем я и не спорю, т.к., еще раз повторю, у меня самого размер отдельно не хранится, но есть и другие подходы где в переменную пишется из основного кода и прерывания, может они менее эффективные, зато накосячить тоже сложнее, пиши как хочешь, просто прерывания запрещай. Взять хоть либы для ардуино, там есть парочка RingBuf/RingBuffer, в обоих хранится размер, в одной используется ATOMIC_BLOCK, в другой - noInterrupts().

COKPOWEHEU писал(а):
Ну так вариант с размером эту проблему не решает.

Вариант с размером предполагает отключение прерываний которое решает практически все проблемы, в том числе и вышеописанную.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Правильная обработка переменных в контексте прерываний
СообщениеДобавлено: Чт окт 07, 2021 17:12:29 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
Цитата:
те конвенции придумали для взаимодействия между Си и ассемблером.

Ну разумеется, нет!
Конвенции придумали чтобы программист не держал в голове слишком много, чтобы над одним проектом могло работать несколько человек и использовать сторонние библиотеки.
Цитата:
На STM32 у меня так:

Ну вот, сравнение и вычитание/сложение. Пусть у вас это и записано в виде тернарного оператора.
Цитата:
Мы о разных вещах говорим, ты пытаешься доказать превосходство одного из подходов

Нет, я написал что вижу явный недостаток другого подхода. Но ведь его используют. Значит, либо те, кто использует, дураки, либо я чего-то не знаю. Поэтому и спрашиваю что именно я не знаю.
Цитата:
Вариант с размером предполагает отключение прерываний которое решает практически все проблемы, в том числе и вышеописанную.

В том смысле, что для его использования надо применить настолько мощный костыль, что он попутно блокирует некоторые другие ошибки?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 85 ]    , , , , 5

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y