Как стать автором
Обновить
-8
0

Пользователь

Отправить сообщение

Снова про шаблоны C++ в микроконтроллерах

Время на прочтение5 мин
Количество просмотров11K

Идея использования шаблонов языка C++ для программирования контроллеров не является чем-то новым, в сети доступно большое количество материалов. Кратко напомню основные преимущества: перенос значительной части ошибок из runtime в compile-time за счет строгого контроля типов, а также приближение к объектно-ориентированному подходу, близкий и удобный многим, без необходимости хранения полей в статическом классе (все поля являются шаблонными параметрами). Однако стоит заметить, что практически все авторы по большому счету ограничиваются в своих работах примерами на работу с регистрами и портами ввода-вывода. В своей статье я хочу продолжить эти идеи.

Читать далее
Всего голосов 16: ↑13 и ↓3+10
Комментарии12

Перевод числа в строку с помощью FPU

Время на прочтение9 мин
Количество просмотров6.5K

Часто требуемое для вывода результатов расчетов преобразование числа с «плавающей точкой» из формата IEEE-754 в текстовую строку в «научной» нотации (т.е. с показателем степени «E») не является совсем уж тривиальной задачей. В силу обстоятельств автору пришлось самостоятельно «изобретать велосипед» такого преобразования. Причем хотелось сделать это максимально эффективно, в полной мере используя аппаратные возможности обработки чисел.

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

Читать далее
Всего голосов 20: ↑18 и ↓2+16
Комментарии23

Micro Property — минималистичный сериализатор двоичных данных для embedded систем. Часть 2

Время на прочтение3 мин
Количество просмотров2.8K
Некоторое время назад я опубликовал свою статью о разработке велосипедного велосипеда, в которой описал причины, побудившие меня этим заняться.

Если вкратце, то мне была нужна миниатюрная библиотека для микроконтроллеров с сериализатором двоичных данных и последующей передачей этих сообщений по низко скоростным линиям связи, тогда как обычные форматы xml, json, bson, yaml, protobuf, Thrift, ASN.1 и др. мне по разным причинам не подходили.

Как и ожидалось, решение оказалось более чем велосипедом, и тем не менее, сама публикация статьи на Хабре мне очень сильно помогла. Дело в том, что при первоначальном анализе возможных библиотек, я почему то упустил из вида сериализаторы MessagePack, CBOR и UBJSON.

Ссылки на них мне написали в комменатриях уже после публикации статьи. И я сразу понял, что скорее всего CBOR, UBJSON легко решают стоящую передо мной задачу. Причем делают этого гораздо лучше, чем моя собственная разработка.

После этого я прикрутил к библиотеке CBOR свой интерфейс (чтобы не перелопачивать исходники), и … решил от этого формата отказаться в пользу MessagePack :-)



Читать дальше →
Всего голосов 12: ↑10 и ↓2+8
Комментарии4

GTK: Как выглядит первый запуск анализатора в цифрах

Время на прочтение5 мин
Количество просмотров3K

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

Читать далее
Всего голосов 23: ↑18 и ↓5+13
Комментарии7

Коды ошибок — это гораздо медленнее, чем исключения

Время на прочтение12 мин
Количество просмотров20K
На современных 64-битных PC-архитектурах использование C++-исключений означает всего лишь добавление к функциям недостижимого кода с вызовами деструктора и ухудшение производительность менее чем на 1%. Такие небольшие ухудшения производительности сложно даже измерить. Обработка редких ошибок с использованием возвращаемых значений требует дополнительных операций ветвления, которые, в реалистичных сценариях, замедляют программы примерно на 5%. Такой подход, кроме того, менее удобен, чем использование исключений. Если выбрасывается исключение, то на «раскрутку» каждого кадра стека тратится примерно 2 мкс.



C считается самым быстрым языком программирования. В C++ есть возможности, которые лишь повышают удобство работы, не влияя на производительность, в сравнении с C, и возможности, которые на производительность влияют. Эти возможности очень помогают в деле улучшения качества кода. В результате ими, несмотря ни на что, достаточно часто пользуются. Полиморфизм времени выполнения — это буквально вездесущая возможность, а вот исключения распространены меньше.
Читать дальше →
Всего голосов 73: ↑60 и ↓13+47
Комментарии54

