На каком языке программируют процессоры
Языки программирования микроконтроллеров по своей структуре мало отличаются от классических языков для компьютеров. Единственным отличием становится ориентированность на работу со встроенными периферийными устройствами. Архитектура микроконтроллеров требует, например, наличия битово-ориентированных команд. Последние позволяют выполнять работу с отдельными линиями портов ввода/вывода или флагами регистров. Подобные команды отсутствуют в большинстве крупных архитектур. Даже ядро ARM, активно применяемое в микроконтроллерах, не содержит битовых команд, вследствие чего разработчикам пришлось создавать специальные методы битового доступа.
Другие
По мимо вышеперечисленных блоков, процессор должен уметь:
- Получать и изменять значения в памяти
- Выполнять условные переходы
Тут и там можно увидеть как это выглядит в коде.
После написания процессора нам нужна программа, которая бы преобразовывала текстовые команды в машинный код, чтобы не делать этого вручную. Поэтому нужно написать ассемблер.
Я решил реализовать его на языке программирования Си.
Так как мой процессор имеет RISC архитектуру, то для того, чтобы упростить себе жизнь, я решил спроектировать ассемблер так, чтобы в него можно было легко добавлять свои псевдоинструкции(комбинации из нескольких элементарных инструкций или из других псевдоинструкций).
Можно реализовать это с помощью структуры данных, хранящей в себе тип инструкции, ее формат, указатель на функцию, которая возвращает машинные коды инструкции, и ее название.
Обычная программа начинается с объявления сегмента.
Для нас достаточно двух сегментов .text — в котором будет храниться исходный код наших программ — и .data — в котором будет хранится наши данные и константы.
Инструкция может выглядеть вот так:
Сначала указывается название инструкции, потом операнды.
В .data же указываются объявления данных.
Объявление должно начинаться с точки и названия типа данных, после же идут константы или аргументы.
Удобно парсить (сканировать) ассемблер файл в таком виде:
- Сначала сканируем сегмент
- Если это .data сегмент, то мы парсим разные типы данных или .text сегмент
- Если это .text сегмент, то мы парсим команды или .data сегмент
Для работы ассемблеру нужно проходить исходный файл 2 раза. В первый раз он считает по каким смещениям находятся ссылки (они служат для), они обычно выглядят вот так:
А во второй проход можно уже и генерировать файл.
В дальнейшем, можно запускать выходной файл из ассемблера на нашем процессоре и оценивать результат.
Также готовый ассемблер можно использовать в Си компиляторе. Но это уже позже.
Когда я только начинал вливаться в программирование, то в книге я прочитал про историю появления Java и про ее подход к работе программ. Узнал, что при помощи JVM язык добивается кроссплатформенности и за счет этого Java стала такой популярной. Т.е. в моем понимании язык тогда как раз таки и подходил для микроконтроллеров, но сейчас когда ищу информацию про программирование для микроконтроллеров, то встречаю, что в основном это сейчас делают на языке Си. Вопрос в следующем: какой же язык сейчас наиболее популярен для разработки ПО под микроконтроллеры и почему для этой цели (как я читал на других источниках) язык Си выбирают чаще чем свой более развитый аналог - Java?
Простой 1 комментарий
Конечно, подавляющее большинство микроконтроллеров программируется на C. (если отвлечься в сторону теории, то основой является требование выполнять конкретные инструкции CPU. Это достигается при помощи компилятора. Что есть компилятор: фронтенд(разбор человеческого текста во внутренний язык компилятора)->оптимизатор/и др.->кодогенератор. Из всего этого - можно заменить фронтенд - получим другой язык?, но не все так просто - особенности языка простираются в ограничения для оптимизатора.)
Из вышеупомянутого - понятно, что компиляторы, целью которых является код микроконтроллеров - преимущественно являются компиляторы для 'человеческого' C.
Для тех, кто достиг этой строки комментария - замечаю: существуют реализации ARM контроллеров, которые выполняют Java код на аппаратном уровне. Об этом - см. "семейство технологий Jazelle".
PS: Java не аналог C, он только имеет схожий синтаксис, для более лёгкого перехода специалистов от C к Java (так подразумевалось разработчиками Java).
У Java ME есть минимальные системные требования для целевых устройств.
Взглянув на них, становится понятно, что это не для микроконтроллеров в общем случае. Конечно, встраиваемая система встраиваемой системе рознь, но вот микроконтроллеры ещё используют не только для встраиваемых систем, а прямо в железо, например, радио-приемопередающего устройства, спроектированного на работу с протоколом физического уровня. Такие контроллеры могут иметь килобайты памяти всех видов. Зачастую, такие девайсы предлагают не так много ассемблерных инструкций, чтобы имело смысл делать под них компилятор Си. В более универсальных микроконтроллерах компилятор есть, поэтому это вполне себе повод для радости.
Там, где можно развернуть JME, уже есть Linux kernel, поэтому ответ на вопрос о том, почему больше используется Си, чем Java, заключается в том, чем занимается компания, в чем у нее бизнес и какой у нее рынок. Количественно, решений, которым нужно JME просто меньше, относительно тех, в которых не нужна прослойка в виде ОС.
почему для этой цели (как я читал на других источниках) язык Си выбирают чаще чем свой более развитый аналог - Java
Пример контроллера - ATTiny13:
- 1 КБ внутрисистемно программируемой Flash памяти программы
- 64 байта внутрисистемно программируемой EEPROM памяти данных,
- 64 байта встроенной SRAM памяти
Удачи с размещением виртуальной машины Java + кода самой программы с учетом имеющихся ресурсов.
ты чё !! нашел чё смотреть !! минимум малинка минимум линуха со всем высокоуровневым обвесом !! чё ковыряться в какойто мелочевке.
:)
d-stream, Абсолютно некорректное сравнение. На борту SIM находится 32 битный процессор с аппаратным ускорением криптографии, 16 килобайт RAM и полмегабайта флеш и столько же ROM.[1] Туда как раз JAVA-машина (сильно порезанная) прекрасно влезет.
d-stream, а есть примеры кода для таких джава карт? Интересно посмотреть. В интернетах я вижу только какие-то обучалки простейшие
вполне корректное. Микроконтроллеры совсем не заканчиваются ATTiny13 и есть вполне "жирные" в плане ресурсов. Так что справедливости ради микроконтроллер на java вполне имеет право на существование. Что и иллюстрируют те же sim-карты.
Я в шоке от масштабов трагедии. Java? В микроконтроллеры?! Да там и Си не всегда подходит, нужен Ассемблер. Потому, что Си генерирует более громоздкий бинарный код.
Java. Тихий шок.
Тут чистая экономика.
Контроллеры ставят в основном в массовые устройства.
Это значит что каждый сэкономленный доллар - это десятки, а то и сотни миллионов прибыли на ровном месте.
Подобные суммы с лихвой покрывают время программистов, поэтому им ставят задачу уложить функционал на самый дешёвый контроллер, который ещё хоть как-то способен потянуть этот функционал.
Отсюда - высокая степень оптимизации кода при работе с контроллерами.
Нужно максимально использовать все особенности конкретного контроллера - программисты много работают с даташитом.
Язык должен позволить максимально полно использовать систему команд конкретного контроллера, и гибко управлять регистрами и памятью контроллера.
Поэтому в ходу в основном ассемблер - с ним можно писать максимально компактный код.
Но функционал зачастую достаточно большой, чтобы его целиком писать на ассемблере.
Поэтому, в целях экономии времени, пишут на Си, с использованием библиотек, а самые ответственные места реализуют с помощью ассемблерных вставок.
Благодаря этому удается реализовать почти все преимущества и ассемблера и Си: быстрая и достаточно полно контролируемая разработка, с достаточно компактным и быстрым кодом.
С симками ситуация иная - там важно было реализовать кроссплатформенный код. Поэтому используют java, не смотря на ресурсы.
В более мощных контроллерах в ходу уже не конкретный язык, а целые ОС. В основном в прошивках просто зашивают Линукс, а отдельные части по управлению контроллером реализуют на Си как драйвера.
Там, где важна производительность, вообще не пользуются программным кодом, а переходят на железную логику - плисы. Это в основном оборудование для обработки сигналов, в т.ч. всевозможные радиомодули, модемы, видеооборудование, и т.п.
Так что все зависит от здравого смысла и стоимости.
Просто так везде пихать java - немного глупо.
знал, что при помощи JVM язык добивается кроссплатформенности и за счет этого Java стала такой популярной. Т.е. в моем понимании язык тогда как раз таки и подходил для микроконтроллеров
Не знаю с какого потолка вы взяли подобное понимание, но именно из-за JVM JAVA совершенно неприемлем для микроконтроллеров. За кроссплатформенность JAVA приходится расплачиваться большим расходом памяти и низким быстродействием.
PS Некоторые контроллеры Амперки которые на ARM Cortex программируются на JavaScript, но это уже другая история (помоему не очень удачная)
Можно и на яве писать, только под это дело компилятор нужен, чтобы код перевести в машинные коды, понятные процессору.
Не важно на каком языке писать код, он все равно будет преобразован компилятором. Так уж сложилось исторически, что был выбран Си.
языки ну C, Rust тк обычно от контроллеров требуется не просто данные обрабатывать, а обрабатывать именно в реальном времени, тоесть выполнять конкретные действия, точно в назначенное время, а джава машина не работает в реальном времени.
Java хороша там где нужны большие объемы данных, масштабируемость , потокобезопастность , при этом плевать на требования к железу , всегда можно поставить сервак помощнее
На микроконтроллерах в силу специфики нужны минимальный размер скомпилированного кода , более оптимальный код , минимальное потребление электроэнергии.
Потому си или даже ассемблер в особых случаях
Всё зависит от задачи!
С, С++, Rust, asm. Примерно такое распределение использования я вижу.
Я С++ использую скорее как "С с классами". Замечу что С++ не намного жрёт ресурсы по сравнению с С. Нужно "уметь готовить" (-fno-exceptions, -fno-rtti, виртуальные функциию, наследования и т.д.).
С++ позволил написать драйверы на периферию (таймеры, spi, i2c, uart). И при переходе с платформы на платформу минимизировать изменения, а то и избежать их. Естественно не обошлось без использования STL (в основном контейнеры), но не использовать методы с exception.
Но вся низкоуровненвая часть на Сях.
Но разве до или параллельно Ассемблеру не было попыток создать язык для ЭВМ ?
Не долгий поиск привел меня к источнику в котором упоминается БОЛЕЕ ДРЕВНИЙ чем на картинке язык. Ни разу не читал первоисточников об этом языке, так что особо верить в данную информацию не рекомендую.
Официально первый язык программирования для компьютеров является « Plankalkül » (Планкалкюль) созданный немецким инженером Конрадом Цузе в период с 1943 по 1945. По другой информации, в 1948 году.
Первые же наброски, датированы 1941 годом. Данные об этом языке были опубликованы лишь в 1972 году, а первый компилятор для него был реализован в 1975 г. в диссертации Иокима Хоманна. Другие независимые реализации были в 1998 году, а затем в 2000 году Свободным университетом Берлина.
С середины 50-х г. XX в. начали создавать первые языки программирования высокого уровня (high-level programming languages). Эти языки не были привязаны к определенному типу ЭВМ (машинонезависимы). Для каждого из них были разработаны собственные компиляторы.
Первый язык высокого уровня Фортран был создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса в корпорации IBM. Фортран в СССР появился позже, чем на Западе, поскольку поначалу в СССР более перспективным языком считался Алгол. Во внедрении Фортрана большую роль сыграло общение советских физиков со своими коллегами из CERN, где в 1960-х годах почти все расчёты велись с использованием программ на Фортране.
Именно на Фортране я писал свои первые программы используя Перфокарты и специальные устройства для продырявливания перфокарт - Перфораторы .
Разумеется сейчас при слове Перфоратор первое что придет в голову это дрель с ударным механизмом, а раньше о такой дрели даже не мечтали, а перфораторы для перфокарт были.
Здравствуйте! В этой статье я расскажу какие шаги нужно пройти для создания простого процессора и окружения для него.
Для начала нужно определиться с тем, каким будет процессор. Важны такие параметры как:
- Размер машинного слова и регистров(разрядность/"битность" процессора)
- Машинные команды (инструкции) и их размер
Архитектуры процессоров можно разделить по размеру инструкций на 2 вида (на самом деле их больше, но другие варианты менее популярны):
Основное их отличие в том, что RISC процессоры имеют одинаковый размер инструкций. Их инструкции простые и выполняются сравнительно быстро, тогда как CISC процессоры могут иметь разный размер инструкций, некоторые из которых могут выполняться достаточно продолжительное время.
Я решил сделать RISC процессор во многом похожий на MIPS.
Я это сделал по целому ряду причин:
- Довольно просто создать прототип такого процессора.
- Вся сложность такого вида процессоров перекладывается на такие программы как ассемблер и/или компилятор.
Вот основные характеристики моего процессора:
- Машинное слово и размер регистров — 32 бита
- 64 регистра (включая счетчик команд)
- 2 типа инструкций
Register type(досл. Регистровый тип) выглядит вот так:
Особенность таких инструкций заключается в том, что они оперируют с тремя регистрами.
Immediate type(досл. Немедленный тип):
Инструкции этого типа оперируют с двумя регистрами и числом.
OP — это номер инструкции, которую нужно выполнить (или же для указания, что эта инструкция Register type).
R0, R1, R2 — это номера регистров, которые служат операндами для инструкции.
Func — это дополнительное поле, которое служит для указания вида Register type инструкций.
Imm — это поле куда записывается то значение, которое мы хотим явно предоставить инструкции в качестве операнда.
Полный список инструкций можно посмотреть в github репозитории.
Вот лишь пару из них:
NOR это Register type инструкция, которая делает логическое ИЛИ НЕ на регистрах r1 и r2, после записывает результат в регистр r0.
Для того, чтобы использовать эту инструкцию нужно изменить поле OP на 0000 и поле Func на 0000000111 в двоичной системе счисления.
LW это Immediate type инструкция, которая загружает значение памяти по адресу r1 + n в регистр r0.
Для того, чтобы использовать эту инструкцию в свою очередь нужно изменить поле OP на 0111, а в поле IMM записать число n.
После создания ISA можно приступить к написанию процессора.
Для этого нам нужно знание какого нибудь языка описания оборудования. Вот некоторые из них:
- Verilog
- VHDL (не путать с предыдущим!)
Я выбрал Verilog, т.к. программирование на нем было частью моего учебного курса в университете.
Для написания процессора нужно понимать логику его работы:
- Получение инструкции по адресу Счетчика команд (PC) инструкции
- Выполнение инструкции
- Прибавление к Cчетчику команды размера выполненной инструкции
И так до бесконечности.
Получается нужно создать несколько модулей:
Разберем по отдельности каждый модуль.
Визуальные языки
В отличие от классических языков программирования, визуальные языки позволяют разрабатывать программы в виде изображений. Среди таких языков можно выделить FlowCODE или Scratah. Достоинством визуальных языков является хорошо воспринимаемая структура алгоритма. Это позволяет просто разобраться в его функционировании любому человеку, знающему основные символы языка. Перевод структурных схем в команды микроконтроллера, как правило, выполняется не сразу. Вначале алгоритм транслируется в команды ассемблера или какого-либо языка высокого уровня. Только затем, все преобразуется в машинный код. Такая схема, несмотря на свою сложность, позволяет использовать наиболее удобные компиляторы разных разработчиков.
Еще одним достоинством визуального программирования становится простота изучения, поэтому подобные языки часто используются для обучения детей. Недостатком визуального подхода является громоздкость исходных материалов. Тем не менее, подобные языки программирования нашли очень большое распространение для решения специальных задач.
Ассемблер
Язык программирования С/С++, относится к языкам более высокого уровня, по сравнению с Ассемблером. Программа на этом языке лучше понятна человеку. Достоинством С/С++ является огромное число программных средств и библиотек, позволяющих просто создавать необходимый код. Фактически, С/С++ сегодня стал основным языком разработки управляющих программ. Компиляторы данного языка реализованы практически для всех моделей микроконтроллеров. Стандартный язык дает возможность переноса программ с одной платформы на другую. Теоретически, используя разные компиляторы, можно преобразовать любую программу в команды микроконтроллера нужного типа. На практике дополнительно требуется учитывать архитектуру микроконтроллера каждого типа.
Язык С/С++ имеет достаточно сложную для изучения структуру. Получаемый программный код конкретной задачи, имеет больший объем, чем код той же задачи, реализованной на Ассемблере. Тем не менее язык С/С++ следует признать единственным правильным выбором для профессионального программирования микроконтроллеров.
Pascal
Язык Pascal еще более удобен для восприятия и изучения. Тем не менее, он не имеет такого распространения как C/C++, особенно при программировании микроконтроллеров. Некоторые отдельные фирмы поддерживают данный язык, с целью упрощения перехода на контроллеры с больших ПК. В частности вариант языка под названием MicroPASCAL входит в состав поставки отладочных средств фирмы Mikroelektronika.
BASIC
Старинный язык первоначального обучения программированию, в настоящее время в основном сохранился в виде реализации Visual BASIC от Microsoft. Используется он и для программирования микроконтроллеров. Реализаций этого языка гораздо больше, чем того же Pascal. Связано это в первую очередь с простотой языка. BASIC часто выбирают разработчики программно-аппаратных платформ, нацеленных на упрощенную разработку электронных устройств. Можно назвать такие проекты, как PICAXE, Amicus18, microBASIC и некоторые другие. Недостатком BASIC является плохая структурированность кода. Этот язык не стоит выбирать для первоначального изучения с целью дальнейшего перехода на С/С++. Программирование микроконтроллеров на BASIC можно рекомендовать любителям, не нацеленным на создание, в основном, простых устройств.
Декодер
Декодер это тот блок, который отвечает за декодирование инструкций. Он указывает какие операции нужно выполнить АЛУ и другим блокам.
Например, инструкция addi должна сложить значение регистра $zero(Он всегда хранит 0) и 20 и положить результат в регистр $t0.
На этом этапе декодер определяет, что эта инструкция:
- Immediate type
- Должна записать результат в регистр
И передает эти сведения следующим блокам.
После управление переходит в АЛУ. В нем обычно выполняются все математические, логические операции, а также операции сравнения чисел.
То есть, если рассмотреть ту же инструкцию addi, то на этом этапе происходит сложение 0 и 20.
Заключение
Выбор того или иного языка программирования зависит от множества факторов. В первую очередь необходимо определиться с типом решаемых задач и необходимым качеством кода. Если не требуется разработка объемных и сложных программ, то можно использовать практически любой язык. Для обеспечения компактности кода подойдет Ассемблер, а если ставятся серьезные задачи, то альтернативы С/С++ практически нет. Также необходимо учитывать доступность компилятора. В некоторых случаях, реализация языка может вообще отсутствовать, или предлагаться за солидные деньги. В итоге самым универсальным решением можно назвать связку Ассемблера и C/C++.
Микро-ЭВМ – главный шаг массового применения компьютерной автоматизации в области управления. Так как в автоматизации основная задача контроль и регулирование параметров, то термин «контроллер» закрепился и в этой среде.
После перестройки начался активный импорт вычислительной техники, и название «однокристальная микро-ЭВМ» была вытеснена словом «Микроконтроллер» (подробнее о том, чем микроконтроллер отличается от микропроцессора смотрите здесь - Назначение и устройство микроконтроллеров ).
В 2020 году, и последние десятилетие наиболее распространены следующие виды микроконтроллеров:
В Советском союзе техника не стояла на месте. Ученные не только копировали наиболее удачные и интересные зарубежные разработки, но и занимались разработкой уникальных проектов. Таким образом к 1979 году в НИИ ТТ была разработана К1801ВЕ1, эта микроархитектура называлась «Электроника НЦ» и имела 16 разрядов.
Различия микроконтроллеров
Микроконтроллеры можно разделить по таким критериям:
- Разрядность;
- Система команд;
- Архитектура памяти.
Разрядность – это длина одного слова обрабатываемого контроллером или процессором, чем она больше, тем быстрее микроконтроллер может обработать большие массивы данных, но такой подход не всегда справедлив, для каждой задачи выдвигаются индивидуальные требования, как по скорости, так и по способу обработку, например, применение 32-х разрядного ARM микропроцессор для работы в простых устройствах, оперирующих с 8 битным словами может быть не обосновано как по удобству написания программы и обработки информации, так и по себе стоимость.
Однако, по статистике на 2017 год, стоимость таких контроллеров активно снижается, и, если так будет продолжаться и далее – он будет дешевле простейших PIC контроллеров, при наличии гораздо большем наборе функций. Не понятно только одно – это маркетинговый ход и занижение цены, или реальный технологический прогресс.
Деление происходит на:
Деление по типу системы команд:
- RISC-архитектура , или сокращенная система команд. Ориентирована на быстрое выполнение базовых команд за 1, реже 2 машинных цикла, а также имеет большое количество универсальных регистров, и более длинный способ доступа к постоянной памяти. Архитектурна характерна для систем под управление UNIX;
- СISC-архитектура , или полная система команд, характерна прямая работа с памятью, большее число команд, малое число регистров (ориентирована на работу с памятью), длительность команд от 1 до 4 машинных циклов. Пример – процессоры Intel.
Деление по типу памяти:
- Архитектура Фон-Неймана – основная черта общая область памяти для команд и данных, при работе с такой архитектурой в результате ошибки программиста данные могут записаться в область памяти программ и дальнейшее выполнение программы станет невозможным. Пересылка данных и выборка команды не может осуществляться одновременно по тем же причинам. Разработана в 1945 году.
- Гарвардская архитектура – раздельная память данных и память программ, использовалась в первые на компьютерах семейства Mark. Разработана в 1944 году.
В результате внедрения микропроцессорных систем размеры устройств снизились, а функционал увеличился. Выбор архитектуры, разрядности, системы команд, структуры памяти – влияет на конечную стоимость устройства, поскольку при единичном производстве разница в цене может быть не значительно, но при тиражировании – более чем ощутимой.
Пошаговое обучение программированию и созданию устройств на микроконтроллерах AVR
У электронщиков, специализирующихся на проектировании микроконтроллерных устройств, существует термин "быстрый старт". Относится он к случаю, когда надо в короткий срок опробовать микроконтроллер и заставить его выполнять простейшие задачи.
Цель состоит в том, чтобы, не углубляясь в подробности, освоить технологию программирования и быстро получить конкретный результат. Полное представление, навыки и умения появятся позже в процессе работы.
Освоить работу с микроконтроллерами в режиме "быстрый старт", научиться их программировать и создавать различные полезные умные электронные устройства можно легко с помощью обучающих видеокурсов Максима Селиванова в которых все основные моменты разложены по полочкам.
Методика быстрого изучения принципов работы с микроконтроллерами основывается на том, что достаточно освоить базовую микросхему, чтобы затем достаточно уверенно составлять программы к другим ее разновидностям. Благодаря этому первые опыты по программировании микроконтроллеров проходят без особых затруднений. Получив базовае знания можно приступать к разработке собственных конструкций.
На данный момент у Максима Селиванова есть 4 курса по созданию устройств на микроконтроллерах, построенные по принципу от простого к сложному.
Курс для тех, кто уже знаком с основами электроники и программирования, кто знает базовые электронные компоненты, собирает простые схемы, умеет держать паяльник и желает перейти на качественно новый уровень, но постоянно откладывает этот переход из-за сложностей в освоении нового материала.
Курс замечательно подойдет и тем, кто только недавно предпринял первые попытки изучить программирование микроконтроллеров, но уже готов все бросить от того, что у него ничего не работает или работает, но не так как ему нужно (знакомо?!).
Курс будет полезен и тем, кто уже собирает простенькие (а может и не очень) схемы на микроконтроллерах, но плохо понимает суть того как микроконтроллер работает и как взаимодействует с внешними устройствами.
Курс посвящен обучению программирования микроконтроллеров на языке Си. Отличительная особенность курса - изучение языка на очень глубоком уровне. Обучение происходит на примере микроконтроллеров AVR. Но, в принципе, подойдет и для тех, кто использует другие микроконтроллеры.
Курс рассчитан на подготовленного слушателя. То есть, в курсе не рассматриваются базовые основы информатики и электроники и микроконтроллеров. Но, что бы освоить курс понадобятся минимальные знания по программированию микроконтроллеров AVR на любом языке. Знания электроники желательны, но не обязательны.
Курс идеально подойдет тем, кто только начал изучать программирование AVR микроконтроллеров на языке С и хочет углубить свои знания. Хорошо подойдет и тем, кто немного умеет программировать микроконтроллеры на других языках. И еще подойдет обычным программистам, которые хотят углубить знания в языке Си.
Этот курс для тех, кто не хочет ограничиваться в своем развитии простыми или готовыми примерами. Курс отлично подойдет тем, кому важно создание интересных устройств с полным пониманием того, как они работают. Курс хорошо подойдет и тем, кто уже знаком с программированием микроконтроллеров на языке Си и тем, кто уже давно программирует их.
Материал курса прежде всего ориентирован на практику использования. Рассматриваются следующие темы: радиочастотная идентификация, воспроизведение звука, беспроводной обмен данными, работа с цветными TFT дисплеями, сенсорным экраном, работа с файловой системой FAT SD-карты.
Дисплеи NEXTION представляют собой программируемые дисплеи с тачскрином и UART для создания самых разных интерфейсов на экране. Для программирования используется очень удобная и простая среда разработки, которая позволяет создавать даже очень сложные интерфейсы для различной электроники буквально за пару вечеров! А все команды передаются через интерфейс UART на микроконтроллер или компьютер. Материал курса составлен по принципу от простого к сложному.
Этот курс рассчитан на тех, кто хотя бы немного имеет опыта в программировании микроконтроллеров или arduino. Курс отлично подойдет и для тех, кто уже пытался изучать дисплеи Nextion. Из курса вы узнаете много новой информации, даже если думаете, что хорошо изучили дисплей!
Сразу ответ про название - Почему "для себя любимого". Так я написал честно о статье которая родилась под впечатлением поиска информации об истоках языков программирования история которых шла буквально параллельно со мной.
Чуть ниже я приведу картинку с отметкой языков программирования которые я освоил в своей практике и могу изобразить простой код управления РЛС или написать Тетрис с Арканоидом.
Итак, задавшись вопросом знания о котром у меня не было в давние времена, я решил провести следствие по телу . делу.
Неужели сразу после машинных кодов на которых работали станки с ЧПУ и программные комплексы управления (всякой ТВН и ТГН техникой) был тот самый Ассемблер о котором все "задвинутые программеры(исты)" так любят вспоминать?
Ассемблер — язык программирования низкого уровня. Язык программирования низкого уровня — язык программирования, который ориентирован на конкретный тип процессора и учитывает его особенности. В данном случае «низкий уровень» не значит «плохой». Имеется в виду, что операторы языка близки к машинному коду и ориентированы на конкретные команды процессора.
Физические принципы работы электронных устройств ЭВМ таковы, что компьютер может воспринимать команды, состоящие только из единиц и нулей — последовательность перепада напряжения, то есть машинный код. На начальной стадии развития ЭВМ человеку было необходимо составлять программы на языке, понятном компьютеру, в машинных кодах. Составлять программы для ЭВМ приходилось учитывая структуру конкретной машины, что конечно не способствовало прогрессу и унификации.
Понятно что процесс формирования машинного кода можно автоматизировать.
Уже в 1950 году для записи программ начали применять мнемонический язык — язык assembly. Язык ассемблера позволил представить машинный код в более удобной для человека форме: для обозначения команд и объектов, над которыми эти команды выполняются, вместо двоичных кодов использовались буквы или сокращенные слова.
Регистровый файл
Регистровый файл предоставляет доступ к регистрам. С его помощью нужно получать значения каких то регистров, или изменять их.
В моем случае у меня 64 регистра. В один из регистров записывается результат операции над двумя другими, так что мне нужно предоставить возможность изменять только один, а получать значения из двух других.
Читайте также: