All streams
Search
Write a publication
Pull to refresh
-4
Эдуард Зиганшин @e-zigread⁠-⁠only

Разработка электроники

Send message

Почти детективная история одной «кровавой» ошибки

Reading time2 min
Views8.8K


Дополнение статьи «Размещение кучи FreeRTOS в разделе CCMRAM для STM32», и в продолжение серии статей про различные полезности для STM32 (1, 2 и 3), хочу обратить внимание на одну особенность работы с CCM RAM памятью, которая может быть причиной совершенно не очевидных ошибок в работе устройств, одна из которых выпила у автора достаточно много крови, так что с чистой совестью её действительно можно назвать «кровавой».

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

Вот только костыль не помог. Помогало только физическое выключения питания, а программная перезагрузка микроконтроллера не помогала! Более того, даже перезагрузка с помощью кнопки RESET иногда не срабатывала! Устройство перезагружалось, но неправильное поведение устройства никуда не исчезало и в итоге все равно приходилось отключать питание физически.

Читать дальше →

Размещение кучи FreeRTOS в разделе CCMRAM для STM32

Reading time2 min
Views10K
При разработке одного девайса на базе STM32F407 столкнулся с проблемой нехватки оперативной памяти. Назначение самого девайса не принципиально, но важно, что изначальный код писался для десктопной системы и его нужно было просто портировать на микроконтроллер под управлением FreeRTOS. А так как исходный код был написан на С++ и вопрос об экономии ОЗУ даже не стоял, то и вылезла соответствующая проблема.

Заниматься оптимизацией кода, одновременно добавляя себе проблем с поиском новых ошибок, очень не хотелось. Поэтому своевременно вспомнилось, что данная версия микроконтроллера имеет на борту дополнительный сегмент ОЗУ размером 64К (CCM SRAM), который сейчас никак не был задействован. Эврика — вот оно, решение!

Но к сожалению, все оказалось не так просто.

Читать дальше →

Применение двоичной логики в недвоичных операциях: оптимизируем производительность и ресурсы

Reading time11 min
Views10K

Давайте поговорим о побитовых операциях.

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

В прикладном же программировании многие устанавливают (|) и проверяют параметры (&) через степени двойки. Как правило, дальше этого не заходит. Но всегда есть задачи, которые потребуют горизонтального масштабирования при высокой нагрузке в случае их решения явным или привычным способом.

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

Читать далее

Как посчитать синус быстро

Reading time13 min
Views24K

... и точно. Точнее, с заданной точностью, простите за каламбур.

Под катом я расскажу, как сделать это с использованием школьного курса алгебры и целочисленной арифметики, при чём здесь полиномы Чебышёва I-го рода, и дам ссылки на примеры реализаций для ПК и Cortex-M3.

Читать далее

Zynq 7000. Обмен информацией между PS и PL

Reading time21 min
Views15K

Продолжаю повествование о том, как проходит мое изучение возможностей отладочной платы с SoC Zynq 7000 на базе отладочной платы QMTech. В этой статье я опишу то, как я решал задачу примитивного обмена данными между PS и PL с использованием baremetal application и при использовании Linux. Всем интересующимся добро пожаловать под кат!

Читать далее

Подходим к любительскому астрофото с научной стороны. Часть третья, синтетическая

Reading time6 min
Views2.9K

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

Теперь мы бы хотели эти два умения объединить и получить некую дорожную карту, которая бы вела нас по этой ухабистой дороге любительской астрофотографии.

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

И в качестве тизера — картинка из конца статьи. ​

Читать далее

Почему не все тестовые задания одинаково полезны: С++ edition

Reading time23 min
Views6.5K

Вначале было слово, и было два байта, и ничего больше не было. Но отделил Бог ноль от единицы, и понял, что это хорошо.

Потом, опуская некоторые незначительные события мироздания, была вот эта статья от @novar.

Ну а еще некоторое время спустя вышел разбор задания из оригинальной статьи от @PsyHaSTe.

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

Однако, покрутив немного сам код решения, я понял, что есть ряд моментов, которые я бы сделал иначе (так бывает, зачастую есть более одного способа решить задачу). В частности, меня зацепил вот этот кусок.

Немного кода

«И бысть мор великий на всех землях русских…» — инфекционные болезни и эпидемии в допетровской Руси

Reading time18 min
Views13K

Перейдём к другому разделу данного очерка – истории распространения эпидемических болезней на Руси. С этим разделом древнерусской медицины связаны два любопытных момента. Первый: миф о том, что на Руси эпидемий не было, а если и были, то не охватывали широких слоёв населения. Второй: в связи со слабым развитием естественнонаучных и медицинских знаний, народное сознание породило удивительный мифологический материал, объясняющий происхождение инфекционных болезней, аналогов которому нет ни у одного народа мира. Но обо всём по порядку.

Читать далее

Ускорение процесса разработки под Embedded Linux

Reading time11 min
Views13K

Любой программист, решивший заняться разработкой под Embedded Linux, придя буть-то из высокоуровневых языков программирования, либо из программирования микроконтроллеров на С/С++, неизбежно оказывается удивлен крайней недружелюбностью embedded linux. Текстовый блокнот и консольные утилиты вместо столь привычных IDE, и отладка по логам вместо отладки программатором сильно замедляют процесс разработки. В статье описывается, как мне удалось снизить время доставки изменений до целевого железа при кросс-компиляции в 10 раз.

Читать далее

Плесени, гнили, токсины μ-скопических грибов

Reading time32 min
Views37K
Когда-то, давным давно в комментариях к моей статье, посвященной картофельному солонину, как из рога изобилия посыпались фотографии гнилого/плесневелого картофеля который люди покупают на рынках, в супермаркетах и т.п. А вместе с фотографиями и вопросы «это можно есть? как очистить ?». Уже тогда я понимал, что одними ответами на комментарии здесь не обойтись, тема гораздо более глобальна, чем может показаться. И вот недавно, в продолжение темы токсинов грибов, появился повод обсудить вездесущие микроскопические грибки, и то, с помощью чего они сражаются пытаются поработить мир — микотоксины. Статья по мотивам серии заметок в канале LAB-66 (оригинальная статья — Привет, ЕвроОпт! Оружие МИКРОгрибов). Как разрушить захватнические планы плесени — читаем под катом!

ПРЕДУПРЕЖДЕНИЕ! Статья не соответствует «тематике Хабра»!


Боишся микотоксина плесени? Заходи почитать!

Пишем терминальный сервер для микроконтроллера на С

Reading time13 min
Views14K

Всем привет! В процессе работы над гексаподом AIWM я все чаще задумывался о каком-нибудь удобном интерфейсе для общения с ним. В результате тесной работы с Linux через терминал я подумал, а почему бы не использовать такой же интерфейс и в гексаподе? Я был очень удивлен, что по запросу "STM32 terminal" я не нашел готовых реализаций. Ну раз нет готовых, то напишем свою реализацию терминального сервера, которую можно использовать в микроконтроллерах. Сделаем это без использования динамической памяти и прочих опасных радостей.

Читать далее

Не «Оперой» единой. Выбираем proxy-сервис вместо Opera VPN

Reading time4 min
Views79K


Признаюсь, я никогда не считал себя преданным фанатом Opera. Тем не менее этот браузер был установлен на всех моих компьютерах — из-за простой и удобной функции VPN (который даже не VPN, а, скорее, продвинутый прокси), позволявшей при необходимости быстро менять внешний IP-адрес и локацию, что бывает просто необходимо в целом ряде случаев — скажем, в процессе отладки веб-приложений. Да мало ли по какой причине благородному дону вдруг понадобится предстать в сети канадским фермером или испанским кабальеро? И вот с недавних пор сервис Opera VPN был отключен для российских пользователей разработчиками браузера. Что ж, настало время искать альтернативу!
Читать дальше →

Использование подсказок, включаемых в исходный код, помогающих GCC выявлять случаи переполнения буфера

Reading time11 min
Views5.1K
Ошибки, связанные с доступом к областям памяти, которые находятся за пределами допустимого адресного пространства (out-of-bounds memory access), в 2021 году всё ещё пребывают в списке самых опасных уязвимостей ПО CWE Top 25. Известно, что ошибочные операции записи данных (out-of-bounds write, CWE-787) с двенадцатого места, которое они занимали в 2019 году, перешли в 2020 году на второе. А неправильные операции чтения данных (out-of-bounds read, CWE-125) в тех же временных пределах сменили пятое место на четвёртое.



Понимание важности раннего выявления ошибок, приводящих к вышеозначенным проблемам, привело к тому, что в свежих релизах компиляторов GNU Compiler Collection (GCC) была значительно улучшена возможность детектирования подобных ошибок. Речь идёт об использовании ключей для проведения проверок и вывода предупреждений наподобие -Warray-bounds, -Wformat-overflow, -Wstringop-overflow и (самая свежая возможность, появившаяся в GCC 11) -Wstringop-overread. Но всем этим проверкам свойственно одно и то же ограничение, связанное с тем, что система может обнаруживать проблемные ситуации лишь в пределах отдельных функций. Получается, что, за исключением анализа небольшого набора встроенных в компилятор функций, вроде memcpy(), проверка прекращается на границе вызова функции. То есть, например, если буфер, объявленный в функции A, переполняется в функции B, вызванной из функции A, компилятор, если функция B не встроена в функцию A, на эту проблему не реагирует.

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

