Как стать автором
Обновить
39.04
Рейтинг

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

Низкоуровневое программирование

Сначала показывать
  • Новые
  • Лучшие
Порог рейтинга
  • Все
  • ≥0
  • ≥10
  • ≥25
  • ≥50
  • ≥100

Пересаживаем NXP-шный пример для Teensy 4.1 на язык C++

Системное программирование *Программирование микроконтроллеров *Компьютерное железо
В предыдущих статьях мы освоили внедрение примеров из NXP-шной среды разработки MCUXpresso в плату Teensy 4.1. Однако у тех примеров, с которыми мне довелось повозиться (а я работал с USB-примерами), есть один существенный (с моей точки зрения, разумеется) недостаток. Все они написаны на языке Си. Ну, то есть, «на чистых Сях», если на жаргоне. А вот оригинальная библиотека от Teensy была написана на С++. И я являюсь сторонником именно этого языка. Не могу жить без честных классов, виртуальных функций и некоторых других средств, которых нет в чистых Сях.



Когда я программирую в среде разработки Keil, чтобы сменить язык, достаточно переключить его в свойствах конкретного исходного файла. В цикле статей про NIOS II я просто переключал язык, изменив расширение файла с *.c на *.cpp. (Со всеми деталями это показано тут ; не как новинка, а как рутина — тут). Увы, в нашем случае так не получится. И количество действий, которое следует совершить, тянет на небольшую статью. Вот её я сейчас и напишу. Итак, давайте разбираться, что там к чему…
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 538
Комментарии 0

Под капотом Ruby. GVL

Ruby *Программирование *Системное программирование *C *Параллельное программирование *

Давным давно уже уже была написана статья о том что такое GVL (или GIL, кому как привычнее) и как он работает, однако с того времени некоторые вещи поменялись (к примеру, , а так же в Ruby 3.0 завезли Ractor'ы - новую абстракцию для реальной параллельной работы тредов. Мне стало интересно узнать что поменялось в планировщике ruby для реализации множества GVL. В этой статье я попытаюсь понять алгоритм, по которому GVL передается от одного треда к другому, как блокирующее IO позволяет продолжить работать другим тредам, а так же выяснить до сих пор ли операция добавления элемента в массив является атомарной операцией

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 977
Комментарии 0

Rust 1.55: обновление `std::io::ErrorKind`, изменение алгоритма разбора чисел с плавающей точкой

Open source *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

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


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


rustup update stable

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

Читать дальше →
Всего голосов 28: ↑28 и ↓0 +28
Просмотры 4K
Комментарии 3

Разработка одноплатного компьютера. Пособие для продвинутых

Анализ и проектирование систем *Системное программирование *Разработка под Linux *Гаджеты Электроника для начинающих

Я занимаюсь разработкой электроники. Шесть лет назад я написал свою первую статью начинавшуюся этими-же словами и увидел неподдельное внимание. Все эти годы я продолжал оттачивать свое мастерство и на текущий момент я хочу перефразировать вступление:

Я занимаюсь разработкой электроники и мне этого мало.

Чтобы немного понять что я имею ввиду предлагаю заглянуть под кат.

Читать далее
Всего голосов 98: ↑96 и ↓2 +94
Просмотры 18K
Комментарии 63

Слегка ржавое EFI-приложение

Блог компании RUVDS.com Системное программирование *Rust *UEFI *
Перевод
После двух твитов, оставленных на прошлой неделе, про мои игры с UEFI и Rust, несколько человек попросили опубликовать заметку, объясняющую как создать UEFI-приложение, полностью написанное на Расте и продемонстрировать тестовое окружение.

Так что сегодняшняя цель — это создание UEFI-приложения на Расте, которое распечатывает карту памяти, отфильтрованную по доступности для использования (такая память называется традиционной памятью в описании UEFI-спецификаций):

Читать дальше →
Всего голосов 56: ↑55 и ↓1 +54
Просмотры 6.7K
Комментарии 3

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

Системное программирование *Компиляторы *Программирование микроконтроллеров *


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



К сожалению, в системах Cortex M такой путь напрямую невозможен. Программа привязана к абсолютным адресам и не может исполняться в произвольном месте. С чем это связано и как мы сделали её перемещаемой, подправив компилятор LLVM, рассказано в данной статье.
Читать дальше →
Всего голосов 13: ↑11 и ↓2 +9
Просмотры 1.7K
Комментарии 13

Headless удаленный рабочий стол за NAT для разработчиков и бесплатно (часть 2, примеры)

C++ *Системное программирование *Разработка под Windows *

Heredes — библиотека для разработчиков


Heredes — библиотека для облегчения решения ряда конкретных задач, связанных с прямым обменом данных в сети без использования ipv6.


Из встроенных возможностей можно выделить:

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

Тема пробоя NAT, на самом деле, не нова. Но она требует от разработчика определенных навыков, наличие STUN сервера, а лучше двух, и времени для реализации.

Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 3.3K
Комментарии 14

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

Системное программирование *Программирование микроконтроллеров *Компьютерное железо


В предыдущей статье мы выяснили, что производительность контроллера 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, где должен быть код, пуст. Сегодня мы научимся настраивать среду разработки для переноса большей части кода в него.
Читать дальше →
Всего голосов 6: ↑5 и ↓1 +4
Просмотры 441
Комментарии 0

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

Системное программирование *Алгоритмы *Математика *Научно-популярное

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

Читать далее
Всего голосов 2: ↑2 и ↓0 +2
Просмотры 2.8K
Комментарии 1

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

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

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

Читать полностью
Всего голосов 17: ↑4 и ↓13 -9
Просмотры 4.7K
Комментарии 10

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

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



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

В конце последней из указанных статей я сокрушался, что для решения проблем с латентностью нам приходится использовать синтезированную систему. А разработчики от NXP предоставили нам возможность поработать в таком же режиме и на обычном микроконтроллере. Давайте посмотрим, что нам это даст. Возни предстоит много, поэтому сегодня мы только всё настроим. Итак, начинаем…
Читать дальше →
Всего голосов 11: ↑9 и ↓2 +7
Просмотры 747
Комментарии 0

Headless удаленный рабочий стол за NAT для разработчиков и бесплатно

Системное программирование *IT-инфраструктура *Разработка под Windows *

Приветствую, друзья.

Это мой второй пост, первый был закидан тапками) Надеюсь тут будет  лучше.

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

Библиотеку мы назвали Heredes (HEadless REmote DEsktop System). Это библиотека для управления рабочим столом удаленного ПК из приложений - вроде не дает никто такого? Нам не жалко, а вам, надеемся, пригодится. Аналогов отдельных для решения конкретной задачи как бы и нет. Есть как часть какого-то сервиса, что далеко не всегда приемлемо. И то для пользователей и сисадминов. Ну а для разработчиков - это всегда делать все с нуля самим.

Возможности библиотеки:

- Простое установление прямого соединения между двумя ПК за NAT (в разных подсетях)

- Двусторонний обмен любыми пользовательскими данными.

- Оптимизация для простоты реализации таких повседневных задач как:

- Прямая передача файлов за NAT. Размер файлов ограничен вместимостью ваших жестких дисков

- Покадровое реалтайм видео с рабочего стола одной машины на другую. Возможность отрисовки рабочего стола как на виртуальном DC так и на реальном

- Реалтайм аудио с микрофона одной машины на колонки второй (в формате PCM) с возможностью записи аудио в файл.

- Проброс клавиатуры и мыши между двумя ПК за NAT.

- Шифрование пересылаемых данных с помощью необычного закрытого ключа.

- Наше решение для разработчиков, то есть это библиотека которую можно использовать в Вашем проекте

Читать далее
Всего голосов 8: ↑5 и ↓3 +2
Просмотры 5.1K
Комментарии 39

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

Блог компании GlobalSign Информационная безопасность *Open source *Системное программирование *Разработка под Windows *


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

Примечание. Чтобы запустить свою программу на уровне ядра Windows и не иметь проблем с Microsoft SmartScreen, разработчику требуется приобрести сертификат подписи кода типа EV, который стоит намного дороже, чем обычный сертификат подписи кода — примерно $2000 за трёхлетний. Хорошо, что у опенсорсного некоммерческого проекта WireGuard есть спонсоры.
Читать дальше →
Всего голосов 28: ↑28 и ↓0 +28
Просмотры 8.6K
Комментарии 29

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

Блог компании Embox Программирование *Системное программирование *Программирование микроконтроллеров *
image Задача сохранения настроек встречается в подавляющем большинстве современных устройств. Реже, но тоже очень часто, требуется хранение лог-файлов. Если речь идет о большом устройстве построенном на Линукс и содержащей как минимум SD карту, то с этими задачами не возникает проблем. Но если все устройство представляет из себя микроконтроллер, то возникает вопрос, где и в каком виде хранить подобные данные. В этом случае, обычно для настроек предлагают использовать сырые данные размещенные во внешнем eeprom. Но такой подход гораздо менее удобен чем вариант с файловой системой пусть даже с сильно ограниченными свойствами. Кроме того он плохо подходит для задач логирования. В данной статье мы расскажем как можно организовать удобное хранение файлов настроек и лог-файлов во внутренней флеш памяти микроконтроллера.
Читать дальше →
Всего голосов 15: ↑13 и ↓2 +11
Просмотры 3K
Комментарии 12

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

Блог компании Gals Software Системное администрирование *Системное программирование *Софт Искусственный интеллект


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

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

Системное программирование *Администрирование баз данных *Big Data *Хранение данных *Инженерные системы

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

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

Добро пожаловать в мир сортированых UUID
Всего голосов 38: ↑37 и ↓1 +36
Просмотры 9.1K
Комментарии 175

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

Open source *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

Команда 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
  • Инкрементальная компиляция по умолчанию
Читать дальше →
Всего голосов 31: ↑30 и ↓1 +29
Просмотры 4.1K
Комментарии 112

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

Информационная безопасность *Системное программирование *IT-инфраструктура **nix *Статистика в IT
Из песочницы

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

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Просмотры 3.4K
Комментарии 24

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

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



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

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

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

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

Читать далее...
Всего голосов 79: ↑75 и ↓4 +71
Просмотры 30K
Комментарии 155

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