Интуитивное объяснение интеграла. Часть I — от умножения натуральных чисел до Ньютона и Лейбница

Время на прочтение10 мин
Количество просмотров57K

Если у Вас нет математического образования, если Вы хотите по-настоящему разобраться в том, что из себя представляет интеграл и интегрирование, зачем всё это надо, как математика пришла к идее интеграла, то в таком случае Вы пришли по адресу — добро пожаловать!

Читать далее
Всего голосов 22: ↑19 и ↓3+16
Комментарии67

Чтобы током не убило. Всё про УЗО

Время на прочтение12 мин
Количество просмотров137K

Попробуем снова объять необъятное одним постом? На этот раз рассказ будет про УЗО.

Читать далее
Всего голосов 193: ↑192 и ↓1+191
Комментарии169

Кватернионы, матрицы поворота и перепроецирование векторов между системами координат

Время на прочтение5 мин
Количество просмотров13K
Пришлось это мне в последнее время поработать с задачами, где нужно было оперировать кватернионами и заниматься перепроецированием векторов в разные системы координат (это еще называется заменой базиса). Сначала по чужим формулам — причем с опечатками и даже, как выяснилось, с фактическими ошибками — а потом делать свои, по аналогии. И всё даже работало! Но сохранялся какой-то туман в понимании происходящего. А всё, как оказалось, из-за этих ошибок: их комбинация давала систему, в целом сохраняющую корректность, неверным путем таки достигался верный результат. Зато такая удача сильно мешала осознанию проблемы и прояснению природы феномена «верный итог при подозрительных формулах». При этом разбираться досконально времени все не было — работает же, числа выдает правильные, чего тебе еще надо, собака? Вперед, нужно больше золота кода! А вот сейчас пришел момент, когда я, похоже, окончательно всё понял, и хочу поделиться получившейся картинкой с окружающими. Вдруг кому пригодится, и себе памятка.

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

Стало быть, речь у нас пойдет в особенности о проекциях и поворотах.

image
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии6

Введение в регулярные выражения в современном C++

Время на прочтение10 мин
Количество просмотров86K

Регулярные выражения (Regular expressions или, вкратце, regex — регулярки) — это пока что непопулярная и недооцененная тема в современном C++. Но в то же время разумное использование регулярных выражений может избавить вас от написания множества строчек кода. Если у вас уже есть какой-никакой опыт работы в индустрии, но вы не умеете использовать регулярные выражения — вы разбазариваете 20-30% своей продуктивности. Я настоятельно рекомендую вам освоить регулярные выражение, так как это единовременная инвестиция в себя (по известному принципу “learn once, write anywhere”).

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии5

Прививки прошлого — что мы знаем о вакцинах?

Время на прочтение17 мин
Количество просмотров10K

Вакцина, вакцины, прививки - сегодня это достаточно популярные слова. И как бы то ни было, являетесь ли вы их ярым противником или ярым сторонником, они с нами. Они часть нашей жизни, и это неизбежно. Ведь во многом самой нашей жизнью, в том виде, в котором она есть у нас сейчас, мы обязаны вакцинам и вакцинации. Что же это? Говоря научным языком, это биологический препарат, ответственный за появление у вас иммунитета к определенному заболеванию.

Как работает вакцина, понять не сложно. Препарат, который вам вводят, содержит агент, который напоминает вызывающий заболевание микроорганизм. Как правило, его производят из ослабленных или убитых форм патогена, от которого вас иммунизируют. Иногда это не сам патоген, а препарат из его токсинов или «выжимка» одного из его поверхностных белков - какой-то кусочек (антиген), который ваша иммунная система сможет запомнить и подготовить набор оружия (антитела) для отражения его атаки, когда он появится снова. Если шаблон памяти есть, супостата узнают, начнется цикл производства оружия, системный поиск и уничтожение патогена, чтобы вы смогли оставаться здоровыми и невредимыми.

Но если всё так просто, спросите вы - куски бактерий или их белков безвредны и дают нам иммунитет - почему сегодня до сих пор нет вакцин от всего? А ещё лучше, одной вакцины, которая бы содержала в себе все убитые известные патогены и одним уколом делала нас неуязвимыми для микро вселенной? Давайте разберёмся.

Начинать приходится с того, что патогены, способные навредить нам, очень разные. Они настолько разные, что часто генетически отличаются друг от друга как, например, муха и слон. И то, что может защитить от укуса первого в задницу, абсолютно бесполезно против удара хоботом в лицо от второго.

Читать далее
Всего голосов 44: ↑40 и ↓4+36
Комментарии8

RC-лодка на ESP8266 NodeMCU

Время на прочтение9 мин
Количество просмотров18K


Примерно полгода мне понадобилось, чтобы собрать такую лодку на дистанционном управлении.


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


Если интересно, какие шишки мне пришлось набить, прошу под кат!


Осторожно! Под катом много картинок!
Всего голосов 92: ↑89 и ↓3+86
Комментарии50

ModBus Slave RTU/ASCII без смс и регистрации

Время на прочтение31 мин
Количество просмотров9.6K
image

В открытом доступе присутствует множество библиотек для реализации ModBus Slave устройства, но они зачастую, содержат избыточный функционал, сложны в освоении и содержат грубые ошибки. В данной статье рассматривается библиотека, по скромному мнению автора, лишенная этих недостатков.
Читать дальше →
Всего голосов 10: ↑8 и ↓2+6
Комментарии49

Трипаносомоз — паразиты в крови или почему боятся мух Цеце?

Время на прочтение16 мин
Количество просмотров23K

Как бы выглядело пришествие описанного христианами Вельзевула, демона мух и вместилища мора, на землю, если бы оно всё же состоялось?

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

Сонная болезнь или трипаносомоз - паразитарное заболевание. Вызывает его паразит Trypanosoma brucei, а разносят кровососущие мухи Цеце. Эпидемия, о которой я сегодня расскажу, продлилась почти 20 лет, унеся по самым приблизительным подсчетам около полумиллиона жизней, разгоревшись, как лесной пожар, и сменившись эхом колониальных и гражданских войн Европы в Африке. Имеющиеся лекарства были немногим лучше симптомов, а доктора отправлялись в страну мёртвых с той же скоростью, что и больные. Ну, да давайте обо всём по порядку.

Крылатый Баал.

Причем тут вообще Вельзевул? Кто это и откуда? В христианском миропонимании этим именем обычно зовут подручного дьявола, демона или принца демонов. Само имя "Вельзевул" взято из старосемитских верований, но и они его заимствовали, если вовсе не придумали. "Баала" - а по сути это просто обозначение бога - скрестили с мухой "Зевув", создав образ Повелителя мух, отталкивающий и пугающий. И если мы откроем Вторую Книгу Царей канонической еврейской библии, то мы встретим там "Бааль Зубоба" в том контексте, что он бог Экрона, одного из филистимлянских городов, враждующих с иудеями. Но зачем кому-то поклоняться богу мух, так ли он действительно назывался?

Соломон встречается с царицей Саабе, барельеф, Батистерио Сан-Джованни, Флоренция, Италия.

Читать далее
Всего голосов 106: ↑105 и ↓1+104
Комментарии15

О кэшах в микроконтроллерах ARM

Время на прочтение10 мин
Количество просмотров15K
image Привет!

В предыдущей статье мы для ускорения графики на микроконтроллере в Embox применяли процессорный кэш. При этом мы использовали режим «write-through». Тогда мы писали о некоторых преимуществах и недостатках связанных с «write-through» режимом, но это был лишь беглый обзор. В этой статье я, как и обещал, хочу подробней рассмотреть типы кэшей в ARM микроконтроллерах, а также сравнить их. Конечно, все это будет рассмотрено с точки зрения программиста, и вдаваться в детали работы контроллера памяти в данной статье мы не планируем.
Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Комментарии6

H1N1 — от испанки до наших дней: «нулевой мальчик» и пандемии

Время на прочтение15 мин
Количество просмотров35K

О, испанка… эта всемогущая, всеизвестная и всеописанная эпидемия гриппа. Формально все началось с неё: каждый третий человек на планете заболел и каждый шестой из заболевших умер от инфекции, перешедшей в легкие. Полмиллиарда больных быстро напомнили нам об убожестве собственного прогресса перед лицом нескольких изменений в геноме единственного вируса. Но кто из вас, любопытные вы мои, вообще знает о том, что такое грипп? Откуда взялась испанка до того, как попала к нам? Чем мы болеем сейчас? С чего мы взяли, что она была первой? Что обозначают эти “птичьи” и “свиные” штаммы? Куда испанка исчезла (если исчезала) и что оставила после себя? Какой сопливый и кашляющий путь лежит от H1N1 до H18 и N11 - сколько миллионов жертв? Эпидемии или пандемии? Как мы болеем? И что вообще, чёрт его подери, с этими вирусами происходит?

Читать далее
Всего голосов 68: ↑66 и ↓2+64
Комментарии24

Пока смерть не разлучит нас или всё о static в C++

Время на прочтение8 мин
Количество просмотров173K


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

Читать дальше →
Всего голосов 11: ↑9 и ↓2+7
Комментарии23

Клоны STM32: хороший, плохой, злой

Время на прочтение6 мин
Количество просмотров66K
После того, как некий продукт становится популярным, у компаний, которые могли бы его создать, но не сделали этого, неизбежно возникает желание прокатиться на волне его популярности. Это — лишь вопрос времени. Именно этот феномен в ответе за то, что было создано так много ужасных детских игрушек и компьютерных игр. Проявляется он и в мире электроники. Поэтому неудивительным должно выглядеть то, что произошло с чрезвычайно успешной серией микроконтроллеров (Microcontroller Unit, MCU) STMicroelectronics, основанных на ARM. На долю этих контроллеров выпало немалое количество имитаций, клонов и явных подделок.



Пожалуй, подделки — это главная проблема. Дело в том, что эти чипы прикидываются, судя по их маркировке, настоящими STM32. Но при этом характеристики их совместимости с другими компонентами могут очень сильно отличаться от характеристик настоящих чипов. Если говорить об имитациях и клонах, которые маркированы по-своему, то тут ситуация выглядит немного более запутанной. Ведь вполне можно представить себе, что компании, производящие такие микроконтроллеры, по чистой случайности, спроектировали такие чипы, которые, и в плане распиновки, и в плане регистров, полностью совместимы с крайне популярными микросхемами-конкурентами. Это, пожалуй, было бы самой искренней формой подхалимажа.

Поговорим о том, какие существуют подделки и имитации STM32, и о том, каково это — с чем-то подобным столкнуться.
Читать дальше →
Всего голосов 60: ↑60 и ↓0+60
Комментарии64

ModBus Slave RTU/ASCII без смс и регистрации. Версия 3

Время на прочтение2 мин
Количество просмотров3.7K
image

Ранее на Хабре была опубликована статья «ModBus Slave RTU/ASCII без смс и регистрации», посвященная реализации ModBus Slave RTU/ASCII устройств. В комментариях к статье было высказано множество замечаний, в том числе и несколько весьма дельных. В данной публикации приведена новая версия ModBus Slave RTU/ASCII с учетом этих замечаний.
Читать дальше →
Всего голосов 12: ↑10 и ↓2+8
Комментарии10

Как программировать многоядерные микроконтроллеры

Время на прочтение16 мин
Количество просмотров19K


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


При написании программ для ПК значительная часть работы по организации вычислений с использованием нескольких ядер берёт на себя операционная система и различные библиотеки. Поэтому программист может использовать высокоуровневые механизмы, сильно не вникая в аппаратную часть. Однако в случае с микроконтроллерами перед написанием кода полезно разобраться с тем, как этот код будет исполняться на низком уровне. В данной статье будут рассмотрены общие принципы построения и программирования многоядерных микроконтроллеров. В качестве примера будет разобран процесс создания небольшого демонстрационного проекта для микроконтроллера с двумя ядрами.

Читать дальше →
Всего голосов 47: ↑47 и ↓0+47
Комментарии17

Точные и быстрые вычисления для чисел с плавающей точкой на примере функции синуса. Часть 3: fixed-point

Время на прочтение5 мин
Количество просмотров3.4K
Продолжаем цикл лекций (часть 1 и часть 2). В части 2 мы посмотрели, что внутри у библиотеки libm и в данной работе попробуем немного переделать функцию do_sin, чтобы увеличить её точность и скорость работы. Приведу эту функцию ещё раз do_sin):

image

Как было показано в предыдущей статье часть 132-145. Выполняется для x в пределах [0.126, 0.855469]. Ну что. Попробуем написать функцию, которая в данных пределах будет точнее и, возможно, быстрее.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии15

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность