Как стать автором
Обновить
72.13

C *

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

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

Загоняем Альпаку на Эльбрус

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 2.1K
*nix *C *Искусственный интеллект

Думаю уже все слышали об Alpaca - аналоге chatGPT, которую можно запустить локально на процессоре. И раз есть такая возможность почему бы не сделать это на Эльбрусе?!

Читать далее
Всего голосов 23: ↑17 и ↓6 +11
Комментарии 17

Новости

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

Уровень сложности Сложный
Время на прочтение 39 мин
Количество просмотров 2K
Информационная безопасность *Криптография *Программирование *C *Математика *
Ретроспектива

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

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

PostgreSQL под капотом. Часть 5. Простой SELECT запрос

Время на прочтение 42 мин
Количество просмотров 2.3K
Open source *PostgreSQL *Программирование *Анализ и проектирование систем *C *

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

В этой статье рассмотрим какой путь проходит простой SELECT запрос. От стадии сырой строки до отправки ответа клиенту.

А еще:

Работу со статистикой приложения через API Linux.

Реализацию динамического списка.

«Наследование» в C.

Как ведется работа с диском в БД.

Немного легаси.

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 2

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

Уровень сложности Сложный
Время на прочтение 37 мин
Количество просмотров 1.3K
C *Программирование микроконтроллеров *Системы сборки *Производство и разработка электроники *Электроника для начинающих
Туториал

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

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

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

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

Читать далее
Всего голосов 16: ↑14 и ↓2 +12
Комментарии 18

Истории

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

Уровень сложности Сложный
Время на прочтение 11 мин
Количество просмотров 14K
Блог компании Timeweb Cloud Ненормальное программирование *Assembler *Системное программирование *C *
Туториал
Ничего лишнего: материнская плата, видеокарта и ROM-BIOS

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

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

Здесь я хочу свести основные моменты разработки BIOS в одном месте и разобраться обо всех проблемах, которые я получил во время своих опытах в разработке (первая и вторая части).
Читать дальше →
Всего голосов 118: ↑117 и ↓1 +116
Комментарии 55

Mediastreamer2. Применение Lua-машины в фильтрах

Время на прочтение 13 мин
Количество просмотров 496
Программирование *C *Lua *Разработка под Linux *
Туториал

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

Код программ данной главы можно скачать с Github по ссылке:

https://github.com/chetverovod/Mediastreamer2_LuaFilter

Приступим к практической реализации. Для этого можно вспомнить как создается новый фильтр, см. главу 4. В этой схеме источником звукового сигнала может быть либо сигнал с линейного входа звуковой платы (sound_card_read) либо генератор DTMFсигнала (dtmf_generator). Далее данные попадают на вход разрабатываемого Luaфильтра (lua_filter), который осуществляет их преобразование в соответствии с загруженным в него скриптом. Затем данные поступают на разветвитель (Tee), который из входного потока образует две копии, которые выдает на два выхода. Один из этих потоков поступает на регистратор (recorder) и на звуковую карту для воспроизведения (sound_card_write). Регистратор (*recorder*), он сохраняет их на диск в формате raw (wavфайл без заголовка). Таким образом мы сможем прослушать и записать результат работы Lua-фильтра.

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Комментарии 2

Опыт портирования Eclipse 4diac на KasperskyOS CE

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 960
Eclipse *C++ *C *
Из песочницы

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

Автоматизация производственных процессов помимо очевидных преимуществ имеет и ряд сложностей. Одной из проблем является риск подвергнуться кибератакам. Возможным решением является разработка защищенной реализации для среды исполнения IEC 61499 для KasperskyOS. Для этого требуется реализовать киберимунную систему управления путем портирования среды исполнения IEC 61499 Eclipse 4diac forte на операционную систему KasperskyOS.

Читать далее
Всего голосов 11: ↑9 и ↓2 +7
Комментарии 1

Градация Навыков в Embedded Программировании

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 3.9K
C *Программирование микроконтроллеров *Карьера в IT-индустрии Производство и разработка электроники *Электроника для начинающих
Аналитика

В программировании микроконтроллеров нет как таковой общепринятой градации на Junior->Middle->Senior. Не сложилось.

Давайте попробуем вместе разобраться, где же проходит водораздел между Junior->Middle->Senior программистом МК и что справедливо требовать от каждого из них?

Далее речь пойдет в основном про программирование микроконтроллеров. Тут не будет затронут Embedded Linux, FPGA разработка.

Читать далее
Всего голосов 27: ↑5 и ↓22 -17
Комментарии 79

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

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 7.3K
Блог компании Timeweb Cloud Программирование *C++ *C *
Ретроспектива

image


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


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

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


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


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


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

Читать дальше →
Всего голосов 32: ↑30 и ↓2 +28
Комментарии 55

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

Время на прочтение 19 мин
Количество просмотров 11K
Программирование *Сетевые технологии *C *Параллельное программирование *Разработка под Linux *
Перевод

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

Читать далее
Всего голосов 25: ↑21 и ↓4 +17
Комментарии 6

WS2812B/WS2811 + STM32

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 5.9K
C *Программирование микроконтроллеров *
Туториал

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

код и видео с эффектами
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 23

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

Уровень сложности Средний
Время на прочтение 4 мин
Количество просмотров 5.1K
C *Разработка под Linux *Программирование микроконтроллеров *
Из песочницы

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

Читать далее
Всего голосов 24: ↑23 и ↓1 +22
Комментарии 12

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

Уровень сложности Средний
Время на прочтение 22 мин
Количество просмотров 3.2K
Блог компании Timeweb Cloud Платежные системы *C *Старое железо
Туториал
Приветствую всех!

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

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



Итак, в ходе данной статьи поговорим о несколько более древних и экзотических терминалах. Узнаем, как писать под них, где взять софт и что со всем этим делать. Традиционно будет много интересного.
Читать дальше →
Всего голосов 35: ↑35 и ↓0 +35
Комментарии 40

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

Уровень сложности Средний
Время на прочтение 49 мин
Количество просмотров 4.7K
Информационная безопасность *Криптография *Программирование *C *
Ретроспектива

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

Читать далее
Всего голосов 23: ↑23 и ↓0 +23
Комментарии 5

Почему Важно Собирать С-код из MakeFile

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 5.4K
C *Программирование микроконтроллеров *Системы сборки *DevOps *Производство и разработка электроники *
Мнение

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

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

Читать далее
Всего голосов 46: ↑14 и ↓32 -18
Комментарии 63

Неожиданная проблема с макросами (точнее без макросов)

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 4.6K
Ненормальное программирование *Программирование *C++ *Компиляторы *C *
Мнение

image


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


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


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


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

Читать дальше →
Всего голосов 5: ↑3 и ↓2 +1
Комментарии 29

XML дерево на С. Пишем подготовительный код для библиотеки targetXML

Уровень сложности Сложный
Время на прочтение 18 мин
Количество просмотров 1.3K
XML *C *
Из песочницы

targetXML - маленький экскурс в структуру дерева XML на примере работоспособного кода «pure C».

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

Читать далее
Всего голосов 7: ↑5 и ↓2 +3
Комментарии 3

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

Уровень сложности Средний
Время на прочтение 17 мин
Количество просмотров 8.4K
Информационная безопасность *Криптография *Программирование *C *
Ретроспектива

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

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

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

Уровень сложности Средний
Время на прочтение 32 мин
Количество просмотров 3.9K
Блог компании Timeweb Cloud C *Программирование микроконтроллеров *Разработка под Arduino *Электроника для начинающих
Туториал
image

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

Но так ли хорош этот метод для программирования микроконтроллеров, и есть ли какая-то простая и доступная альтернатива линейным алгоритмам? Я предлагаю вместе разобраться в этом вопросе.
Читать дальше →
Всего голосов 28: ↑27 и ↓1 +26
Комментарии 38

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

Уровень сложности Средний
Время на прочтение 17 мин
Количество просмотров 15K
Программирование *Системное программирование *Виртуализация *C *Разработка под Linux *

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

Что означает 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 существует проверка:

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

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

Работа

Программист С
38 вакансий