azhel

На Пикабу
Дата рождения: 02 марта 1994
поставил 716 плюсов и 198 минусов
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
5 лет на Пикабу
4031 рейтинг 3 подписчика 3 подписки 13 постов 3 в горячем

Шаблоны C++ для микроконтроллеров

Писать на хабр я не умею и боюсь, а Пикабу - это развлекательно-познавательный портал, так что начну с него:)


В 2019 году в качестве хобби решил попробовать микроконтроллеры, чтение форумов и тематических ресурсов определили, что за основу возьму STM32. Arduino за единицу ресурсов дороже, и в принципе на нее есть всё, что только можно придумать, конкретных задач и проектов у меня не было, поэтому с Arduino делать мне было, по сути, нечего.


Как и многие, первые программы создавались через CubeMX (ныне CubeIDE), светодиодами моргать научился, по UART с компьютером связался, даже USB-HID из примера сделать получилось. Но снова уперся в тот факт, что нет конкретной задачи, так что начал разбираться в вопросе непосредственно программирования: какие есть фреймворки, почему HAL так не любят и т.д. В процессе чтения статей наткнулся на очень интересный подход, связанный с применением шаблонов языка C++. Вот ссылка на оригинальную статью, очень рекомендую к прочтению http://easyelectronics.ru/rabota-s-portami-vvoda-vyvoda-mikr....


Если вкратце: автор предлагает почти объектно-ориентированный подход, только все зависимости являются не полями класса, а его шаблонными параметрами. Таким образом, нет необходимости расходовать оперативную память, передавать указатель this в методы.


Например, класс-драйвер дисплея LCD1602 требует указания ему шести ножек GPIO + ширину и длину. Тогда соответствующий шаблонный класс определяется следующим образом

Шаблоны C++ для микроконтроллеров Микроконтроллеры, Stm32, Программирование, C++, Длиннопост

Создание "объектов" (в кавычках) заменяется объявлением нового типа данных:

Шаблоны C++ для микроконтроллеров Микроконтроллеры, Stm32, Программирование, C++, Длиннопост

Все методы классов при шаблонном подходе являются статическими, соответственно вызов осуществляется через оператор разрешения контекста:

Шаблоны C++ для микроконтроллеров Микроконтроллеры, Stm32, Программирование, C++, Длиннопост

Итого, основным отличием от классического объектно-ориентированного подхода является замена создания объекта класса объявлением нового типа (путем инстанцирования некоторого шаблона). Недостатком является тот факт, что каждое такое объявление порождает новый тип данных, все методы дублируются. Однако при программировании микроконтроллеров это несущественно, поскольку вся количество таких типов ограничено количеством используемой периферии (и внешних устройств), а большая часть методов - это запись значения в регистр. Поэтому при включенной оптимизации вызов методов класса вообще сворачивается в inline, что повышает быстродействие. Также использование шаблонов дает возможность существенно ускорить инициализацию периферии путем передачи параметров в качестве шаблонных (если она известна заранее, что весьма логично). В таком случае значения регистров становятся известны еще на этапе компиляции, так что в прошивке можно обнаружить просто запись соответствующего значения в регистр.


Автор указанной статьи разработал и поддерживает библиотеку "mcucpp" (github.com/KonstantinChizhov/Mcucpp), однако ее сложно использовать "из коробки". Сам подход мне очень понравился, поэтому я решил попытаться "прибраться" в том, что сделал и делает Константин, применить нововведения стандарта c++ 17 (а их много как раз в части метапрограммирования), написать документацию и примеры, которые снизят порог вхождения. В результате медленно, но развивается проект Zhele (github.com/azhel12/Zhele), где я неторопливо собираю великолепные идеи Константина Чижова (автором перенятого кода указываю его, если вдруг у кого-то появится вопрос), пытаюсь покрыть различные МК (сейчас у меня в арсенале f030f4, f072rbt, f103c8, f401cc), написать Doxy-документацию, написать примеры и проверить их.


Если вдруг у кого-то будут силы и желание посмотреть примеры и выразить замечания и предложения, буду рад. Пока энтузиазм, к счастью, не пропал. На работе преподаю помимо прочего C++, так что развитие проекта для меня - это в первую очередь упражнения в новых фишках языка.


В планах дописать классы основных интерфейсов (хотя бы i2c, который меня пока пугает), начать реализовывать драйверы популярных устройств (возможно, некоторым студентам будет интересно попробовать). Также очень хочу разобраться в языке шаблонов CubeMX (CubeIDE), чтобы из куба генерировался проект сразу на разрабатываемой библиотеке.


UPD: нашел результаты эксперимента годичной давности (с тех пор я что-то все-таки улучшил + новые версии компиляторов, возможно, еще сильнее оптимизируют). На разных фреймворках сделал одну и ту же задачу для Stm32F103: сконфигурировать тактивание (на частоту 72 Мгц), настроить выход GPIO для управления светодиодом, настроить таймер на ежесекундное прерывание, в обработчике прерывания от таймера переключить светодиод. Допускаю, что написал не идеальные решения, но задача простая, что позволяет предполагать небольшое влияние этого факта.

Шаблоны C++ для микроконтроллеров Микроконтроллеры, Stm32, Программирование, C++, Длиннопост
Показать полностью 4

Борьба с 5G

Всё описанное ниже, разумеется, является шуткой на тему сжигания 5G-вышек и прочего мракобесия. Попробовал серьезным языком написать полный бред.


Развитие технологий и, в частности, компьютерных сетей, привело к тому, что обмен информацией практически любого вида стал невероятно быстрым и дешевым. Технический прогресс привнес в человеческую жизнь достаточно и положительных, и отрицательных моментов. Однако нельзя не отметить, что одним из важнейших приобретений цивилизации стала доступность информации (это дает Интернет) и возможность её получения (любой смартфон выполняет функцию фотоаппарата, видеокамеры, диктофона). Эти факторы привели к тому, что на сегодняшний день людей сложнее обмануть, замять чьи-либо противоправные действия. Даже если государственная машина правосудия бездействует (или действует, но несправедливо), со скоростью света данные факты становятся достоянием общественности, вызывая у людей негодование. Развивая технологии в погоне за прибылью, сильные мира сего упустили тот факт, что пилили сук, на котором сидят: обманывать людей, управлять ими стало сложно. И это потребовало решительных действий.


Существует немало механизмов управления сознанием человека, но многие из них не действуют: про какие-то люди уже знают (что дает "иммунитет"), некоторые имеют точечное воздействие, что также не подходит. Управлять нужно всеми и сразу. Именно поэтому и появилось так называемое "поколение 5G". На сегодняшний день в населенных пунктах распространены сети 4G с теоретической скоростью загрузки в 1000 Мбит/с. Чтобы было понятнее, насколько это много: потоковое воспроизведение FullHD видео требует скорость соединения в 8 Мбит/с, 4K (огромным телевизором с таким расширением уже никого не удивить) требует 25 Мбит/с. Иными словами, 4G с лихвой перекрывает все потребности человека (и даже целой семьи). Разумеется, с учетом уверенного покрытия. То есть для удовлетворения потребностей населения города в мобильном интернете более чем достаточно поколения 4G. Единственная задача - обеспечить покрытие города правильной расстановкой вышек сотовой связи. Разработчики 5G обещают более высокую скорость, однако даже не углубляясь в технические подробности это выглядит странно: 5G имеет более высокую несущую частоту, следовательно, меньшую дальность. Чтобы покрыть одну и ту же площадь вышек 5G нужно больше, а это бОльшие расходы. Причем расходы необоснованные: 4G итак хватает "за глаза".

Больше информации о 5G можно найти в сети, автор не стал копировать эту информацию: основная её часть слишком эмоциональна, и многие статьи оперируют биологическими терминами, в которой автор не разбирается настолько глубоко, чтобы позволить себе публично рассуждать об этом. Здесь приведен вопрос экономической составляющей, которая выглядит странно. В капиталистическом мире никто и никогда не станет тратить деньги на ненужное и излишнее.


Наконец, пора переходить к техническим подробностям. Будем считать, что читатель уже ознакомился с источниками, в которых объяснено воздействие 5G-излучения на человека. Как же обезопасить себя? Всё достаточно просто. Для воздействия на конкретного человека необходимо направить на него модулированный сигнал частотой > 6 ГГц. Однако, как известно еще из школьного курса физики, мощность сигнала уменьшается с расстоянием, и уже в нескольких десятках метров никакого эффекта не будет. Поэтому нужно понимать, что источником облучения являются не вышки сотовой связи (хотя и они тоже, если вы живете очень близко), а смартфоны! Мощность передатчика смартфона несоизмеримо меньше мощности передатчика базовой станции, зато расстояние от владельца исчисляется сантиметрами. Вспомните, как долго и как часть в течение дня человек расстается со своим смартфоном? Даже во сне многие кладут его под подушку, на прикроватную тумбочку. Идеальный кандидат для управляющего сигнала. Вышки же нужны для того, чтобы на смартфоне действительно работала сотовая связь (для маскировки под благо), а также для передачи управляющих сигналов. То есть смартфон становится ретранслятором: из командного центра через вышки связи управляющие сигналы попадают в смартфон, а уже передатчик смартфона излучает её на владельца (и на всех людей поблизости).


Что делать? Бороться с вышками невозможно, за это есть (и будет более жесткое) преследование, остается ограничить себя от 5G излучателей. Самое простое решение: поискать в закромах старый телефон (уверен, у всех он дожидается своего часа) и пользоваться им. Однако таким образом владелец лишается действительно нужных функций типа камеры, микрофона, польза которых раскрыта в начале статьи. Второй вариант, выжечь контур приемопередатчика, отвечающий за связь с вышками 5G. Читатель может самостоятельно более глубоко изучить физические принципы работы беспроводных сетей, в данной статье дана достаточно поверхностная информация. Итак, если коротко, то любая беспроводная технология не отличается от обычного радио (изобретенного еще в 19 веке). Берется радиоволна (несущий сигнал) и модулируется полезной нагрузкой. Чем выше частота, тем больше полезной информации можно передать в единицу времени. Современный приемопередатчик - довольно сложное устройство, но в основании все равно лежит колебательный контур, состоящий из индуктивности и емкости.

Борьба с 5G 5G, Мракобесие, Вышка, Идиотизм, Постирония, Длиннопост

У колебательного контура есть так называемая "резонансная частота", которая совпадает с частотой соответствующего поколения связи. Если проводить аналогию с радио, то перемещение ползунка частоты изменяет резонансную частоту (обычно изменением емкости конденсатора) и радио ловит ту станцию, частота излучения которой совпала с резонансной частотой радио.

В смартфонах с поддержкой 5G присутствует колебательный контур с соответствующей резонансной частотой. Обычно смартфон поддерживает и все предыдущие поколения, так что также в модуле связи присутствует контур для 4G, 3G, 2G сетей. Для того, чтобы обезопасить себя от 5G излучения достаточно подействовать на телефон мощным сигналом с частотой, равной резонансной частоте колебательного контура, отвечающего за 5 поколение связи. Сделать это можно с помощью СОВРЕМЕННОЙ СВЧ-печи (СВЧ - СверхВысокоЧастотный)


Доподлинно неизвестно, с какого времени в смартфоны начали устанавливать модуль связи 5G, поэтому нельзя дать точный совет, какие смартфоны можно считать "безопасными". Но еще большая проблема: понять частоту микроволновой печи, стоящей в вашем доме. Если прожечь смартфон, в котором модуля 5G итак не было, "правильной" СВЧ-печью, то ничего страшного не произойдет, а если любой смартфон прожечь старой СВЧ-печью, где частота гораздо меньше - телефон придет в негодность. Поэтому ориентировочно можно считать, что если ваша СВЧ-печь выпущена после 2018 года, то там скорее всего стоит более современный магнетрон и все пройдет нормально (опять же зависит от производителя).


Итак, если же все-таки вы решили обезвредить колебательный контур, то необходимо положить смартфон в СВЧ-печь, выбрать максимальную мощность и включить на 20 секунд, этого вполне достаточно. ВНИМАНИЕ!!! Примите необходимые меры предосторожности, на всякий случай необходимо убрать легковоспламеняющиеся предметы подальше. Посмотрите видео в YouTube по запросу "телефон в микроволновке" (несколько лет назад в интернете прошел такой жестокий "пранк") - так и будет, если все-таки магнетрон оказался не той частоты.


Автор надеется, что статья оказалась полезна. Не верьте всему подряд, читайте книги, развивайтесь, анализируйте информацию и делайте выводы. Не дайте никому подчинить ваше сознание.

Показать полностью 1

Интересный вид мошенничества

Сижу, как и многие, на самоизоляции. Оказалось, что это тяжело (хотя итак домосед, возможно, что тяжело это только тогда, когда заставляют), так что пытаюсь как-то себя развлечь. Решил воплотить давнюю мечту о покупке цифрового пианино. Ожидаю, что через месяц оно окажется в шкафу навсегда, поэтому покупать новое и тратить кучу денег (а они реально стоят, как крыло самолёта) не хочу, поэтому разумно полез искать б/у на два известных сайта.

Половина объявлений - явные мошенники, которые топят за доставку, кидают ссылки на левые сайты с предложением там ввести данные карты. Ну то понятно и очевидно. Однако сегодня столкнулся с очень странным разводом (я даже не знаю, как это правильно назвать. Вроде я лох, но непосредственно разводила ничего не получил). Значит, мы договариваемся о покупке, дополнительно списываемся в WhatsApp, сажусь в машину и еду. По приезде на место отписываюсь "продавцу" и... тишина. Простоял 20 минут, уехал. Потом на Авито спросил, в чем прикол и зачем так делать, и мне даже ответили)

Интересный вид мошенничества Авито, Мошенничество

Предполагаю, что большому количеству людей нечего делать, в том числе тем, кто в обычное время в "очном" режиме портил людям нервы, так что пришлось и им уйти в онлайн. В общем, будьте аккуратнее. Для себя решил, что буду просить сеанс видеосвязи, потому что иначе никак.


P.S. Конкретно это объявление примитивно я проверил: сделал поиск по картинке, гугл дубликатов не нашел. Вряд ли оно так, но допускаю, что в принципе у такого человека реально может быть пианино/телевизор и что угодно, он реально может, например, написать что-то, что покупатель попросит и сфотографировать на фоне товара, поэтому 100% защиты от такого развода даже не могу придумать. Для себя в очередной раз понял, что бесплатный (и дешевый) сыр только в мышеловке и низ рынка надо отсекать 100%.

Показать полностью 1

Кулинарный совет для ленивых

Как и у многих, появилось больше свободного времени, часть из которого можно потратить на готовку. Например, сегодня делаю свиные уши в соево-медовой глазури. Так вот, достаточное количество рецептов подразумевает периодическое смазывание продукта (в моем случае каждые 10 минут надо извлекать противень и смазывать уши соусом). Кисточкой долго, я решил проблему так: залил соус в бутылочку, прикрутил обычный пульверизатор за 15 рублей. Результат отличный, за полминуты покрываю весь противень равномерно.


P.S. С вязкими жидкостями, к сожалению, не работает. Пытался так покрывать сковороду тонким слоем масла - не получается, масло все равно выходит струёй.

Антипотеря по-Карельски

Зашли в кафе в Петрозаводске, взяли на кассе ключ от туалета.

Антипотеря по-Карельски Смекалка, Я у мамы инженер, Брелок, Карелия
Показать полностью 1

Смена пароля

Я из тех, кому лень меня пароль. Да, знаю, что это важно, но если что - сам виноват. Но страдают также авторы хороших постов. Пролистал пост и хочу поставить +, но я ж ленивый, поэтому отматывать вверх не люблю, а без отматывания поставить мешает сообщение. Простите, авторы:(

Смена пароля Лига Лени, Плюсы

Про резину

Набрел на отзыв на drom, там автор в числе прочего жаловался на зимние шины, из-за которых он попал в небольшое дтп, так вот, один из комментариев мне (и постояльцам дрома тоже, судя по "лайкам") очень понравился.

Про резину Dromru, Комментарии, Резина
Показать полностью 1

Насущный вопрос

А вы замечали, что в поселках/сёлах/деревнях с конца августа до середины сентября все, даже самые "мажоры", задают друг другу вопрос "картошку уже выкопали?"?

Отличная работа, все прочитано!