Pull to refresh
3
@Denis7383read⁠-⁠only

User

Send message

Пиши на C как джентльмен

Reading time16 min
Views89K

«Code Monkey like Fritos
Code Monkey like Tab and Mountain Dew
Code Monkey very simple man
With big warm fuzzy secret heart:
Code Monkey like you
Code Monkey like you»

— Jonathan Coulton — Code Monkey


Я думаю, многим знакома эта шикарная песня Jonathan Coulton'а, и эта жизненная ситуация, когда «Rob say Code Monkey very diligent», но «his output stink» и «his code not 'functional' or 'elegant'».

Язык Си, подаривший нам столько полезного софта, потихоньку был вытеснен из десктопа и энтерпрайза такими высокоуровневыми гигантами как Java и C# и занял нишу системного программирования. И все бы хорошо, но системщики — очень отбитые своеобразные ребята. Задачи, которые порой возникают перед ними даже своей формулировкой способны вогнать в ужас простых смертных. Собственно говоря, так же, как и некоторые решения.

Сегодня мы поговорим о некоторых полезных практиках, которые я вынес из глубин системного программирования на Си. Поехали.
Читать дальше →

Micro Pocket SSB приемник на базе ESP32 и SI4732. Что за девайс и для чего?

Reading time6 min
Views20K

Что-то, а китайцы впереди планеты всей по части удешевления техники. Я до сих помню тот шок, который испытал, приобретя свой первый USB-брелок RTL-SDR за 3 $. Чувствительностью и селективностью он не особо отличался. Тем не менее это был девайс, позволявший видеть, что происходит в эфире на соседних частотах. А еще он отлично работал с любыми антеннами.

Совсем недавно на многих маркетплейсах Поднебесной появился еще один любопытный приемник, который чем-то напомнил знаменитую Belka-DX. Я не смог удержаться и протестил его, тем более, что базируется он на чипе Si4732-A10. Сегодня опишу свой опыт работы с ним и расскажу, какие у него подводные камни.

Читать далее

Ещё одна сериализация для C++

Level of difficultyEasy
Reading time4 min
Views2.1K

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

Хотя инструментов для сериализации существует достаточно много, я предлагаю вашему вниманию ещё один. Он не лучше и не хуже других, и был создан с акцентом на простоту (кто бы мог подумать?) и компактность (опять же!), не сильно влияющую на производительность работы с ранее сериализованными данными.

Читать далее

Почему важно собирать код из скриптов

Level of difficultyEasy
Reading time17 min
Views13K

В период с 199x по 201x развелось очень много программистов-микроконтроллеров, которые никогда не представляли свою работу без IDE (IAR, KEIL, Code Composer Studio, AtilocTrueStudio).

В этом тексте я написал про недостатки работы в IDE и альтернативный способ сборки и масштабирования кодовой базы. Про MakeFile(ы).

Читать далее

Атрибуты Хорошего С-кода (Хартия Си Программистов)

Level of difficultyEasy
Reading time11 min
Views30K

Это не академические атрибуты из учебников. Это скорее правила буравчика оформления сорцов из реального prod(а). Некоторые приемы совпали с MISRA, некоторые с CERT-C. А кое-что является результатом множества итераций инспекций программ и перестроек после реальных инцидентов. В общем тут представлен обогащенный концентрат полезных практик программирования на С(ях).

Читать далее

Нельзя Просто Так Пойти и Купить Овцу (или Потёмкинская Деревня в Коде)

Level of difficultyEasy
Reading time11 min
Views7.8K

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

Вот буквально несколько настоящих примеров из жизни. Парад нелепости.

Как сказал мой коллега: "Формализм при ревью уже перешёл все рамки здравого смысла."

Читать далее

Лучшие Образцы Си Кода

Level of difficultyEasy
Reading time5 min
Views14K

Я долгое время негодовал по поводу того, что часто приходится копаться в плохо оформленном коде .

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

Читать далее

КодоГенератор Линейных Отображений (как ускорить создание ASIC драйвера)

Level of difficultyEasy
Reading time5 min
Views2.3K

В программировании микроконтроллеров на Си часто приходится писать драйверы для умных и навороченных ASIC чипов с управлением по I2C/SPI/MDIO интерфейсам.

Обычно перед запуском эти чипы надо правильным образом сконфигурировать.

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

В этом тексте я показал как можно делать интерпретаторы этих величин.

Читать далее

Делаем новый контроллер сервоприводов

Reading time5 min
Views17K

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

Читать далее

DIY-программатор ST-Link V2.1

Level of difficultyMedium
Reading time6 min
Views40K

Привет, Хабр!

Предлагаю вашему вниманию самодельный программатор ST-Link V2.1.

Особенности: интерфейс SWD, функция виртуального COM-порта, поддержка SWO, функция MSC (mass storage class), низкая цена.

Перейти к статье

БабаГрам: Телеграм для бабушки

Reading time8 min
Views59K

Однаждый мне рассказали о самодельном девайсе под названием Yayagram (по какой-то причине описанном создателем в Твиттере, а вот тут по-русски). Я на него посмотрел и решил сделать свой, с преферансом и поэтессами аркадными кнопками и старым термопринтером.

Так родился БабаГрам, чёрный ящик, открывающий моей бабушке общение в Телеграме.

В статье - про устройство и сборку сего девайса.

Читать далее

Герои напильника и паяльника: итоги сезона DIY

Reading time8 min
Views17K

В классических RPG персонаж игрока занимается, по сути, ровно двумя вещами: качается и причиняет миру добро. Эти вещи взаимосвязаны: чем больше причинил добра, тем больше дали очков опыта. Чем сильнее прокачал навыки, тем больше можешь причинить миру добра. DIY — тоже в каком-то смысле RPG. Собрав работающий электросамокат на базе нерабочего гироскутера, одновременно и новые безумные скиллы приобретаешь, и сынишку радуешь, и немного даже об окружающей среде заботишься.

Привет, Хабр! Сезон DIY подходит к концу, и мы, компания VK, пришли его торжественно закрыть, раздать особо отличившимся героям лут и голду, а заодно — поговорить о том, чему именно учится DIY’щик и какое конкретно добро он причиняет миру.

Читать далее

Учим три телевизора делать солнышко

Level of difficultyEasy
Reading time29 min
Views54K

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

Осторожно, трафик!

Автоматизированный электропривод ленточного конвейера: Разработка системы управления с возможностью удаленного контроля

Level of difficultyMedium
Reading time8 min
Views3.1K

Проект автоматизированного электропривода экспериментального ленточного конвейера, разработанный на кафедре электроэнергетики и автоматики Белгородского государственного технологического университета имени В.Г. Шухова.

Читать далее

Геометрическая оптимизация детали в CAD/CAE, и при чем тут Самара

Level of difficultyMedium
Reading time4 min
Views3.1K

Проектируете вы на работе или мастерите свой пет-проект (как @Doctor_IT, автор VR-жилета — с удовольствием прочитали и заплюсовали пост), настает момент, когда надо оптимизировать разрабатываемую конструкцию. Обычно, чтобы уменьшить ее массу или снизить расход материала. Оптимизацией сегодня и займемся, на связи Дмитрий Крекин из команды КОМПАС-3D. 

Читать далее

Необычный калькулятор для конденсаторов

Level of difficultyEasy
Reading time5 min
Views11K

Привет друзья!

Я люблю заниматься электроникой, но на моём заводе мне редко дают такие задачи, поэтому я занимаюсь этим дома: делаю свои электронные проекты, учу теорию и иногда занимаюсь с репетитором. Недавно мы проходили всё, что связано с конденсаторами именно с практической точки зрения и он показал мне очень интересный калькулятор. Если нужно посчитать время заряда конденсатора, обычно инженеры считают по стандартной формуле, перемножая сопротивление RC-цепи на ёмкость конденсатора. Какое-то количество людей считают, что уже на этом можно остановиться и что тау это и есть время заряда конденсатора и однажды я увидела эту информацию в одной книге для начинающих! Но на самом деле за одну тау конденсатор заряжается на 63%, за два тау на 86% и так далее. Так как график напряжения на конденсаторе во время его заряда нелинейный и имеет экспоненциальный характер, то за каждое следующее тау он заряжается на меньший процент. Полностью конденсатор не может зарядиться никогда, как и разрядиться, поэтому "полным" зарядом принято считать 99,3% и такого уровня конденсатор достигает за время равно пять тау. Поэтому полный расчёт времени заряда конденсатора выглядит так:

Читать далее

Что под капотом чипа DRAM, этапы развития технологии

Reading time10 min
Views13K
“Всем знаком закон Мура, описывающий уменьшение размеров транзисторов в логических схемах. Для того, чтобы он продолжал работать, технологам приходится идти на все новые и новые ухищрения, однако их работу несколько усложняет то, что все чипы очень разные по структуре. А что было бы, если бы можно было оптимизировать технологию под конкретный дизайн микросхемы? Ответ на этот вопрос может дать динамическая память.”