Использование диаграммы классов UML при проектировании и документировании программного обеспечения

Level of difficultyMedium
Reading time19 min
Views235K

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

Читать далее

Побочные эффекты вакцинации: что правда, а что нет

Reading time24 min
Views60K

Иллюстрация из мультфильма «Про бегемота, который боялся прививок», Союзмультфильм, 1966. Режиссёр Л. Амальрик, Художники-постановщики: Н. Привалова и Т. Сазонова.

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

Риски вакцинации несоизмеримы с рисками смерти и тяжелых осложнений covid-2019. Официально в России на конец июля зарегистрировано 154 тыс смертей на 6,140 млн заболевших, это соответствует летальности 2,5% (цифры по избыточной смертности намного печальнее). Эпидемия не остановится пока не сформируется коллективный иммунитет, но у нас есть выбор между минимальными рисками, связанными с вакцинацией, и высокими рисками covid-2019.

Длительность иммунитета

iRobot Scooba: опыт использования и решение часто встречающихся проблем моющего робота-пылесоса

Reading time7 min
Views23K

iRobot Scooba (модели 5800, 380 и аналоги выглядят практически идентично)

Когда я впервые услышал о роботе-пылесосе, мне сразу же захотелось такой приобрести, чтобы опробовать в “полевых условиях”. Прочитал я о них где-то в 2010, и через некоторое время мне удалось исполнить свою маленькую мечту. Тогда я случайным образом познакомился с менеджером компании-дистрибьютора продукции iRobot, и мне предложили с хорошей скидкой забрать стендовый Scooba 5800.

Недолго думая, я согласился, привез новинку домой, опробовал и … робот полностью оправдал мои ожидания. Он мыл полы просто идеально, во всяком случае, гораздо лучше, чем это делаю я, даже когда очень стараюсь. Под катом — еще немного воспоминаний, опыт работы с роботом и решение нескольких распространенных среди всех Scooba «железных» проблемы, которые приводят к неработоспособности устройства.

std::move vs. std::forward

Reading time8 min
Views52K

Несмотря на то, что материалов на тему move-семантики и идеальной передачи в Интернете предостаточно, вопросов типа «что я должен здесь использовать: move или forward?» не становится меньше или мне просто «везет» на них. Поэтому и решено было написать эту статью. Предполагается, что читатель хотя бы немного знаком с rvalue-ссылками, move-семантикой и идеальной передачей.

Читать далее

Как сделать ОС для микроконтроллера

Reading time33 min
Views26K

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

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

Читать далее

Как обрести бессмертие с помощью автомата Калашникова и диссертации американского физика по квантовой механике

Reading time9 min
Views15K

В древнегреческих мифах существовало предание о трех сёстрах-мойрах: младшая из сестёр Клото плела нити на веретене, средняя сестра Лахесис случайным образом переплетала их друг с другом, а старшая Атропос в какой-то момент перерезала. Эти нити символизировали человеческие жизни - рождение, переплетение с жизнями других людей и смерть, а сами мойры являлись олицетворением рока, чьей неумолимой силе подчинялся даже сам всемогущий Зевс, и символизировали предопределенность и неотвратимость судьбы. И хотя древнегреческие мифы остались в далеком прошлом, вопрос, поставленный легендами о мойрах, актуален и поныне. Философы и физики до сих пор пытаются понять, является ли наш мир строго детерминированным и наше будущее предопределенным или же нет. За всю историю этот вопрос рассматривался в нескольких аспектах: изначально исключительно в религиозном, после в этическом, а в итоге в строго научном.

Читать далее

Ядовитые декоративные растения в саду и огороде. Справочник

Reading time16 min
Views54K
Внимательный читатель уже успел поискать цикуту на близлежащих водоемах и прикинуть опасность, которой подвергался, покупая с рук весной черемшу. Теперь пришло время заглянуть в собственный огород и палисадник. Ибо пока мы за своими компьютерами с ужасом думаем "как страшно жить из-за этих ядовитых растений", на даче бабушка тихо себе выращивает «цветочки», токсинам которых могут позавидовать многие дикорастущие позиции из справочника «Ядовитые растения и животные СССР»… Так что, продолжаем идентификацию фитотоксинов с Telegram-лабораторией LAB-66 и читаем под катом про садово-огородные «декоративные» яды.


Прошерстить палисадник!

Information

Rating
Does not participate
Location
Мытищи, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

System Software Engineer, Hardware Engineer
Senior
From 225,000 ₽
C++
Qt
Verilog HDL
VHDL
C
Git
Linux