Как стать автором
Поиск
Написать публикацию
Обновить
75.15

Системное программирование *

Обеспечение работы прикладного ПО

Сначала показывать
Порог рейтинга
Уровень сложности

Генерация перемещаемого кода для процессоров ARM в компиляторе LLVM

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


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



К сожалению, в системах Cortex M такой путь напрямую невозможен. Программа привязана к абсолютным адресам и не может исполняться в произвольном месте. С чем это связано и как мы сделали её перемещаемой, подправив компилятор LLVM, рассказано в данной статье.
Читать дальше →

Оптимизируем производительность Teensy 4.1 при разработке в NXP MCUXpresso

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


В предыдущей статье мы выяснили, что производительность контроллера MIMXRT1062, применённого на плате Teensy 4.1 можно существенно поднять, перераспределив внутреннюю память по сильносвязанным шинам. Для этого мы воспользовались механизмом FlexRAM. В библиотеках от Teensyduino всё уже сделано за нас, но в данном цикле статей я рассказываю, как вести разработку в среде MCUXpresso от NXP. Мы произвели необходимые доработки проекта, и вот уже данные ложатся в достаточно потолстевший банк памяти DTCM:



То же самое текстом
Memory region         Used Size  Region Size  %age Used
     BOARD_FLASH:       32400 B         8 MB      0.39%
        SRAM_DTC:       22420 B       256 KB      8.55%
        SRAM_ITC:          0 GB       256 KB      0.00%
         SRAM_OC:          0 GB       512 KB      0.00%


Но банк ITCM, где должен быть код, пуст. Сегодня мы научимся настраивать среду разработки для переноса большей части кода в него.
Читать дальше →

Задача выбора (назначения). Венгерский метод решения

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

Среди задач линейного программирования выделяют задачи, обладающие определенной спецификой, мотивирующей поиск и разработку специфических методов их решения. Эти методы существенно проще общего симплексного метода, так как учитывают особенности структуры и процессов (в транспортной задаче - это перевозки), описываемых задачей. В этой задаче для ее решения предложен как раз такой метод, получивший название "венгерский метод".

Читать далее

Кратко об указателях в Си: присваивание, разыменование и перемещение по массивам

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

Приветствую вас, дорогие читатели. В данной статье кратко описаны основные сведения об указателях в языке Си. Помимо основных операций с указателями (объявление, взятие адреса, разыменование) рассмотрены вопросы безопасности типов при работе с ними.

Читать полностью

Настраиваем сильносвязанные шины контроллера на плате Teensy 4.1

Время на прочтение10 мин
Количество просмотров1.9K
В прошлой статье мы увидели, как может возрасти скорость работы с портом, если обращаться к нему не через обычную, а через сильносвязанную шину. Причины кроются в латентности шины. В целом, у меня есть целая статья про DMA, где я рассматриваю влияние латентности на скорость работы. Там показано, что латентность – зло! Ну, а сильносвязанные шины работают без неё.



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

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

WireGuard заработал в режиме ядра WindowsNT

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


Разработчик WireGuard VPN Джейсон Доненфельд выпустил новую версию WireGuardNT, которая работает в режиме ядра WindowsNT (7, 8.1, 10, 11, 2012, 2016, 2019, 2022). Перенос всего кода в ядро значительно повышает пропускную способность туннеля практически на любых соединениях, особенно по WiFi.

Примечание. Чтобы запустить свою программу на уровне ядра Windows и не иметь проблем с Microsoft SmartScreen, разработчику требуется приобрести сертификат подписи кода типа EV, который стоит намного дороже, чем обычный сертификат подписи кода — примерно $2000 за трёхлетний. Хорошо, что у опенсорсного некоммерческого проекта WireGuard есть спонсоры.
Читать дальше →

Сохраняем настройки и лог файл во внутренней памяти микроконтроллера

Время на прочтение15 мин
Количество просмотров9K
image Задача сохранения настроек встречается в подавляющем большинстве современных устройств. Реже, но тоже очень часто, требуется хранение лог-файлов. Если речь идет о большом устройстве построенном на Линукс и содержащей как минимум SD карту, то с этими задачами не возникает проблем. Но если все устройство представляет из себя микроконтроллер, то возникает вопрос, где и в каком виде хранить подобные данные. В этом случае, обычно для настроек предлагают использовать сырые данные размещенные во внешнем eeprom. Но такой подход гораздо менее удобен чем вариант с файловой системой пусть даже с сильно ограниченными свойствами. Кроме того он плохо подходит для задач логирования. В данной статье мы расскажем как можно организовать удобное хранение файлов настроек и лог-файлов во внутренней флеш памяти микроконтроллера.
Читать дальше →

Исследуем тему автоматизации бизнес процессов (RPA) + 10 ошибок при внедрении

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


Автоматизация бизнес-процессов — новое направление для нашей компании. В этой статье мы бы хотели порассуждать о том, почему организации должны автоматизировать процессы, как работает автоматизация процессов, в каких ситуациях использование RPA будет оправданно. Также в этой статье мы познакомим вас с вендором Servicetrace, который поставляет соответствующее решение. В конце статьи вас ждет бонус — «10 ошибок, которые подстерегают при автоматизации бизнес-процессов». Подробности под катом.
Читать дальше →

UUID версии 7, или как не потеряться во времени при создании идентификатора

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

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

Хотя, подобные решения, не всегда хороши. В отличие от обыкновенных цифровых значений, которые легко кешировать и сортировать, UUID не так гибки в использовании. UUID версии 7 предназначен как раз для того, чтобы разобраться с подобными проблемами.

Добро пожаловать в мир сортированых UUID

Rust 1.54.0: Поддержка SIMD инструкций в WebAssembly и инкрементальная компиляция снова включена по умолчанию

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

Команда Rust рада сообщить о выпуске новой версии — Rust 1.54.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас установлена предыдущая версия Rust через rustup, то обновиться на версию языка Rust 1.54.0 все так же просто, как никогда:


rustup update stable

Если вы всё ещё не используете rustup, вы можете установить rustup на соответствующей странице нашего веб-сайта и ознакомиться с подробными примечаниями к выпуску 1.54.0 на GitHub.


Что стабилизировано в 1.54.0


Этот выпуск содержит несколько новых возможностей языка.


  • Добавлены новые сценарии использования макросов
  • Стабилизированы компиляторные вставки на платформе wasm32
  • Инкрементальная компиляция по умолчанию
Читать дальше →

PC park observer — система учёта комплектующих компьютеров парка, базирующегося на MS Windows

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

Данная система предназначена для учёта комплектующих в компьютерном парке, базирующемся на Windows. Я выложил систему под GNU/GPL v. 3 лицензией, так что денег не прошу, можете использовать как угодно... Все пожелания и т.п. обсуждаются отдельно...

Читать далее

Teensy 4.1 через MCUXpresso. Часть 2. Осваиваем GPIO и UART

Время на прочтение6 мин
Количество просмотров4.6K
В прошлой статье мы начали работать с платой Teensy 4.1 не через сцепку из её «родных» среды разработки и библиотек (совместимых с Arduino), а через среду разработки и SDK, «родные» для установленного на ней микроконтроллера фирмы NXP. Мы убедились, что примеры от совершенно другой макетной платы, в принципе, могут быть запущены и на Teensy. После проделанных опытов нас уже есть USB-устройство, работающее по стандарту CDC, то есть виртуальный COM-порт.



Но пока что мы просто учились пользоваться всем готовым. Внесённая правка была чисто символической. Сегодня мы научимся работать с UART (это очень важно, так как других средств отладки у платы Teensy 4.1 нет), поиграем с GPIO, разгоним работу с ним в десятки раз, просто подвигав «мышкой», а на закуску – уберём некоторые особенности примера виртуального COM-порта, о которых я говорил в конце прошлой статьи. Приступаем.
Читать дальше →

За что я люблю ассемблер?

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

Этой статье уже почти 3 года. Однако сегодня я решил подредактировать её, дополнить и выложить, наконец, на Хабр.

Читать далее...

Ближайшие события

Искусство отладки FPGA: как сократить срок тестирования за счет грамотной разработки

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

Давайте попробуем оптимизировать самый времязатратный этап разработки устройств на базе ПЛИС — отладку прошивки. В этой статье мы расскажем о принципе 20/80 при планировании времени, рассмотрим инструменты для отладки FPGA, вспомним Гордона Мура и Уинстона Черчилля (да-да), затроним отладку сложных распределенных систем и внешних интерфейсов, а в конце — разберемся с типичными ошибками и поделимся полезными практическими советами.

Для начала рассмотрим типовой цикл разработки и моделирования FPGA-прошивки:

Читать далее

Анализ открытых архитектур систем авионики

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

Сегодня я публикую перевод доклада «An Examination of Open System Architectures for Avionics Systems– An Update» сделанного Joyce L. Tokar, PhD, Pyrrhus Software, LLC, в марте 2017.

Признавая необходимость доступных и эффективных решений для развития систем авионики, Министерство обороны США (Department of Defense, DoD ) в указаниях по повышению эффективности военных расходов (Better Buying Power 3.0, BBP), Инструкции 5000.02 и Руководстве по оборонным закупкам (Defense Acquisition Guidebook, DAG) призывает к использованию решений на базе Систем с отрытой архитектурой (Open System Architecture, OSA ). Цели руководства и указаний - избежать привязки к одному поставщику, сделать доступными развитие возможностей и /продвижение инноваций. В настоящее время осуществляются несколько инициатив по разработке стандартов OSA для использования в системах военной авионики. В этой статье будут рассмотрены три таких направления: Управление беспилотными системами (UxS ), Архитектура сегмента управления (UCS ), инициатива Открытые системы управления полетом (Open Mission Systems, OMS ) и реализация Перспективной среды авиационных бортовых систем (FACE​) выполненная открытой группой (Open Group). Эта статья начнется с уточнения определения систем с открытой архитектурой в понимании Министерства обороны США. Далее будет краткое описание этих трех стандартов OSA, мероприятий, которые проводятся в соответствии с указаниями Министерства обороны США. Документ затем представит анализ этих OSA на основе рекомендаций Министерства обороны США. И наконец, в документе будет обобщено состояние этих OSA и даны рекомендации для дальнейшей работы.

Читать далее

Объектно ориентированное программирование на Си без плюсов. Часть 1. Введение

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

Приветствую! 

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

Статья рассчитана на тех кто уже знаком с Си, а все примеры ориентированы на ОС Linux. Мои познания Windows закончились на «WinXP», после которой в Windows стало уже очень много политики ("безопасности") и коммерческой составляющей, но я сейчас не об этом и надеюсь, что здесь вы найдёте для себя полезные моменты, а если я в чём-то не прав или заблуждаюсь, то поправите.

Итак, я решил попробовать писать в стиле объектно ориентированного программирования (далее ООП) на Си без плюсов. Многие скажут, что писать в стиле объектно ориентированного программирования (далее ООП) не для Си, и разные приёмы написания это - «псевдо-ООП». Но лично я считаю ООП всего лишь абстрактной парадигмой, определяющей стиль написания ПО и не более чем. А Си очень мощный и самодостаточный язык программирования.

Так сложилось, что изучать традиции ООП я начал с Delphi и Java, являющихся, как считается, на 100% объектно ориентированными языками программирования, а потому аналогия решений у меня ассоциируется именно с ними. И далее в тексте я иногда буду на них ссылаться, что надеюсь не испортит суть полного понимания.

Читать далее

Использование Let's Encrypt для внутренних серверов

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

Let's Encrypt — это центр сертификации, который предоставляет бесплатные сертификаты в полностью автоматизированном процессе. Эти сертификаты выдаются по протоколу ACME. За последние два года в Интернете широко использовалась технология Let’s Encrypt — более 50% веб-сертификатов SSL / TLS теперь выдает Let’s Encrypt.


В этом посте описывается, как выдавать сертификаты Let's Encrypt для внутренних серверов.

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

Путешествие Embox на Baikal

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


Всем привет.

Многие знают, что мы в проекте Embox любим портироваться на отечественные платформы. Статьи об этом можно посмотреть у нас в блоге. Например, Embox уже успешно восходил на Эльбрус. Теперь очередь за еще одним известным географическим названием и по совместимости процессором — Байкалом. У компании Байкал Электроникс есть два процессора (Baikal-M и Baikail-T1), поскольку Embox ориентирован на встроенные системы, начать мы решили с MIPS32 и запустились на Baikal-T1
Читать дальше →

Домен, поддомен, ограниченный контекст, пространство задач/решений в DDD: четко определены

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

Domain-Driven Design — это, как правило, подход к проектированию систем программного обеспечения, который предполагает создание общего языка между экспертами домена и разработчиками системы. В число известных правил DDD входят Use a Ubiquitous Language и Make The Implicit Explicit.

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

Данная статья подготовлена в результате длительной беседы на github с участием многих представителей сообщества DDD. Спасибо всем участникам этого диалога за сотрудничество.

Читать далее

Насколько сложно написать свою операционную систему?

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

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

Десять лет назад ходили анекдоты про Дениса Попова, который долго и упорно настаивал, что написал свою операционную систему «с нуля». Это считалось своеобразным синонимом «изобрести велосипед», то есть совершенно бессмысленной тратой времени. Анекдотизм ситуации состоял в том, что школьник из Нижнего Тагила скопировал Ubuntu, но был искренне убеждён в уникальности своего проекта.

Но действительно честная попытка написать свою операционку — не такое уж и бесцельное занятие (кстати, как сконструировать велосипед с нуля). По ходу дела может оказаться, что некоторые казавшиеся «очевидными» детали современных ОС спроектированы совсем не оптимально. Или вовсе не нужны.

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

Вклад авторов