Классический пример работы закона Мура — ячейка статической памяти. Ее схема давно известна и широко используется, занимая десятки процентов площади современных микропроцессоров и систем на кристалле. Именно площадь ячейки статической памяти стали использовать как мерило плотности упаковки новых технологий, когда стало понятно, что длина канала транзистора больше не может быть эталоном проектных норм. Учитывая важность статической памяти, технологи стараются подбирать параметры процессов так, чтобы не только в принципе увеличивать плотность упаковки элементов на кристалле, но и заботиться конкретно о статической памяти. Однако, на чипе всегда есть множество других схем, и если очень сильно упираться в оптимизацию именно памяти, это может выйти боком. Но что было бы, если бы технологию можно было полностью подчинить нуждам схемотехники? Ответ на этот вопрос может дать динамическая память.

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

Заземлённые указатели

Reading time8 min
Views53K
pointres, gnd

Не так давно, один из сотрудников покинул наш коллектив и присоединился к компании, занимающийся разработкой программного обеспечения, связанного с встраиваемыми системами. Ничего особенного в этом нет, всегда и везде, кто-то уходит, а кто-то приходит. Всё зависит от количества плюшек, удобства и предпочтений. Интересно другое. Человек искренне переживает за состояние кода на новом месте работы, что в результате и вылилось в эту совместную статью. Тяжело, «просто программировать», когда знаешь, что такое статический анализ кода.
Читать дальше →

Заземление. Что это такое и как его сделать (часть 2)

Reading time12 min
Views138K


1 часть. Заземление
(общая информация, термины и определения)


2 часть. Традиционные способы строительства заземляющих устройств
(описание, расчёт, монтаж)


3 часть. Современные способы строительства заземляющих устройств
(описание, расчёт, монтаж)



2 часть. Традиционные способы строительства заземляющих устройств (описание, расчёт, монтаж)


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

Г. Основные способы строительства

Г1. Несколько коротких электродов (“уголок и кувалда”)
Г1.1. Особенности решения
Г1.1.1. Промерзание грунта зимой
Г1.1.2. Взаимное “экранирование”/ “затенение” электродов
Г1.2. Расчёт получаемого сопротивления заземления и необходимого количества заземляющих электродов
Г1.3. Монтаж
Г1.4. Достоинства и недостатки
Г1.5. Уменьшение количества электродов
Г2. Одиночный глубинный электрод (“обсадная труба”)
Г2.1. Особенность решения
Г2.2. Расчёт получаемого сопротивления заземления
Г2.3. Монтаж
Г2.4. Достоинства и недостатки


Г. Основные способы строительства


Напомню, в прошлой части я остановился на общем подходе…
Читать дальше →

Заземление. Что это такое и как его сделать (часть 3)

Reading time16 min
Views99K


1 часть. Заземление
(общая информация, термины и определения)


2 часть. Традиционные способы строительства заземляющих устройств
(описание, расчёт, монтаж)


3 часть. Современные способы строительства заземляющих устройств
(описание, расчёт, монтаж)



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

Д. Основные способы строительства

Д1. Модульное заземление (для обычных грунтов)

Д1.1. Особенности решения
Д1.1.1. Универсальность и простота применения
Д1.1.2. Долгий срок службы
Д1.1.3. Зависимость уменьшения сопротивления заземления от увеличения глубины электрода
Д1.1.4. Суперкомпактность
Д1.1.5. Никакой сварки
Д1.2. Расчёт получаемого сопротивления заземления
Д1.3. Монтаж
Д1.4. Достоинства и недостатки

Д2. Электролитическое заземление (для вечномёрзлых или каменистых грунтов)

Д2.1. Особенности решения
Д2.1.1. Простота применения в вечномёрзлых или каменистых грунтах
Д2.1.2. Компактность
Д2.1.3. Образование талика
Д2.1.4. Никакой сварки
Д2.2. Расчёт получаемого сопротивления заземления
Д2.3. Монтаж
Д2.4. Достоинства и недостатки


Д. Основные способы строительства

Напомню о достоинствах и недостатках традиционных способов строительства заземлителей, описанных в прошлой части:
Читать дальше →

Information

Rating
Does not participate
Registered
Activity

Specialization

Embedded Software Engineer
Intern
Programming microcontrollers
Circuitry
Electronics Development
STM32
Development of printed circuit board
Altium Designer
Embedded system
Cortex-M3
PCB design