Идея использования шаблонов языка C++ для программирования контроллеров не является чем-то новым, в сети доступно большое количество материалов. Кратко напомню основные преимущества: перенос значительной части ошибок из runtime в compile-time за счет строгого контроля типов, а также приближение к объектно-ориентированному подходу, близкий и удобный многим, без необходимости хранения полей в статическом классе (все поля являются шаблонными параметрами). Однако стоит заметить, что практически все авторы по большому счету ограничиваются в своих работах примерами на работу с регистрами и портами ввода-вывода. В своей статье я хочу продолжить эти идеи.
Пользователь
Перевод числа в строку с помощью FPU
Часто требуемое для вывода результатов расчетов преобразование числа с «плавающей точкой» из формата IEEE-754 в текстовую строку в «научной» нотации (т.е. с показателем степени «E») не является совсем уж тривиальной задачей. В силу обстоятельств автору пришлось самостоятельно «изобретать велосипед» такого преобразования. Причем хотелось сделать это максимально эффективно, в полной мере используя аппаратные возможности обработки чисел.
Как ни странно, в литературе мне не попалось ни одного готового примера на эту тему. Поэтому описываемое ниже собственное решение призвано восполнить этот пробел в виде представленной ассемблерной процедуры, которая входит в системную библиотеку сопровождаемого транслятора в течение многих лет и, таким образом, надежно проверена на практике.
Micro Property — минималистичный сериализатор двоичных данных для embedded систем. Часть 2
Если вкратце, то мне была нужна миниатюрная библиотека для микроконтроллеров с сериализатором двоичных данных и последующей передачей этих сообщений по низко скоростным линиям связи, тогда как обычные форматы xml, json, bson, yaml, protobuf, Thrift, ASN.1 и др. мне по разным причинам не подходили.
Как и ожидалось, решение оказалось более чем велосипедом, и тем не менее, сама публикация статьи на Хабре мне очень сильно помогла. Дело в том, что при первоначальном анализе возможных библиотек, я почему то упустил из вида сериализаторы MessagePack, CBOR и UBJSON.
Ссылки на них мне написали в комменатриях уже после публикации статьи. И я сразу понял, что скорее всего CBOR, UBJSON легко решают стоящую передо мной задачу. Причем делают этого гораздо лучше, чем моя собственная разработка.
После этого я прикрутил к библиотеке CBOR свой интерфейс (чтобы не перелопачивать исходники), и … решил от этого формата отказаться в пользу MessagePack :-)
GTK: Как выглядит первый запуск анализатора в цифрах
Внедрение статического анализатора в проект для некоторых людей выглядит непреодолимой преградой. Почему-то очень распространено мнение, что объём выданных результатов анализа при первом запуске настолько велик, что рассматривается только два варианта: не связываться с этим или переключить всех людей на исправление предупреждений. В этой статьей попробуем развеять этот миф, проведя внедрение и настройку анализатора на проекте GTK.
Коды ошибок — это гораздо медленнее, чем исключения
C считается самым быстрым языком программирования. В C++ есть возможности, которые лишь повышают удобство работы, не влияя на производительность, в сравнении с C, и возможности, которые на производительность влияют. Эти возможности очень помогают в деле улучшения качества кода. В результате ими, несмотря ни на что, достаточно часто пользуются. Полиморфизм времени выполнения — это буквально вездесущая возможность, а вот исключения распространены меньше.
Интуитивное объяснение интеграла. Часть I — от умножения натуральных чисел до Ньютона и Лейбница
Если у Вас нет математического образования, если Вы хотите по-настоящему разобраться в том, что из себя представляет интеграл и интегрирование, зачем всё это надо, как математика пришла к идее интеграла, то в таком случае Вы пришли по адресу — добро пожаловать!
Чтобы током не убило. Всё про УЗО
Попробуем снова объять необъятное одним постом? На этот раз рассказ будет про УЗО.
Кватернионы, матрицы поворота и перепроецирование векторов между системами координат
Заранее оговорюсь, что материал не претендует на академичность изложения, а скорее просто описывает удобный для запоминания способ интерпретации того, что происходит при перепроецировании векторов.
Стало быть, речь у нас пойдет в особенности о проекциях и поворотах.
Введение в регулярные выражения в современном C++
Регулярные выражения (Regular expressions или, вкратце, regex — регулярки) — это пока что непопулярная и недооцененная тема в современном C++. Но в то же время разумное использование регулярных выражений может избавить вас от написания множества строчек кода. Если у вас уже есть какой-никакой опыт работы в индустрии, но вы не умеете использовать регулярные выражения — вы разбазариваете 20-30% своей продуктивности. Я настоятельно рекомендую вам освоить регулярные выражение, так как это единовременная инвестиция в себя (по известному принципу “learn once, write anywhere”).
Прививки прошлого — что мы знаем о вакцинах?
Вакцина, вакцины, прививки - сегодня это достаточно популярные слова. И как бы то ни было, являетесь ли вы их ярым противником или ярым сторонником, они с нами. Они часть нашей жизни, и это неизбежно. Ведь во многом самой нашей жизнью, в том виде, в котором она есть у нас сейчас, мы обязаны вакцинам и вакцинации. Что же это? Говоря научным языком, это биологический препарат, ответственный за появление у вас иммунитета к определенному заболеванию.
Как работает вакцина, понять не сложно. Препарат, который вам вводят, содержит агент, который напоминает вызывающий заболевание микроорганизм. Как правило, его производят из ослабленных или убитых форм патогена, от которого вас иммунизируют. Иногда это не сам патоген, а препарат из его токсинов или «выжимка» одного из его поверхностных белков - какой-то кусочек (антиген), который ваша иммунная система сможет запомнить и подготовить набор оружия (антитела) для отражения его атаки, когда он появится снова. Если шаблон памяти есть, супостата узнают, начнется цикл производства оружия, системный поиск и уничтожение патогена, чтобы вы смогли оставаться здоровыми и невредимыми.
Но если всё так просто, спросите вы - куски бактерий или их белков безвредны и дают нам иммунитет - почему сегодня до сих пор нет вакцин от всего? А ещё лучше, одной вакцины, которая бы содержала в себе все убитые известные патогены и одним уколом делала нас неуязвимыми для микро вселенной? Давайте разберёмся.
Начинать приходится с того, что патогены, способные навредить нам, очень разные. Они настолько разные, что часто генетически отличаются друг от друга как, например, муха и слон. И то, что может защитить от укуса первого в задницу, абсолютно бесполезно против удара хоботом в лицо от второго.
RC-лодка на ESP8266 NodeMCU
Примерно полгода мне понадобилось, чтобы собрать такую лодку на дистанционном управлении.
Я расскажу про процесс разработки с самого начала: от лодки из потолочной плитки, гелевой ручки и консервной банки до модели из пластика, которую не стыдно подарить.
Если интересно, какие шишки мне пришлось набить, прошу под кат!
Осторожно! Под катом много картинок!
ModBus Slave RTU/ASCII без смс и регистрации
В открытом доступе присутствует множество библиотек для реализации ModBus Slave устройства, но они зачастую, содержат избыточный функционал, сложны в освоении и содержат грубые ошибки. В данной статье рассматривается библиотека, по скромному мнению автора, лишенная этих недостатков.
Трипаносомоз — паразиты в крови или почему боятся мух Цеце?
Как бы выглядело пришествие описанного христианами Вельзевула, демона мух и вместилища мора, на землю, если бы оно всё же состоялось?
Пробудилась бы древняя болезнь из неизвестных земель, затем, привезенная вместе с болью и страданием на побережье работорговцами, она охватила бы весь континент, увлекая за собой сотни тысяч жертв в водоворот жестоких смертей. А следом за эпидемиями следовали бы войны, нескончаемые войны... Первая мировая, войны колоний и метрополий, гражданские конфликты, голод, нищета и десятки новых заболеваний, одно хуже другого. К сожалению, я сейчас описываю реальную историю одной из Африканских болезней и одну из самых масштабных эпидемий, произошедшую на стыке столетий.
Сонная болезнь или трипаносомоз - паразитарное заболевание. Вызывает его паразит Trypanosoma brucei, а разносят кровососущие мухи Цеце. Эпидемия, о которой я сегодня расскажу, продлилась почти 20 лет, унеся по самым приблизительным подсчетам около полумиллиона жизней, разгоревшись, как лесной пожар, и сменившись эхом колониальных и гражданских войн Европы в Африке. Имеющиеся лекарства были немногим лучше симптомов, а доктора отправлялись в страну мёртвых с той же скоростью, что и больные. Ну, да давайте обо всём по порядку.
Крылатый Баал.
Причем тут вообще Вельзевул? Кто это и откуда? В христианском миропонимании этим именем обычно зовут подручного дьявола, демона или принца демонов. Само имя "Вельзевул" взято из старосемитских верований, но и они его заимствовали, если вовсе не придумали. "Баала" - а по сути это просто обозначение бога - скрестили с мухой "Зевув", создав образ Повелителя мух, отталкивающий и пугающий. И если мы откроем Вторую Книгу Царей канонической еврейской библии, то мы встретим там "Бааль Зубоба" в том контексте, что он бог Экрона, одного из филистимлянских городов, враждующих с иудеями. Но зачем кому-то поклоняться богу мух, так ли он действительно назывался?
Соломон встречается с царицей Саабе, барельеф, Батистерио Сан-Джованни, Флоренция, Италия.
О кэшах в микроконтроллерах ARM
В предыдущей статье мы для ускорения графики на микроконтроллере в Embox применяли процессорный кэш. При этом мы использовали режим «write-through». Тогда мы писали о некоторых преимуществах и недостатках связанных с «write-through» режимом, но это был лишь беглый обзор. В этой статье я, как и обещал, хочу подробней рассмотреть типы кэшей в ARM микроконтроллерах, а также сравнить их. Конечно, все это будет рассмотрено с точки зрения программиста, и вдаваться в детали работы контроллера памяти в данной статье мы не планируем.
H1N1 — от испанки до наших дней: «нулевой мальчик» и пандемии
О, испанка… эта всемогущая, всеизвестная и всеописанная эпидемия гриппа. Формально все началось с неё: каждый третий человек на планете заболел и каждый шестой из заболевших умер от инфекции, перешедшей в легкие. Полмиллиарда больных быстро напомнили нам об убожестве собственного прогресса перед лицом нескольких изменений в геноме единственного вируса. Но кто из вас, любопытные вы мои, вообще знает о том, что такое грипп? Откуда взялась испанка до того, как попала к нам? Чем мы болеем сейчас? С чего мы взяли, что она была первой? Что обозначают эти “птичьи” и “свиные” штаммы? Куда испанка исчезла (если исчезала) и что оставила после себя? Какой сопливый и кашляющий путь лежит от H1N1 до H18 и N11 - сколько миллионов жертв? Эпидемии или пандемии? Как мы болеем? И что вообще, чёрт его подери, с этими вирусами происходит?
Пока смерть не разлучит нас или всё о static в C++
Всем привет. На одном из код-ревью я столкнулся с мыслью, что многие, а чего скрывать и я сам, не то чтобы хорошо понимаем когда нужно использовать ключевое слова static. В данной статье я хотел бы поделиться своими знаниями и информацией по поводу ключевого слова static.
Клоны STM32: хороший, плохой, злой
Пожалуй, подделки — это главная проблема. Дело в том, что эти чипы прикидываются, судя по их маркировке, настоящими STM32. Но при этом характеристики их совместимости с другими компонентами могут очень сильно отличаться от характеристик настоящих чипов. Если говорить об имитациях и клонах, которые маркированы по-своему, то тут ситуация выглядит немного более запутанной. Ведь вполне можно представить себе, что компании, производящие такие микроконтроллеры, по чистой случайности, спроектировали такие чипы, которые, и в плане распиновки, и в плане регистров, полностью совместимы с крайне популярными микросхемами-конкурентами. Это, пожалуй, было бы самой искренней формой подхалимажа.
Поговорим о том, какие существуют подделки и имитации STM32, и о том, каково это — с чем-то подобным столкнуться.
ModBus Slave RTU/ASCII без смс и регистрации. Версия 3
Ранее на Хабре была опубликована статья «ModBus Slave RTU/ASCII без смс и регистрации», посвященная реализации ModBus Slave RTU/ASCII устройств. В комментариях к статье было высказано множество замечаний, в том числе и несколько весьма дельных. В данной публикации приведена новая версия ModBus Slave RTU/ASCII с учетом этих замечаний.
Как программировать многоядерные микроконтроллеры
В течение последних десяти лет процессоры практически во всех наших устройствах стали многоядерными. Вслед за ними появляются и многоядерные микроконтроллеры. В каталогах крупных производителей уже сейчас можно найти микроконтроллеры общего назначения с несколькими ядрами по разумным ценам. Поэтому, похоже, пришло время начинать использовать многоядерные микроконтроллеры в собственных устройствах. Естественно, в тех случаях, когда это оправданно.
При написании программ для ПК значительная часть работы по организации вычислений с использованием нескольких ядер берёт на себя операционная система и различные библиотеки. Поэтому программист может использовать высокоуровневые механизмы, сильно не вникая в аппаратную часть. Однако в случае с микроконтроллерами перед написанием кода полезно разобраться с тем, как этот код будет исполняться на низком уровне. В данной статье будут рассмотрены общие принципы построения и программирования многоядерных микроконтроллеров. В качестве примера будет разобран процесс создания небольшого демонстрационного проекта для микроконтроллера с двумя ядрами.
Точные и быстрые вычисления для чисел с плавающей точкой на примере функции синуса. Часть 3: fixed-point
Как было показано в предыдущей статье часть 132-145. Выполняется для x в пределах [0.126, 0.855469]. Ну что. Попробуем написать функцию, которая в данных пределах будет точнее и, возможно, быстрее.
Информация
- В рейтинге
- Не участвует
- Откуда
- Москва, Москва и Московская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность