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

C *

Типизированный язык программирования

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

Сборка firmware для CC2652 из Makefile

Уровень сложностиСложный
Время на прочтение37 мин
Количество просмотров5.9K

В этом тексте представлена инструкция настройки ToolChain(а) для работы с микроконтроллером CC26x2 при помощи языка программирования С и компилятора GCC. Сборка осуществляется прямо из Makefile(ов).

Тут же представлена инструкция для настройки пошаговой отладки в консоли Windows.

В принципе, если вы собираете из Makefile, то вам всё равно какой там микроконтроллер и какого он вендора. Для добавления поддержки очередного MCU достаточно написать всего один *.ld и один *.mk файлик.

Во многом по этому сборка из Makefile является предпочтительнее, когда в организации много разнообразного оборудования на разных МК (или просто много сборок) и одна переносимая кодовая база на всё.

Читать далее

Разработка BIOS на языках высокого уровня

Уровень сложностиСложный
Время на прочтение11 мин
Количество просмотров29K
Ничего лишнего: материнская плата, видеокарта и ROM-BIOS

Меня давно волнует вопрос, как подступиться к разработке на голом железе, на чистом си. Хотелось понять, каким же образом идёт запуск BIOS, u-boot, grub и прочих первичных загрузчиков. Ведь необходимо перейти от ассемблера к тёплому ламповому си и соблюсти условие, собрать всё это в линукс любимым компилятором gcc.

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

Здесь я хочу свести основные моменты разработки BIOS в одном месте и разобраться обо всех проблемах, которые я получил во время своих опытах в разработке (первая и вторая части).
Читать дальше →

Нюансы разработки парсера для своего языка программирования

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров13K

image


Недавно прочитал на Хабре статью Свой язык, или как я устал от ассемблера и С, и невольно взглядом зацепился за один абзац:


Я решил не сильно париться, поэтому использовал библиотеку parglare. Она очень легкая и удобная, всем рекомендую. Для описания синтаксиса парсер принимает строку в соответствующем формате, использует регулярные выражения (не надо осуждать регулярки, они всесильны!).

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


Ведь в жизни практически любого программиста может наступить момент, когда ему в голову приходит светлая идея — разработать свой собственный язык программирования. Может быть и не ради захвата мира, наравне с C/C++, Python или хотя бы PHP, а в качестве личного пет-проекта, с которым он, длинными зимними вечерами будет оттачивать собственное мастерство.


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


Это история — заметки на память о муках выбора связки лексер-парсер для разбора грамматики NewLang. А так же попытка описать и систематизировать выводы об особенностях разных анализаторов с которыми пришлось поработать при выборе парсера для разбора грамматики у своего языка программирования.

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

Когда один TCP-порт может быть поделён

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

Вы замечали, как простые вопросы иногда приводят к сложным вопросам? Сегодня мы попытаемся подступиться к одному из таких вопросов. Категория — наша любимая: сетевые аспекты Linux.

Читать далее

WS2812B/WS2811 + STM32

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров8.3K

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

код и видео с эффектами

Компактный make для STM32 с USB

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров7.3K

Дата появления микроконтроллеров STM32, судя по datasheet, 2007 год, и с тех пор они признаны очень успешным и популярным чипом. Поэтому для них уже написано множество готовых примеров с поддержкой почти всех технологий как самим вендором так и комьюнити. Это и всевозможные USB устройства включая флешку и звуковую карту, и целочисленные варианты кодеков (WMA, Speex), и даже готовые сборки под ethernet с lwip стеком так же в наличии. В то время комьюнити пытается догнать вендора и написало библиотеку libopencm3, уже в отличии от оригинала, основанную на make, а не привязанную к среде. И в ней есть так же примеры с USB. И вот, на фоне всего этого я представил что STM32 ничем не сложнее меги, вооружившись таблицей разметки памяти с адресами регистров начинаю писать еще один вариант стандартной библиотеки для STM32. Гораздо более наивный, но зато компактный. Смыл был однозначно, я вообще считаю что если не понравился любой стандартный продукт, то это повод переписать его полностью, хотя вы можете со мной не согласиться.

Читать далее

Терминалы Lipman Nurit и их программирование

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров4.8K
Приветствую всех!

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

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



Итак, в ходе данной статьи поговорим о несколько более древних и экзотических терминалах. Узнаем, как писать под них, где взять софт и что со всем этим делать. Традиционно будет много интересного.
Читать дальше →

Как закалялась сталь современной симметричной криптографии. Глава 1. Классическая криптография

Уровень сложностиСредний
Время на прочтение49 мин
Количество просмотров11K

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

Читать далее

Программная реализация шифровальной машины «Энигма» на языке Си

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров16K

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

Читать далее

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

Уровень сложностиСредний
Время на прочтение32 мин
Количество просмотров7.7K
image

Мы привыкли к линейным алгоритмам. Нас учили строить их на информатике в школах, затем на младших курсах в колледжах и институтах. Это был бейсик или паскаль в консоли. Часто учителя просто выдавали программу, указанную в учебном плане, а для чего такое программирование может понадобиться на практике, особо никто не рассказывал. Да что там говорить, большинство повседневных задач мы сами формулируем в виде линейных алгоритмов.

Но так ли хорош этот метод для программирования микроконтроллеров, и есть ли какая-то простая и доступная альтернатива линейным алгоритмам? Я предлагаю вместе разобраться в этом вопросе.
Читать дальше →

KVM: Что такое Kernel-based Virtual Machine?

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров76K

Начнем с простого вопроса:

Что означает QEMU/KVM или QEMU-KVM?

Можно ответить - это QEMU + KVM или qemu-system, запущенный с kvm в качестве ускорителя. Но в какой-то степени это еще и анахронизм, так как с появлением KVM его разработчики для интеграции с QEMU поддерживали отдельный форк qemu-kvm, но начиная с QEMU версии 1.3 (декабрь 2012) все основные изменения из qemu-kvm были перенесены в главную ветку QEMU, а qemu-kvm объявлен устаревшим.

В разных дистрибутивах до сих пор еще можно встретить исполняемый файл qemu-kvm или просто kvm, но это лишь обертки над qemu-system:

exec qemu-system-x86_64 -enable-kvm "$@"

или симлинки:

/usr/bin/kvm -> qemu-system-x86_64

А в самом qemu существует проверка:

Читать далее

Добавляем деструкторы в C

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров5.6K

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

read(&publication);

О вреде GOTO-фобии (с примерами на C)

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

Готофобия – это боязнь использовать инструкции goto. Обычно возникает из-за непонимания и незнания контекста этой проблемы, а также из-за историй о незапамятных временах в истории программировании. Разработчики, страдающие готофобией, готовы жертвовать удобочитаемостью своего кода, только бы не прибегать к goto.

Читать далее

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

Делаем отказоустойчивый Asterisk realtime

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров7.2K

Если вы спросите у прожжённых системных администраторов, используют ли они realtime‑конфигурацию в Asterisk, с вероятностью 90% ответ будет отрицательный. В качестве обоснования, скорее всего, услышите «При недоступности источников данных телефония станет неработоспособной». Если интересно узнать, как мы обошли это ограничение, читайте дальше.

Читать далее

Приключения капитана Блада: потонет ли Арабелла?

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

Недавно в сети появилась новость о том, что был открыт исходный код игры "Приключения капитана Блада". Мы не смогли пройти мимо и проверили его качество с помощью PVS-Studio. Потонет ли легендарный корабль капитана Блада от найденных багов? Давайте узнаем!

Читать далее

Разработка приложений для платёжных терминалов Ingenico

Уровень сложностиСложный
Время на прочтение35 мин
Количество просмотров21K
Приветствую всех!

Скажите: интересовались ли вы хоть раз тем, как устроены и работают банковские платёжные терминалы, к которым вы прикладываете свою карту едва ли не ежедневно? Хотели ли вы узнать, как написать что-то своё под какое-нибудь из данных устройств?

Если ваш ответ — «Да», то этот пост определённо для вас.



Обычно тема программирования POS-terminal'ов покрыта завесой тайны, но сейчас мы постараемся её развеять. В ходе данной статьи разберёмся с азами разработки под такие девайсы. Узнаем, где скачать нужный софт, как его установить, а также, собственно, как скомпилировать и запустить нашу первую программу. Традиционно будет много интересного.
Читать дальше →

STM8L подробное руководство первых шагов

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров16K

Речь пойдет о маломощном микроконтроллере STM8L001J3. Постараюсь подробно рассказать о необходимых шагах для прошивки "hello world" и различных подводных камнях.

Читать далее

Генератор случайных чисел на базе неопределённого поведения состояния гонки

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров5.1K

Генерация случайных чисел окружает нас везде. Любой шаг, дыхание, дуновение ветра, шум кулера, частота мяуканья кошки и т.п. уже может рассматриваться как некая генерация случайности. Так например, насколько вы контролируете вашу ходьбу? Можете ли вы с точностью до нанометра определить точку опоры? Если не можете, то сама погрешность в неопределённости расстояния начинает становиться для вас генератором случайности.

Читать далее

Регистры vs библиотеки на примере сердечек

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

Впереди 14 февраля. Можно спорить об уместности этого праздника в наших краях, а можно направить энергию в мирное русло. Например, откопать Arduino, щедро обсыпать светодиодами и сформовать их во что-то сердечкоподобное. Неубедительно? Согласен. Давайте так: откопаем в дальней коробке макетку на STM32, забудем, что у нас есть готовые библиотеки и подёргаем регистры, выгрызая каждый байт ROM у злобного компилятора. Потом сделаем всё тоже самое, но без фанатизма, с привлечением CMSIS библиотек и сравним результаты. Возможно даже сделаем выводы. Будет код, надругательство над таблицей векторов. Ардуинка тоже будет, куда ж без неё.

Build Target

Среда разработки VS Code на ТВ-приставке

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

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

Кратко оно выглядит так:

Мультимедиа-приставка (была с Андроидом), в ней запущен Линукс, в нем развернута IDE Visual Studio Code, в ней установлено расширение PlatfformIO. Все это удаленно доступно по SSH и RDP. К этому мини-компьютеру подключена плата STM32F4 discovery через ST-Link на борту, через него работает загрузка и отладчик, а через переходник USB-UART отображаются диагностические сообщения. Тестовая программа для демонстрации использует фреймворк Ардуино.

Читать далее

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