Зачастую в процессе разработки собственных устройств или моддинга уже существующих, встаёт задача выполнения стороннего кода: будь то ваши собственные программы с SD-флэшек, или программы, написанные другими пользователями с помощью SDK для вашего устройства. Тема компиляторов и кодогенерации достаточно сложная: чтобы просто загрузить ELF или EXE (PE) программу, вам нужно досконально разбираться в особенностях вашей архитектуры: что такое ABI, релокации, GOT, отличие -fPIE от -fPIC, как писать скрипты для ld и т. п. Недавно я копал SDK для первых версий Symbian и основываясь на решениях из этой ОС понял, каким образом можно сделать крайне «дешевую» загрузку любого нативного кода практически на любом микроконтроллере, совершенно не вникая в особенности кодогенерации под неё! Сегодня мы с вами: узнаем, что происходит в процессе загрузки программы ядром Linux, рассмотрим концепцию, предложенную Symbian Foundation и реализуем её на практике для относительно малоизвестной архитектуры — XTensa (хотя она используется в ESP32, детали её реализации «под капотом» для многих остаются загадкой). Интересно? Тогда добро пожаловать под кат!
Читать полностью »
Рубрика «gcc»
Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI?
2024-01-05 в 8:01, admin, рубрики: Atmega, attiny, avr, bodyawm_ништячки, C, c++, cc, dll, elf, esp32, esp8266, exe, executable, gcc, gnu ld, ld, linker, pic, timeweb_статьи, xtensa, бинарные файлы, загрузчик, исполняемый файл, компоновщик, микроконтроллеры, микропроцессоры, программа, программы, системное программирование40 лет GNU
2023-10-17 в 8:01, admin, рубрики: Ansible, BSD, drupal, FSF, gcc, glibc, GNU, GPL, linux, timeweb_статьи, ОС, открытый исходный код, ПО, принтер, ричард столлманОперационные системы имеют основополагающее значение для Интернета, каким мы его знаем сегодня, поскольку в настоящее время они обеспечивают работу миллионов серверов, компьютеров и других встроенных вычислительных устройств. Отдельное почётное место среди этого занимает ОС Linux (или GNU/Linux), используемая миллиардами человек во всём мире.
GNU — Unix-подобная ОС с открытым исходным кодом, созданная 40 лет назад в 1983 году Ричардом Столлманом. GNU поддерживается Фондом свободного программного обеспечения (FSF), который первоначально был основан вокруг этого проекта, хотя позже он расширился и стал поддерживать другие проекты свободного ПО.
Если посмотреть на зарождение движения за свободное ПО — оно начинается с GNU. Система GNU — это не просто наиболее широко используемая ОС, основанная на свободном ПО. GNU также лежит в основе философии, которая направляла движение за свободное ПО на протяжении сорока лет.
А всё началось с плохо работающего принтера…
Читать полностью »
Это история о баге, который бы заставил вас рвать на себе волосы. Из-за такого бага вы можете подумать: «Но это невозможно, должно быть, компилятор сломался, других вариантов нет!»
А баг компилятора — это серьёзно: за двенадцать лет программирования на C++ я обнаружил (и написал отчётЧитать полностью »
Ретро-компьютер уровня «Радио-86РК» с RISC-V процессором на плате OMDAZZ
2023-03-31 в 19:13, admin, рубрики: diy или сделай сам, fpga, fpga intel, gcc, risc-v, программирование микроконтроллеров, Производство и разработка электроники, Электроника для начинающихВведение
C++ по итогам 2022-го
2023-01-13 в 16:54, admin, рубрики: c++, carbon, clang, cppfront, gcc, MSVC, val, конференцииДолжен признать, что в некоторые из предыдущих лет C++ мог ощущаться немного «скучным» и «стабильным». Новые фичи, новый стандарт каждые три года, встречи, конференции... обычная жизнь (не считая некоторых дополнительных событий в мире, экономике и эпидемиологической ситуации). Прошедший год отличается, потому что выглядит как «переломный» в истории C++... и кто знает, куда это заведёт нас.
Как оценить реальную производительность своего кода
2022-11-21 в 9:00, admin, рубрики: C, c++, Compiler Explorer, gcc, godbolt, il, Intermediate Language, LLVM, objdump, ruvds_статьи, Sharplab, uiCA, анализатор кода, ассемблер, бенчмарк кода, Блог компании RUVDS.com, декомпиляция, дизассемблер, Компиляторы, межпроцедурная оптимизация, оптимизация кода, Программирование, промежуточный языкКод, который мы пишем, и который будет исполнен процессором, — две разные вещи. На уровне ассемблера существует миллион вариантов, в каком виде интерпретировать и запустить высокоуровневые команды. Более того, современные компиляторы сильно оптимизируют код, а результат этой оптимизации похож на магию.
Читать полностью »
Удивительное приключение в стране оптимизирующих компиляторов
2022-04-03 в 12:53, admin, рубрики: C, c++, chez scheme, clang, gcc, PyPy, python, Программирование, производительностьПриглашаю вас в небольшое приключение выходного дня, в котором никто никому ничего не будет доказывать. Мы просто будем реализовывать один и тот же несложный алгоритм, разыскивающий простые числа в некотором диапазоне, на нескольких языках программирования: C, C++, Scheme и Python - и смотреть, что с этим кодом могут сделать современные оптимизирующие компиляторы. В процессе приключения мы увидим, что «динамический» не означает «совсем уж медленный», и посмотрим на приёмы программирования на Scheme, что, как мне кажется, можно сравнить с путешествием на экзотический остров.
Начало
Оптимизация математических вычислений и опция -ffast-math в GCC 11
2021-11-01 в 13:00, admin, рубрики: c++, gcc, ruvds_перевод, Блог компании RUVDS.com, математика, Программирование, разработка-ffast-math
при компиляции кода, написанного на C или C++, с использованием GCC 11 для x86_64 Linux (при применении других языков, операционных систем, процессоров могут использоваться немного другие оптимизации).
С++23: международный стандарт на удалёнке
2020-12-08 в 7:10, admin, рубрики: bugs, c++, C++20, c++23, clang, Clang-Tidy, gcc, IT-стандарты, MSVC, stack trace, stacktrace, Блог компании Яндекс, Компиляторы, Программирование, С++
C++20 прошёл все бюрократические инстанции и теперь официально готов! Международный комитет переехал в онлайн, и теперь мы вовсю работаем над C++23. Под катом вас ждут:
- std::stacktrace,
- z и uz,
- 61 с половиной багфикс в ядре языка,
- string::contains,
- Executors & Networking,
- и прочие новости.