Язык программирования — Программирование микроконтроллеров


Содержание

Языки программирования микроконтроллеров

Что нужно для того, чтобы стать профессиональным разработчиком программ для микроконтроллеров и выйти на такой уровень мастерства, который позволит с лёгкостью найти и устроиться на работу с высокой зарплатой (средняя зарплата программиста микроконтроллеров по России на начало 2020 года составляет 80 000 рублей). Подробнее.

Был период, когда я вообще ничего не знал о микроконтроллерах.

Был период, когда я думал, что программы для микроконтроллеров создаются точно также, как и для компьютеров.

Был период, когда я думал, что программировать микроконтроллеры можно только на ассемблере.

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

Поэтому я решил рассказать о том, какие языки программирования микроконтроллеров существуют.

Итак, вот список (не полный) языков программирования микроконтроллеров:

Однако наиболее распространённые языки — это Ассемблер и С. Вот о них мы немного и поговорим.

Как вы понимаете, языки бывают низкого уровня, и высокого уровня. В нашем случае язык низкого уровня — это ассемблер, а высокого — язык С.

В чём их преимущества и недостатки?

Совместимость и переносимость кода

У каждого микроконтроллера свой набор команд и свой язык ассемблера. Это проблема. Потому что:

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

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

Быстродействие

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

Правда, современные микроконтроллеры довольно быстрые, поэтому это преимущество не всегда имеет значение.

Время на разработку

Здесь ассемблер снова проигрывает. Потому что создавать программы на языке высокого уровня намного быстрее и проще.

Средства разработки

Почти все современные средства разработки поддерживают языки ассемблера и С. Но вот такие языки как Бэйсик или Паскаль обычно в стандартных средствах разработки отсутствуют. Поэтому, если вы хотите создавать программы именно на этих языках, то вам придётся воспользоваться инструментами сторонних разработчиков. Разумеется, без каких-либо гарантий, что они правильно будут транслировать исходники в машинные коды.

Профессионалы и любители

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

Если же вы любитель (или начинающий), то вы, скорее всего, экспериментируете с одной-двумя моделями микроконтроллеров, и время для вас не имеет значения. Поэтому любителям достаточно изучить один язык ассемблера и набор команд для одного вида микроконтроллеров.

Обучение и понимание работы программы

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

И, несмотря на то, что ассемблер более сложный язык, чем С, а тем более Паскаль или Бэйсик, начинать я советую именно с ассемблера.

Язык программирования — Программирование микроконтроллеров

Дельта принтеры крайне требовательны к точности изготовления комплектующих (геометрия рамы, длины диагоналей, люфтам соединения диагоналей, эффектора и кареток) и всей геометрии принтера. Так же, если концевые выключатели (EndStop) расположены на разной высоте (или разный момент срабатывания в случае контактных концевиков), то высота по каждой из осей оказывается разная и мы получаем наклонную плоскость не совпадающая с плоскостью рабочего столика(стекла). Данные неточности могут быть исправлены либо механически (путем регулировки концевых выключателей по высоте), либо программно. Мы используем программный способ калибровки.
Далее будут рассмотрены основные настройки дельта принтера.
Для управления и настройки принтера мы используем программу Pronterface.
Калибровка принтера делится на три этапа:

1 Этап. Корректируем плоскость по трем точкам

Выставление в одну плоскость трех точек — A, B, C (расположенных рядом с тремя направляющими). По сути необходимо уточнить высоту от плоскости до концевых выключателей для каждой из осей.
Большинство (если не все) платы для управления трехмерным принтером (В нашем случае RAMPS 1.4) работают в декартовой системе координат, другими словами есть привод на оси: X, Y, Z.
В дельта принтере необходимо перейти от декартовых координат к полярным. Поэтому условимся, что подключенные к двигателям X, Y, Z соответствует осям A, B, C.(Против часовой стрелки начиная с любого двигателя, в нашем случае смотря на логотип слева — X-A, справа Y-B, дальний Z-C) Далее при слайсинге, печати и управлении принтером в ручном режиме, мы будем оперировать классической декартовой системой координат, электроника принтера сама будет пересчитывать данные в нужную ей систему. Это условность нам необходима для понятия принципа работы и непосредственной калибровки принтера.

Точки, по которым мы будем производить калибровку назовем аналогично (A, B, C) и позиция этих точек равна A= X-52 Y-30; B= X+52 Y-30; C= X0 Y60.

Алгоритм настройки:

    Подключаемся к принтеру. (В случае “крагозяб” в командной строке, необходимо сменить скорость COM порта. В нашем случае с 115200 на 250000 и переподключится)

После чего мы увидим все настройки принтера.

  • Обнуляем высоты осей X, Y, Z командой M666 x0 y0 z0.
    И сохраняем изменения командой M500. После каждого изменения настроек необходимо нажать home (или команда g28), для того что бы принтер знал откуда брать отсчет.
  • Калибровка принтера производится “на горячую”, то есть должен быть включен подогрев стола (если имеется) и нагрев печатающей головки (HotEnd’а) (Стол 60град., сопло 185 град.) Так же нам понадобится щуп, желательно металлический, известных размеров. Для этих задач вполне подойдет шестигранный ключ (самый большой, в нашем случае 8мм, он предоставляется в комплекте с принтерами Prizm Pro и Prizm Mini)
  • Опускаем печатающую головку на высоту (условно) 9мм (от стола, так, что бы сопло еле касалось нашего щупа, т.к. высота пока что не точно выставлена.) Команда: G1 Z9.
  • Теперь приступаем непосредственно к настройке наших трех точек.
    Для удобства можно вместо g- команд создать в Pronterface четыре кнопки, для перемещения печатающей головки в точки A, B, C, 0-ноль.
  • Последовательно перемещаясь между тремя точками (созданными ранее кнопками или командами) выясняем какая из них находится ниже всего (визуально) и принимает эту ось за нулевую, относительно нее мы будем менять высоту остальных двух точек.
  • Предположим, что точка A у нас ниже остальных. Перемещаем головку в точку B(Y) и клавишами управления высотой в Pronterface опускаем сопло до касания с нашим щупом, считая величину, на которую мы опустили сопло (в лоб считаем количество нажатий на кнопки +1 и +0.1)
    Далее командой меняем параметры высоты оси Y: M666 Y <посчитанная величина>
    M666 Y0.75
    M500
    G28
  • Ту же операцию проделываем с оставшимися осями. После чего следует опять проверить высоту всех точек, может получится, что разброс высот после первой калибровки уменьшится, но высота все равно будет отличатся, при этом самая низкая точка может изменится. В этом случае повторяем пункты 6-7.
  • 2 Этап. Исправляем линзу

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

    Корректируется этот параметр т.н. дельта радиусом, который подбирается экспериментально.

    Калибровка:

    1. Отправляем головку на высоту щупа в любую из трех точек стола. Например G1 Z9 X-52 Y-30
    2. Сравниваем высоту центральной точки и высоту точек A,B,C. (Если высота точек A, B, C разная, необходимо вернутся к предыдущей калибровки.)
    3. Если высота центральной точки больше остальных, то линза выпуклая и необходимо увеличить значение дельта радиуса. Увеличивать или уменьшать желательно с шагом +-0,2мм, при необходимости уменьшить или увеличить шаг в зависимости от характера и величины искривления (подбирается экспериментально)
    4. Команды:
      G666 R67,7
      M500
      G28
    5. Подгоняем дельта радиус пока наша плоскость не выровняется
    3 Этап. Находим истинную высоту от сопла до столика

    Третьим этапом мы подгоняем высоту печати (от сопла до нижней плоскости — столика) Так как мы считали, что общая высота заведомо не правильная, необходимо ее откорректировать, после всех настроек высот осей. Можно пойти двумя путями решения данной проблемы:
    1 Способ:
    Подогнав вручную наше сопло под щуп, так что бы оно свободно под ним проходило, но при этом не было ощутимого люфта,

    • Командой M114 выводим на экран значение фактической высоты нашего HotEnd’а
    • Командой M666 L получаем полное значение высоты (Параметр H)
    • После чего вычитаем из полной высоты фактическую высоту.
    • Получившееся значение вычитаем из высоты щупа.

    Таким образом мы получаем величину недохода сопла до нижней плоскости, которое необходимо прибавить к полному значению высоты и и записать в память принтера командами:
    G666 H 235.2
    M500
    G28

    2 Способ:
    Второй способ прост как валенок. С “потолка”, “на глаз” прибавляем значение высоты (после каждого изменение не забываем “уходить” в home), добиваясь необходимого значения высоты, но есть шанс переборщить со значениями и ваше сопло с хрустом шмякнется об стекло.

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

    Вы можете помочь и перевести немного средств на развитие сайта

    AVR. Языки программирования.

    Доброго времени суток!

    Сегодня, хотелось бы поговорить на тему выбора языка программирования микроконтроллера AVR . Данная статья имеет исключительно предвзятый характер, и не является истиной в последней инстанции, ведь выбор языка программирования личное дело каждого. Поэтому отнеситесь к данной статье как к просто личному мнению автора блога.

    На момент написания статьи, языков программирования микроконтроллеров AVR существует большое количество. Здесь Вам и стандартные ASM / C так и нестандартные решения вплоть до графического языка программирования. Рассмотреть и потрогать их все я не могу, поэтому расскажу лишь о тех из них, с которыми имел опыт работы:

    Самый простой язык программирования из всех в данной статье. Данный язык основан на языках программирования C/C++. Вы, наверное, посчитаете его отличным началом для новичков, однако эта палка о двух концах. Рассмотрим его плюсы :

    1. Скорость разработки (Наверное, самая высокая среди языков представленных в данной статье).
    2. Простота освоения (Самый простой среди представленных в статье).
    3. Достаточно дружелюбная среда разработки (Субъективное мнение автора).

    Теперь о минусах :

    1. Низкая оптимизация кода (В сравнении с другими языками, представленными в данной статье).
    2. Большинство действий микроконтроллера скрывается от программиста, что пагубно сказывается на его квалификации (Лучше один раз увидеть, чем сто раз услышать).
    3. Подходит лишь для платформ Arduino .

    В итоге, хотелось бы сказать, что язык Arduino имеет полное право на существование. Он может пригодиться Вам и в самом начале вашего пути освоения микроконтроллеров (побалуйтесь и идите дальше), и при необходимости быстрого прототипирования какого либо устройства.

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

    Огромным плюсом данного языка является “мультиплатформенность“, так как его синтаксис почти не зависит ни от среды разработки, ни от модели программируемого микроконтроллера. Зачастую знания языка C достаточно для выполнения большинства задач на микроконтроллерах. Однако, бывают моменты когда одного C недостаточно, и здесь нам на помощь приходит следующий язык…

    Самый “низкий” язык программирования микроконтроллера. Его синтаксис представляет набор инструкций контроллера. То есть, данный язык дает наиболее полное представление о принципах работы микроконтроллера. Рассмотрим его положительные черты :

    1. Отличная оптимизация кода (При достаточной квалификации программиста) как по размеру, так и по быстродействию.
    2. Широкие возможности (Часто при помощи Ассемблера можно сделать то, что невозможно на других языках программирования).
    3. Понимание принципов работы микроконтроллера (Знание Ассемблера значительно ускорит процесс вашего обучения)

    Однако данный язык обладает рядом недостатков:

    1. Ассемблер сложен в изучении и понимании.
    2. При недостаточной квалификации программиста, код написанный на Ассемблере уступит по быстродействию и размеру прошивкам написанным на других языках.
    3. Низкая скорость разработки кода .

    Ассемблер — мощное оружие в руках программиста. Эффективность его применения зависит лишь от Вашего умения обращаться с ним.

    Каждый язык программирования имеет свои сильные и слабые стороны. Зная достоинства и недостатки каждого инструмента, профессионал выберет именно тот, который наиболее удовлетворит требования поставленной задачи. Очень часто, применение нескольких языков “одновременно” поможет сэкономить такты микроконтроллера и его память. К примеру, отлично зарекомендовала себя связка языков C и ASM .

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

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

    Продолжить обсуждение предлагаю в комментариях)

    Спасибо за внимание!

    Похожие статьи

    AVR. Языки программирования. : 3 комментария

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

    Цукерберг рекомендует:  Слайдер для прокрутки контента справа-налево

    Добрый день(Вечер,ночь,утро), Иван!
    Спасибо за ваше замечание, добавил.
    Однако, официальный сайт Arduino, дает следующее определение:
    «The Arduino language is based on C/C++. It links against AVR Libc and allows the use of any of its functions; see its user manual for details.»

    Что означает, что Ардуино это все таки язык, основанный на C/C++.

    Приветствую!
    Вот, другое дело)

    Добавить комментарий Отменить ответ

    Нам нужен именно ты!

    Хочешь поучаствовать в жизни сайта?Написать свою статью, из личного опыта?Или у тебя есть свой сайт и ты хочешь сотрудничать?

    Пиши об этом в комментариях к статьям, или в группе ВКонтакте!

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

    Все языки программирования делятся на несколько групп, в зависимости от «профессиональной ориентации»:

    1. Прикладные языки программирования (FORTRAN для математиков, FoxPro для финансовых работников);
    2. Универсальные (Pascal и Basic);
    3. Системные (Ассемблер и Си).

    Системные языки стали называть низкоуровневыми, т.е., программист работает на нижнем, наиболее приближенном к процессору, уровне. А языки, при работе с которыми программист не сталкивается с непосредственным управлением работой процессора, стали называть языками высокого уровня. Каждая группа имеет свои достоинства и недостатки. Так, например, программы, написанные на Ассемблере, очень быстро выполняются процессором. Дело в том, что Ассемблер — это практически машинная команда. Но у ассемблера есть и минусы: основной минус – сложность написания программ, второй — даже относительно несложные программы имеют большой объем исходного текста, что затрудняет анализ программы.

    В настоящее время одними из наиболее часто используемых являются микроконтроллеры фирм Atmel и Microchip. Для программирования этих микроконтроллеров создано множество сред разработки. Далее приведены наиболее популярные из них.

    Программная среда «AVR Studio»— это мощный современный программный продукт, позволяющий производить все этапы разработки программ для любых микроконтроллеров серии AVR. Пакет включает в себя специализированный текстовый редактор для написания программ, мощный программный отладчик.

    Кроме того, «AVR Studio» позволяет управлять целым рядом подключаемых к компьютеру внешних устройств, позволяющих выполнять аппаратную отладку, а также программирование («прошивку») микросхем AVR.

    Программная среда «AVR Studio» работает не просто с программами, а с проектами. Для каждого проекта должен быть отведен свой отдельный каталог на жестком диске. В AVR Studio одновременно может быть загружен только один проект.

    При загрузке нового проекта предыдущий проект автоматически выгружается. Проект содержит всю информацию о разрабатываемой программе и применяемом микроконтроллере. Он состоит из целого набора файлов.

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

    Кроме файла aps, проект должен содержать хотя бы один файл с текстом программы. Такой файл имеет расширение asm. Недостаточно просто поместить файл asm в директорию проекта. Его нужно еще включить в проект. Проект может содержать несколько файлов asm. При этом один из них является главным. Остальные могут вызываться из главного при помощи оператора include. На этом заканчивается список файлов проекта, которые создаются при участии программиста.

    Algorithm Builder предназначен для производства полного цикла разработки, начиная от ввода алгоритма, включая процесс отладки и заканчивая программированием кристалла.

    Algorithm Builder довольно нетрадиционная программа в плане языка программирования: ассемблер, завернутый в красивую обертку визуального программирования. Algorithm Builder — визуальный ассемблер, или построитель ассемблера, с помощью которого на выходе можно получить максимально эффективный код.

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

    Algorithm Builder имеет удобный настройщик периферии (таймеры, UART, ADC, SPI и т.д.), позволяющий просто выбрать необходимые параметры работы устройства в окне настройки. В этом же окне Builder покажет набор инструкций, обеспечивающих эти параметры.

    Переходы осуществляются в программе очень наглядно — вектором. Если требуется перейти по условию в какую-либо точку программы, нужно просто провести вектор в эту точку. Это освобождает программу от бесчисленных имен меток, которые в классическом ассемблере являются неизбежным балластом. Переходы по именованным меткам также возможны. Algorithm Builder обеспечивает мониторную отладку на кристалле (On Chip debug), которая позволяет наблюдать содержимое реального кристалла в заданной точке останова. При этом для связи микроконтроллера с компьютером используется только один вывод, причем по выбору пользователя. Мониторная отладка может быть применена к любому типу кристалла, имеющего SRAM.

    WinAVR представляет собой набор инструментальных средств для работы с микроконтроллерами семейства AVR фирмы ATMEL. В него вошли следующие компоненты:

    a) компилятор языка C avr-gcc,

    b) библиотека компилятора avr-libs,

    c) ассемблер avr-as,

    d) интерфейс программатора avrdude,

    e) интерфейс JTAG ICE avarice,

    f) Debugger avr-gdb,

    g) редактор programmers notepad.

    Весь этот набор собран в один инсталляционный пакет и предназначен для установки на платформу Windows.

    CCS PCWHD (PIC C Compiler) – компилятор языка С. Современная интегрированная (визуальная) среда разработки программного обеспечения Windows IDE включает в себя текстовый редактор, компилятор и интерпретатор, средства автоматизации сборки и отладчик. Возможность работы как автономно, так и в интеграции с MPLAB IDE (интегрированная среда разработки фирмы MICROCHIP) делают его незаменимым при разработке программ для PIC микроконтроллеров. Поддерживает микроконтроллеры фирмы MICROCHIP PIC10/12/16/18/24 и dsPIC30/33 серий.

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

    Не нашли то, что искали? Воспользуйтесь поиском:

    Лучшие изречения: Да какие ж вы математики, если запаролиться нормально не можете. 8435 — | 7334 — или читать все.

    188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

    Отключите adBlock!
    и обновите страницу (F5)

    очень нужно

    Изучение С для программирования микроконтроллеров?

    Внимание: Всё что пишу, пишу про голое железо или простые RTOS (стм32 и тд)

    Это программирование делится на три части:
    1. Это железо! С железом проблем нет, читаем мануал, используем рекомендуемую производителем железа библиотеку по работе с железом получаем гарантированный результат. Трудно будет только по началу. Но это опыт наживной и относительно лёгкий.

    2. Реалтайм и инженерное мастерство и инженерный опыт: Часто проги под МК работать будут в реальном времени налету, ждать никто не будет. Дважды измеренная величина всегда будет отличаться, произойти может что угодно и в какой угодно последовательности. Клоки и тактовая плавает. Количество переданных и принятых данных всегда будет разное даже по одному и тому же уарту. Всё это должна учитывать ТВОЯ программа и не падать при любом раскладе. Как видишь программа будет иметь дело с гораздо большим количеством случайностей чем при программировании в вебе/ПК и повторяемости событий почти не будет. И надо быть чуточку инженером и знать что у всего с чем работаешь есть отклонения и шум в результатах, особенно аналоговых и АЦП.

    3. Это программирование на Си как обычном языке. Тут всё просто и понятно, мануалов море — выбирай по вкусу и цвету.

    4. ОБЩЕЕ АЛГОРИТМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ. Неважно что это железо но алгоритм оптимально но не слишком перфекционистки. Ты должен реализовать и язык тебе тут не поможет, он не связан с алгоритмом и наборов удобных библиотек гораздо меньше чем под ПК и веб.

    5. НЕ УЧИ АССЕМБЛЕР. не углубляйся в схемотехнику, достаточно будет уровня уверенного ардуинщика. Ассемблер сейчас нужен не для написания программ а вылизывания отлично сделанной проги которая уже продаётся но нужно выжать ещё 5-10% быстродействия, ТОЛЬКО ТОГДА. Всё остальное делается либо конфигами либо LD файлом линкера. Дебри схемотехники тоже не нужны, главное понимание как и почему это работает, без всяких четырёх полюсников и глубоких анализов фазовых задержек.

    Язык программирования Си в микроконтроллерах. Общие сведения, плюсы и минусы использования.

    Основой любого микроконтроллерного устройства является заложенная в него программа. Она задает алгоритм функционирования устройства, последовательность действий, связывает входы и выходы в единую систему. Что собой представляет эта программа? Это просто набор команд в машинных кодах микроконтроллера, заботливо созданный компилятором. Читать программу в таком виде нереально, а писать тем более (хотя в юности автор баловался с ручным переводом программ в маш. коды для Z-80, но это скорее от избытка времени, нежели от большого ума). Поэтому пионеры компьютерной науки разработали языки программирования и их трансляторы, самым первым из которых был ассемблер. Ассемблер – язык низкоуровневый, команды по сути обозначают те же коды процессора в более удобочитаемом виде (мнемоники). Тем не менее, он имеет все возможности для описания любых алгоритмов (если у их составителей хватит на это терпения), причем выполняться они будут максимально быстро. Но есть недостатки – долгое время разработки, отладки – попробуй, разберись в тысячах строках текста и в сотнях переходах с метки на метку. В таком случае не спасает даже структуризация кода, а со сменой платформы, приходится переписывать много кода из-за жесткой привязки к машинным кодам процессора. Чтобы исправить эти проблемы, были придуманы языки программирования высокого уровня – начиная с Фортрана, Кобола и заканчивая современными Си++, Java и т.п. Одним из них является рассматриваемый в статье Си. Си был создан для написания операционной системы Unix вначале 70-х. Получился близким к ассемблеру по быстродействию (максимально близок по быстродействию из почти всех языков), но намного удобнее в применении. Он оказался настолько удачным, что получил широкое применение и под его влиянием были созданы те же Си++/Си# и Java.

    История микроконтроллеров началась позже истории компьютеров, но пошла по тому же пути – после царствования ассемблера, появилась возможность использовать более сложные языки – Бейсик, Паскаль, Си и даже графические – FlowCode и Algorithm Builder. Все они несложны в освоении и позволяют быстро начать разработку, тут выбор остается за каждым. Но в защиту Си необходимо добавить: он стандартизирован – для всех устройств одинаков, работает на большом числе платформ; зная его можно освоить в будущем Си++ или Си# и писать утилиты для ПК (например для управления устройством с компьютера); в будущем поможет при переходе на более серьезные платформы – ARM или FPGA(близок к Verilog). А вот Бейсик для МК мало похож на его современный компьютерный вариант Visual Basic и в дальнейшем малопригоден, а при неструктурном применении еще и вреден (в чем убедился автор, переучиваясь с трудом с Бейсика на Си).

    Программисты на Си

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

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

    – электронщики (и просто радиолюбители) – люди противоположные первым, легко составляют схемы, разводят платы, но программирование для них дается нелегко. Да, ассемблер близок к аппаратной части, но писать на нем начинающим программистам не так просто, нежели на Си;

    – любители – новички во всем, те, кто со школы или университета еще помнят, что такое сопротивление и емкость, изучали на информатике Бейсик или Паскаль. Им будет тяжело во всем, и скорее всего первым их языком будет Бейсик, Паскаль, либо графический. Но если такой человек устремится к совершенствованию, то тут ему уже не обойтись без более глубоких знаний что, в конце концов, приведет к необходимости изучения Си. Кстати стоит упомянуть любителей Ардуино – программы там пишутся на Си, но система встроенных библиотек такова, что быстродействие принесено в жертву скорости разработки.

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

    Почему выбирают Си? Разберем достоинства и недостатки этого языка по отношению к ассемблеру для микроконтроллеров.

    1) Простота изучения. Освоить базу языка не составит никакого труда. Для этого достаточно понять реализацию основных составляющих алгоритма – условие, цикл, выбор (case-switch), логические и арифметические операции и можно приступать к работе.

    2) Скорость разработки. Более высокий уровень позволяет намного проще реализовывать функциональность.

    3) Лучшие возможности для составления сложных программ, которые обеспечиваются применением структурного подхода к проектированию программ. Программа разбивается на отдельные завершенные логические блоки – функции и процедуры, которые могут объединяться в библиотеки. Разработка идет «сверху в низ» от логики работы алгоритма в целом к функционированию отдельных узлов, что позволяет проводить отладку уже на ранних стадиях. Язык устроен так (и создавался для того), чтобы избежать использования оператора goto, намного облегчая чтение и отладку.

    4) Большое число готовых библиотек, примеров, статей и книг.

    5) Как было отмечено выше – язык стандартизирован (изучить придется один раз), перспективен для будущего развития разработчика.

    1) Сложность углубленного изучения. Придется много читать, смотреть форумы, покопаться в исходниках идущих в комплекте библиотек. При дальнейшем продвижении в изучении можно столкнуться с множеством трудностей, но решение их заметно расширяет возможности программиста. Например – составление универсальных библиотек с условной компиляцией, применяя которые можно менять целевой микроконтроллер или состав устройства, практически не переписывая код.

    2) Отдаленность от аппаратной части. Ассемблер требует четкого знания принципа работы микроконтроллера, времени выполнения команд, позволяет самому выбирать какие переменные оставить в регистрах, а какие разместить в ОЗУ. Си же абстрагирует от платформы. Время выполнения можно оценить, обладая только определенным опытом (просматривая в дизассемблере созданный код). А уж размещение переменных компилятор берет на себя – чаще всего в ОЗУ, используя регистры только для временных данных (если не указывать специально модификаторы register или volatile с резервируемым регистром). Получается черный ящик, который создает правильно функционирующую программу – но что в ней происходит точно, ответить будет не просто. Стоит учесть, что современные компиляторы хорошо оптимизированы и выдают хороший код. Но для серьезных разработок все равно нужно представлять, как работает МК и знать ассемблер.

    Цукерберг рекомендует:  Unity. Уровень 2. Разработка 3D-игры

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

    4) Снижение производительности. Си называют «ассемблером высокого уровня», что говорит о большой скорости выполнения программ. Но некоторое падение производительности происходит. Это зависит от эффективности компилятора, происходит при генерации прошивки с оптимизацией по размеру кода, существуют накладные расходы (например, начальное обнуление регистров и ОЗУ). Несмотря на это для большинства задач применения МК разницы между Си и ассемблером в производительности не будет сильно заметно.

    5) Накладываются ограничения связанные с простой АЛУ, малым числом ресурсов и низкой разрядностью. Необходимо аккуратно задавать типы переменных, все, что выше 1 байта – 2 и 4 байтные целые уже вычисляется в несколько циклов, а вещественные переменные и вовсе десятки циклов. Во многих МК нет аппаратного умножения, компилятор заменяет его циклическим сложением. В особо мелких МК стек аппаратный, число вложений подпрограмм ограничено. Также маловато ОЗУ. В таком случае выгоднее использовать ассемблер.

    6) Возможно непонимание кода, написанного другими программистами. Проводя оптимизацию или просто в силу наработанных привычек, они могут применять тяжело воспринимаемые инструкции. Например: копирование строк while(*dst++ = *src++);

    7) Есть вероятность появления плохо отлавливаемых ошибок: утечка памяти, обращение к элементу массива по индексу, лежащему вне его границы, неправильные операции над указателями. Это связано со слабым пониманием работы с указателями, с динамическим выделением памяти. Поэтому нужно внимательнее изучить эти темы.

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

    Для новичков автор рекомендует начать с изучения Си, параллельно почитывая об аппаратной части МК, системе команд контроллера. Более-менее освоив язык, можно будет взяться за ассемблер, знание которого поможет в оптимизации программ. Электронщикам следует поступить также. А вот профессиональным программистам будет легко сделать выбор самим.

    Язык программирования лишь инструмент в руках программиста. Поэтому опытные программисты чаще выбирают его под задачу, а начинающие все пытаются сделать на одном языке. В этом случае Ассемблер и Си можно сравнить между собой как лобзик и набор пил (от мелкой до бензопилы). Если необходимо проделать тонкую работу, особой изящности от пилы не стоит ожидать – придется ошлифовывать углы. Но если дело в постройке дома, то лобзиком тут пилить, не перепилить (вот когда дом построил, там уж можно резные оконца придумать). Большое значение имеет еще владение инструментом (есть умельцы которые и пилой узоров понаделают). Отсюда возникают советы программистам МК: изучайте асм и Си, они хорошо дополняют друг друга; совершенствуйте свои навыки, больше практикуйтесь, читайте чужой код и анализируйте, все это только в пользу.

    Белов А. В. Программирование микроконтроллеров для начинающих и не только

    Вы хотите научиться разрабатывать самостоятельно интересные устройства на микроконтроллерах? Хотите легко научиться придумывать схемы и писать программы? Тогда эта книга для вас! Новейший самоучитель позволит уверенно пройти путь от уровня, получившего меткое название «чайник», до вполне готового специалиста, умеющего самостоятельно разрабатывать готовые работоспособные микроэлектронные устройства. Процесс освоения начинается с азов цифровой техники (базовые элементы цифровой логики, теория цифрового сигнала, основы булевой алгебры, системы исчисления и т.п.). Следуя постепенно от простого к сложному, вы изучите основы микропроцессорной техники, возможности семейства микроконтроллеров на примере AVR. Ну и, наконец, вы освоите основы схемотехники и конструирования микроэлектронных устройств.

    Книга позволит изучить сразу два языка программирования для микроконтроллеров (язык Ассемблера и язык СИ). Научит транслировать, отлаживать программы, прошивать их в память микроконтроллера, правильно обращаться с инструментальными программами и разными видами программаторов.

    Глава 1. Цифровая техника — это очень просто
    1.1. Начнем с микропроцессора
    1.2. Считаем по другому
    1.3. Электронные цифры
    1.4. Логические элементы
    1.5. Простейший триггер
    1.6. Хранение информации
    1.7. Счетчики
    1.8. Дешифраторы
    1.9. Мультиплексоры

    Глава 2. как работают микропроцессоры и микроконтроллеры
    2.1. Типовая схема микропроцессорной системы
    2.2. Алгоритм работы микропроцессорной системы
    2.3. Механизм прерываний
    2.4. Прямой доступ к памяти
    2.5. Микроконтроллеры

    Глава 3. Вперед, к практике: знакомтесь — микроконтроллеры AVR
    3.1. Общие сведения
    3.2. Регистры общего назначения (Рон)
    3.3. Регистры ввода-вывода
    3.4. Память
    3.5. Счетчик команд и стековая память
    3.6. Подсистема ввода-вывода
    3.7. Система прерываний
    3.8. Таймеры-счетчики
    3.9. Другие встроенные периферийные устройства
    3.10. Другие ячейки

    Глава 4. осваиваем программы отладки и транслирования
    4.1. Программная среда AVR Studio
    4.2. Система программирования Code Vision AVR
    4.3. Программаторы


    Глава 5. Полезные устройства на микроконтроллерах своими руками
    5.1. Общие положения
    5.2. Простейшая программа
    5.3. Переключающийся светодиод
    5.4. Боремся с дребезгом контактов
    5.5. Мигающий светодиод
    5.6. Бегущие огни
    5.7. Использование таймера
    5.8. Использование прерываний по таймеру
    5.9. Формирование звука
    5.10. Музыкальная шкатулка
    5.11. Кодовый замок
    5.12. Кодовый замок с музыкальным звонком

    Глава 6. организация связи микроконтроллера и Пк через USB
    6.1. Почему сегодня выбран именно USB интерфейс?
    6.2. Принцип действия адаптера USB-FIFO
    6.3. Внутренняя структура микросхемы FT245R
    6.4. типовая схема подключения микроконтроллера к Пк
    6.5. драйверы для адаптера и принципиальная схема

    Приложение 1. Сводная таблица команд Ассемблера микроконтроллеров AVR
    Группа команд логических операций
    Группа команд арифметических операций
    Группа команд операций с разрядами
    Группа команд сравнения
    Группа команд операций сдвига
    Группа команд пересылки данных
    Группа команд управления системой
    Группа команд передачи управления (безусловная передача управления)
    Группа команд передачи управления (пропуск команды по условию)
    Группа команд передачи управления (передача управления по условию)

    Приложение 2. как работать с виртуальным диском
    Раздел «Примеры программ из книги»
    Раздел «Видеоуроки»
    Раздел «инструментальные программы»
    Раздел «Справочные материалы»

    Список литературы
    Список полезных ссылок на ресурсы интернет

    Издательство: Наука и техника
    Количество страниц: 352
    Формат: PDF
    Перевод: Русский
    Размер: 11.0 MB

    Публикации сообщества

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

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

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

    1. Возможность работы с универсальными микроконтроллерами, а не только лишь с частными специализированными контроллерами. В первую очередь нас интересует Arduino Uno как самый распространённый и доступный контроллер на сегодняшний день, во вторую – BBC Micro:bit как представитель универсальных образовательных микроконтроллеров будущего.
    2. Мгновенный отклик при создании программ. Ребенок должен иметь возможность сразу увидеть, что произойдёт, если записать логическую единицу в порт, либо выполнить какую-либо иную команду (без необходимости ждать, пока откомпилируется и загрузится программа). Особенно это важно на начальных этапах обучения. Реализована данная возможность может быть несколькими способами.
      1. Работа в интерактивном режиме с предварительной загрузкой специальной прошивки на микроконтроллер. Сама программа при этом остаётся работающей на компьютере, а прошивка лишь исполняет полученные от него команды. Данный вариант имеет множество достоинств, так как в результате нам становится доступной многозадачность, управление дополнительными игровыми персонажами (спрайтами Scratch) и т.д. Но существенным недостатком является значительное время отклика системы на изменение условий. Сигнал от датчика вначале должен добраться до компьютера, после этого компьютер определит необходимое управляющее воздействие, и лишь спустя какое-то время обратный сигнал возвратится к устройству. В данном обзоре мы будем сравнивать время реакции системы при использовании разных программных сред.
      2. Работа с микроконтроллерами, которые интерпретируют программы, написанные на языках высокого уровня. В данном случае компилировать программу не требуется, её загрузка в память контроллера происходит очень быстро, в некоторых случаях прямо в процессе создания.
      3. Поддержка программной эмуляции работы устройства. Можно посмотреть, как (предположительно) будет работать реальное устройство, исполняя написанный код, проверить всё на эмуляторе вместо того, чтобы загружать в устройство на самом деле.
    3. Программная среда должна предоставлять возможность создания программ для автономной работы контроллера, в противном случае она просто не может называться инструментом, выполняет исключительно учебно-ознакомительные функции, и непонятно, зачем её использовать, когда есть альтернативы.
    4. Должна быть предусмотрена возможность лёгкого переключения между интерактивным режимом работы и режимом создания автономных программ. Подготовить микроконтроллер к использованию должно быть просто.
    5. Желательно. Использование подключаемых расширений с дополнительными визуальными блоками, поддерживающими разнообразное периферийное оборудование сторонних производителей, а также прочие дополнительные возможности.
    6. Желательно. Возможность создания собственных графических блоков, расширяющих функциональность (с использованием текстового программирования, например), возможность включения произвольных фрагментов текстового кода в графический скрипт.
    7. Желательно. Возможность загрузки текста программы, сгенерированного из графического скрипта, внутрь редактора для дальнейшей доработки.

    Пару лет назад всем перечисленным выше требованиям соответствовала лишь одна единственная программная среда – mBlock for PC, разработка компании Makeblock, а также, с некоторой натяжкой, Snap4arduino. Менее года назад на сцене появились другие программные продукты, но они поначалу были весьма сырыми, демонстрировали недостаточную производительность и функциональность. Сегодня уже можно сказать, что у программы mBlock есть серьёзные конкуренты. Однако у каждого продукта существуют свои достоинства и недостатки.

    Итак, список рассматриваемых сегодня программных средств.

    1. mBlock v.3.4.11
    2. mBlock v.5.0.0 RC
    3. Snap4arduino v.1.2.7
    4. MindPlus v.1.2.1
    5. KittenBlock v.1.8.1
    6. MakeCode for Micro:bit (v. 1.2.13 / 4.4.7 / 2.1.1 )
    7. MicroBlocks v.0.1.27 (alpha)

    Программные среды, позволяющие работать с платой Arduino Uno в интерактивном режиме, тестировались на производительность с замером трёх показателей: скорость чтения состояния портов, скорость отправки команд на изменение состояния портов, интегральная скорость (чтение/запись). Описание процедуры и программные скрипты будут приведены далее.

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

    Программирование микроконтроллеров

    Классификация и выбор микроконтроллеров
    Организация памяти микроконтроллера
    Порты ввода-вывода
    Таймеры-счетчики
    Прерывания
    Аналого-цифровой преобразователь
    Интерфейсы связи

    Видеокурс по программированию микроконтроллеров STM32

    Микропроцессором называется программно-управляемое устройство, осуществляющее процесс обработки цифровой информации и управление им. Микропроцессор реализуется в виде большой (БИС) или сверхбольшой (СБИС) интегральной микросхемы. Микропроцессор выполняет роль процессора в цифровых системах различного назначения.

    Главной особенностью микропроцессора является возможность программирования логики работы.

    Микроконтроллер (MCU) – микросхема, предназначенная для управления электронными устройствами. Типичный микроконтроллер сочетает в себе функции процессора и периферийных устройств, может содержать ОЗУ и ПЗУ. По сути, это однокристальный компьютер, способный выполнять простые задачи. Использование одной микросхемы, вместо целого набора, как в случае обычных процессоров, применяемых в персональных компьютерах, значительно снижает размеры, энергопотребление и стоимость устройств, построенных на базе микроконтроллеров.

    Микропроцессорная система (МПС) представляет собой функционально законченное изделие, состоящее из одного или нескольких устройств, главным образом микропроцессорных: микропроцессора и/или микроконтроллера.

    Микропроцессорное устройство (МПУ) представляет собой функционально и конструктивно законченное изделие, состоящее из нескольких микросхем, в состав которых входит микропроцессор; оно предназначено для выполнения определенного набора функций: получение, обработка, передача, преобразование информации и управление.

    Основные преимущества микропроцессорных систем по сравнению с цифровыми системами на «жесткой логике».

    • Многофункциональность: большее количество функций может быть реализовано на одной элементной базе.
    • Гибкость: возможность исправления и модификации программы микропроцессора для реализации различных режимов работы системы.
    • Компактность: миниатюрные габариты микросхем и уменьшения их количества по сравнению с реализацией на «жесткой логике» позволяют уменьшить габариты устройств.
    • Повышение помехоустойчивости: меньшее количество соединительных проводников способствует повышению надежности устройств.
    • Производительность: возможность применения больших рабочих частот и более сложных алгоритмов обработки информации.
    • Защита информации: возможность защитить программу микропроцессора от считывания позволяет защитить авторские права разработчиков.

    Хотя микропроцессор является универсальным средством для цифровой обработки информации, однако отдельные области применения требуют реализации определенных специфических вариантов их структуры и архитектуры. Поэтому по функциональному признаку выделяются два класса: микропроцессоры общего назначения и специализированные микропроцессоры. Среди специализированных микропроцессоров наиболее широкое распространение получили микроконтроллеры, предназначенные для выполнения функций управления различными объектами, и цифровые сигнальные процессоры (DSP – Digital Signal Processor), которые ориентированы на реализацию процедур, обеспечивающих необходимое преобразование аналоговых сигналов, представленных в цифровой форме.

    Неполный список периферии, которая может присутствовать в микроконтроллерах, включает в себя:

    • различные интерфейсы ввода-вывода, такие как UART, I²C, SPI, CAN, USB, ETHERNET;
    • аналого-цифровые и цифро-аналоговые преобразователи;
    • компараторы;
    • широтно-импульсные модуляторы;
    • таймеры-счетчики;
    • генератор тактовой частоты;
    • контроллеры дисплеев и клавиатур;
    • массивы встроенной флэш-памяти.

    Идея размещения на одном кристалле микропроцессора и периферийных устройств принадлежит инженерам М. Кочрену и Г. Буну, сотрудникам Texas Instruments. Первым микроконтроллером был 4-х разрядный TMS1000 от Texas Instruments, который содержал ОЗУ (32 байта), ПЗУ (1 кбайт), часы и поддержку ввода-вывода. Выпущенный в 1972 году, он имел новую по тем временам возможность – добавление новых инструкций.

    В 1976 году (через 5 лет после создания первого микропроцессора) на свет появился первый микроконтроллер фирмы Intel, получивший имя 8048. Помимо центрального процессора, на кристалле находились 1 килобайт памяти программ, 64 байта памяти данных, два восьмибитных таймера, генератор часов и 27 линий портов ввода-вывода. Микроконтроллеры семейства 8048 использовались в игровых консольных приставках Magnavox Odyssey, в клавиатурах первых IBM PC и в ряде других устройств.

    На сегодняшний день среди крупных производителей микроконтроллеров следовало бы упомянуть Atmel, Microchip, ST Microelectronics, Texas Instruments, Freescale Semiconductor, NXP и др.

    Цукерберг рекомендует:  TweetGT пример использования Zend_Service_Twitter через OAuth

    Язык программирования — Программирование микроконтроллеров

    Узнайте как грамотно использовать все возможности языка Си для программирования микроконтроллеров!

    В чем главная сложность написания программ под микроконтроллеры или Arduino по сравнению с традиционным программированием для персональных компьютеров?

    Микроконтроллеры – это как промежуточное звено между программой и реальным миром. Все ошибки программы тут же становятся реальными!

    И цена ошибок возрастает многократно!

    Есть такой анекдот.

    Студент сдает экзамен по электротехнике. Отвечает прекрасно, поражает преподавателя своими знаниями, тот ставит ему «отлично», а потом спрашивает:

    — Слушайте, неужели вы действительно все так блестяще понимаете?

    — Да не все, — мнётся студент. — Есть у меня один неясный вопрос. Ведь переменный ток — он вот такой. (Студент чертит рукой в воздухе синусоиду) Так как же он по прямым проводам проходит?

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

    Что если управление осуществляется мощным полевым транзистором или другими силовыми элементами?

    Некорректная подача управляющего напряжения – компонент сгорел.

    Задержка или опоздание управляющего напряжения на несколько миллисекунд – компонент сгорел.

    Ошибка в циклограмме работы – и компонент опять сгорел.

    А если происходит управление нагрузкой в сети 220 В или исполнительным механизмом в станке?

    Вот тут уже не просто разочарование от кривой программы и сгоревшего транзистора, а реальная опасность повреждения или уничтожения имущества и даже опасность для здоровья и жизни человека!

    «Самая ужасная ситуация это когда только кажется, что ошибки нет.

    А на самом деле, ошибка глубоко запряталась в программе и ждет своего часа.»

    Вот несколько реальных примеров из жизни,

    когда ошибки программистов оборачивалась реальными и очень ощутимыми потерями

    В 1996 году при запуске ракеты-носителя Ariane 5, которая должна была вывести на орбиту несколько спутников, на 39 секунде полета произошел взрыв.

    Причиной аварии стала программная ошибка связанная с преобразованием 64-битного значения с плавающей точкой в 16 битное целое значение со знаком.

    Ошибка возникла, когда горизонтальное ускорение ракеты превысило допустимое значение. Программа попыталась напрямую записать 64-разрядное число в 16-разрядное пространство. Возникло переполнение, в результате которого отказал и основной, и резервный компьютер. Это привело к выдаче ложной команды на отклонение сопел ускорителей, а позже и основного двигателя. В результате на 39-й секунде полета ракета стала разрушаться под действием аэродинамических сил и самоуничтожилась.

    В общей сложности, ущерб от аварии составил 8,5 миллиардов долларов.

    С 1985 по 1987 год погибли 3 пациента и еще 3 остались инвалидами после процедуры с использованием медицинского аппарата лучевой терапии «Therac-25». Как выяснилось позже, произошло это из за неграмотно написанной программы, которая содержала сразу несколько серьезных ошибок и целый ряд некорректно составленных фрагментов кода.

    Во время операции «Буря в пустыне», ракеты “Пэтриот”, использовавшиеся для перехвата в воздухе иракских ракет, периодически проходили мимо цели.

    Одна из пропущенных иракских ракет привела к гибели 28 американских солдат.

    При разбирательстве выяснилось, что в программе был некорректно прописан алгоритм подсчета времени. За 100 часов работы ошибка в определении времени составляла 0,34 секунды. Этого оказалось достаточно что бы зенитно-ракетный комплекс переставал выполнять защитные функции по уничтожению вражеских ракет.

    15 января 1990 года произошло самое масштабное падение телефонной сети компании AT&T.

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

    15 января 1990, когда один из коммутатор в Нью-Йорке перезагрузился, он подал тот самый специфичный сигнал, который запустил «цепную реакцию» перезагрузок. Совсем скоро 114 соседних коммутаторов непрерывно перезагружались каждые 6 секунд, а 60 тыс. человек остались без междугородней связи на 9 часов, пока инженеры устанавливали на коммутаторы предыдущую версию прошивки.

    И это далеко не единичные случаи.

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

    Периодически случается и множество подобных инцидентов. Но, широкой общественности они почти не известны, так как ущерб не такой масштабный. Да и мало кто интересуется подробным ходом расследования и выводами следствия.

    Зарегистрируйтесь на бесплатный вебинар

    «Секреты языка Си для микроконтроллеров»!

    Что делать, что бы свести к минимуму риск появления программных ошибок?

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

    Это, конечно, не единственное условие. Кроме того нужно иметь опыт использования языка Си. Опыт невозможно приобрести, а можно только самостоятельно наработать.

    А глубокое понимание языка Си можно и нужно приобретать!

    «Программирование микроконтроллеров на языке Си»

    каждый сможет в течение месяца освоить язык Си для микроконтроллеров на фундаментальном уровне!

    Этот видеокурс специально создан для тех, кто хочет во всех тонкостях освоить язык программирования С для микроконтроллеров.

    Лучше один раз увидеть! Специальный видеокурс позволяет усвоить возможности языка С в течение одного месяца. Вам не нужно будет штудировать учебники и вникать в ход мыслей их автора. Все действия вы увидите на экране в режиме реального времени . Наглядные уроки позволят максимально быстро овладеть навыками программирования микроконтроллеров на языке С.

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

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

    Подробнее о курсе

    В чем преимущество курса перед книгами?

    Правда в том, что хороших книг по программированию микроконтроллеров на языке С вообще нет!

    Точнее есть, но исключительно на английском языке, которые можно заказать с Amazon’a по средней цене 150..200$. Это около (8000..11000 рублей)

    Из всех известных мне книг на русском ни одна книга в полной мере не раскрывает основы языка С применительно к программированию микроконтроллеров.

    Вот книги, которые позволят вам изучить язык Си на достаточно глубоком уровне.

    Но, к сожалению, изучить язык Си для программирования микроконтроллеров или Arduino по этим книгам вам вряд ли удастся, так как в книгах рассматривается программирование исключительно под ПК с операционной системой.

    Про такое важное и привычное понятие как прерывания, в этих книгах вы не найдете ни слова!

    Почти нигде не учат грамотному использованию языка Си для микроконтроллеров

    Как обычно построено обучение?

    Обычно все начинается с примеров настройки портов. Потом, изучается периферия микрокнтроллера: UART, АЦП, SPI, специальные режимы и т.д. Попутно изучаются только самые базовые и простые конструкции языка, которые позволяют показать примеры рабочего кода.

    Однако, почти везде можно выделить три похожих ситуации

    Никто не показывает и не рассказывает про использование сложных конструкций и выражений языка!

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

    А самое главное, никто не объясняет, в чем опасность применения тех или иных конструкций и выражений языка Си!

    В чем состоит преимущество этого курса?

    Благодаря фундаментальном подходу к обучению, после изучения курса, вы сможете писать очень быстрые и очень надежные программы с полным пониманием их работы.

    В курсе изучается язык Си на максимально глубоком уровне — на уровне отдельных байт в памяти! Такой подход позволяет понимать и использовать язык Си на профессиональном уровне!

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

    Благодаря интернету появляется уникальная возможность напрямую обратиться к автору видеокурса по e-mail за комментариями или пояснениями, если что-то непонятно.

    Кому подойдёт курс

    «Программирование микроконтроллеров на языке С»?

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

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

    Подойдет , вы у вас есть желание учится.

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

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

    Не подойдет , если вы не готовы серьезно заниматься.

    Будет ли курс Вам полезен?

    Другими словами, узнаете ли Вы что-то новое из курса?

    Для этого Вы можете пройти небольшой тест, ответив на 4 вопроса ниже:

    1. Если a32 это 32-разрядная беззнаковая переменная, то какое число будет в переменной после выполнения 4 строк ниже?

    2. Для чего используется выражение ниже?

    3.Что не так с проверкой условия?

    4.Что произойдет после выполнения этих двух строк?

    action = ( void(*)(void) )0x3C00;

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

    Где можно подробно ознакомится с содержанием видеокурса?

    Вот на этой странице можно посмотреть название, продолжительность и краткое описание видеоуроков.

    Подойдет ли мне этот курс?

    Этот курс рассчитан на тех, кто знаком с микроконтроллерами хотя бы на начальном уровне. Очень хорошо, если ранее вы программировали микроконтроллеры AVR. Но, курс так же будет полезен и тем, кто ранее программировал другие микроконтроллеры и любительские конструкторы arduino.

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

    А точно каждый заказавший курс может рассчитывать на бесплатные консультации по материалам курса?

    Да, я это гарантирую. Если бы я в таких вопросах обманывал, то я давно прославился бы как нечестный автор, который не держит свое слово.

    А как вы вообще успеваете отвечать на вопросы?

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

    А вы не обманываете? Вдруг я оплачу, но не получу курс.

    Во-первых, я официально зарегистрирован как индивидуальный предприниматель с 2014 года (ОГРНИП 314590501000069), то есть несу полную материальную ответственность перед покупателями за свои услуги. И если по каким-то причинам услуги не выполняются, то я обязан по закону вернуть деньги. Если бы я кого-то обманывал, то мое свидетельство ИП давно было бы аннулировано, а я сам оказался бы в том месте где нет компьютеров, интернета и микроконтроллеров. Проверить подлинность номера ОГРНИП можно на любом сайте информации об индивидуальных предпринимателей России.

    И во-вторых, обратите внимание, что я сотрудничаю с таким сервисом как ROBOKASSA. Около 20% всех интернет магазионов в рунете принимают оплату через этот сервис. Это очень крупная платежная система, даже если вы ранее о ней не слышали. У меня с ними заключен официальный договор. Перед заключением договоров происходит тщательная проверка чистоты репутации в интернете и статуса ИП. И все необходимые проверки я успешно прошел.

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

    А можно посмотреть отрывки из видео?

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

    Если меня что-то не устроит, как мне вернуть деньги?

    Если в течение 60 дней с момента получения дисков или ссылок на закачку вы захотите вернуть деньги, то вам достаточно написать в мою службу поддержки по адресу support@mastercpu.ru и попросить вернуть деньги. Без лишних вопросов я переведу вам деньги на ваш кошелек (счет, карту). Моя задача – сделать так, чтобы сделка для вас была полностью безрисковая.

    Но, с момента выхода курса (середина 2020 года) еще не было ни одного человека , который бы пожелал вернуть деньги обратно из-за того что ему не понравилось содержание курса или не устроило его качество.

    Если у меня нет возможности скачать курс из интернета?

    В этом случае я могу вам отправить флешку с курсом почтой. При этом стоимость курса увеличится на стоимость флешки + стоимость доставки. За более подробной информацией обращайтесь на e-mail внизу страницы

    Я живу не в России. Но, очень хочу этот курс! Что мне делать?

    Вы можете заказать электронную версию с загрузкой всех материалов через интернет, а оплатить через систему Paypal или картой VISA/Mastercard.

    А почему в курсе не используются примеры на современных микроконтроллерах c ARM архитектурой

    Изучение языка Си и конкретных микроконтроллеров (тем более на ядре ARM) это две отдельные большие темы. Данный курс посвящен изучению именно языка Си, а не конкретных микроконтроллеров.

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

    Я почти не встречал людей, которые хорошо знают, например, STM32, но плохо знают AVR. А вот обратное встречается очень часто.

    Как с вам связаться?

    По вопросам заказа и оплаты курса вы можете обращаться на e-mail: support@micro-controller.ru или через форму обратной связи (справа на странице). Если вопрос срочный, то можете со мной лично пообщаться по телефону +79177910654

    Отправьте свой вопрос по e-mail внизу страницы. Или задайте через форму обратной связи на правой стороне страницы.

    Подробнее о курсе

    По вопросам заказа и оплаты курса вы можете обращаться

    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих