Вместо введения

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

Общее направление
В качестве основного увлечения, а заодно и направления выбрана встраиваемая электроника (embedded electronics) отсюда и название блога. В настоящее время я занимаюсь только цифровой электроникой, так как она проще в плане отработки макетов и настройки. Из цифровой в свою очередь идут микропроцессоры и микроконтроллеры (архитектура ARM). В будущем планируется и программируемая логика: (FPGA), так как зачастую цифровая схема имеет ряд ограничений при программной реализации логики в виде программы для МК/МП.

Так как основное профессиональное направление это программирование в ОС Linux, то используемый дистрибутив - Gentoo Linux (Следовательно все примеры основаны на этой среде, если вы хотите увидеть в моём блоге что-то другое, пишите, обсудим и если вам удастся меня убедить в этом, то обязательно напишу): являюсь активным пользователем (иногда вношу свою лепту в виде замечаний, тестов и исправлений ошибок).

ARM
Наверное самое большое значение в моей жизни после x86 сыграла именно эта архитектура. Не смотря на ранее увлечение AVR, основную тягу к электронике я почувствовал после ознакомления именно с этой архитектурой. Сейчас у меня 2 направления:

  1. Микроконтроллеры (МК) - на базе ядер ARM Cortex-M3 и ARM Cortex-M4F, в качестве производителя я использую только ST (STM32). Это произошло благодаря отладочным платам STM32VL-DISCOVERY и STM32F4-DISCOVERY. Пытался написать несколько курсов по изучению этих МК, но в последствии из-за того что сейчас уже достаточно много курсов по этим МК то решил их отложить:  STM32F407(STM32F4-DISCOVERY) - Нестандартный подходI & STM32-discoveryI & STM32F4-discovery. Выбор пал на эту марку МК по нескольким причинам:
    1. Унификация периферии от семейства к семейству (да часть блоков кардинально отличается, но те же таймеры, SPI, I2C, USART будут везде иметь почти одинаковый интерфейс и битовый набор в регистрах управления каждым блоком).
    2. Удобный отладчик о 3-х проводах (если не учитывать "+" питания и линию сброса).
    3. Богатый набор периферии с возможностью её комбинации в алгоритмы без участия ядра МК.
    4. Производительность ARM Cortex-M3(M4) ядер с удобным устройством векторов прерываний, позволяющих писать код без использования ассемблерных вставок (поддержка С-подобных языков из коробки).
    5. Огромное количество примеров в сети и устоявшееся сообщество (которое я думаю впоследствии вытеснит прерогативу Atmel).
       
  2. Микропроцессоры (МП) - на базе ядер ARM 9 и ARM Cortex-A8. Тут больше разнообразия среди производителей - Atmel, Freescale, TI.
    Вообще всё изучение архитектуры ARM, начиналось с платы Rainbow v1.1. После того как я попробовал, почти всю периферию и запустил Linux Kernel с Busybox, я понял что для дальнейшего развития необходимы конкретные задачи поэтому я отложил плату в сторонку.
    Позднее я занялся попыткой запуска Gentoo Linux на плате SK-IMX53-OEM, которая использовалась для одного из проприетарных проектов. Однако в виду упёртости технической поддержки Freescale это не получилось. Да и проект был закрыт.
    Однако совсем недавно я вспомнил что есть плата от TI - BeagleBone. И мне в почту упало письмо о новой версии этой платы BeagleBone Black. А т.к. в сети существовали примеры того что на этой плате запускали Gentoo Linux, выбор пал именно на неё.
Gentoo
ОС Linux я серьёзно пользуюсь давно, на момент написания статьи (19.09.2017) - будет 11 лет.  Выбирал разные дистрибутивы, по сути перепробовал почти все из известных дистрибутивов.

В начале 2004 года когда в первый раз попробовал Mandrake Linux 3(а может и 4) на виртуальной машине, подумал что это не серьёзно, да и качество дистрибутива не позволяло поставить его на ПК (отсутствовали многочисленные драйвера на разное оборудование, не было большинства нужных мне программ).
Позже году в 2006 я попробовал использовать совместно с ОС Windows XP другую ОС - Mandriva Linux, которая была не такой уж и глючной как многим казалось. Однако использование в качестве основной ос было затруднительным.
И вот в 2010 году я узнал что есть такая ОС как Gentoo Linux. После того как я буквально по памяти собрал рабочую систему (так наверное никто не ставит, т.к. в начале у меня не было окружения, то я записывал на работе на листок формата А4 инструкции и пояснения, приходил домой делал всё то что прочитал до этого). Эта система стоит у меня по сей день, Единственное что с момента обновления ПК я сменил x86 ветку на ~amd64.

Сейчас я являюсь активным пользователем этого дистрибутива. Была попытка развития направления Gentoo on ARM. В качестве основной платы для разработки выступала BeagleBone Black. Так как платы сейчас нет в наличии, да и компиляция на ARM это занятие не быстрое, то было решено приостановить эту разработку.

Ассемблер
С этой группой языков я познакомился очень давно. Раньше в целях обучения, а гораздо поздней в целях разработки ПО напрямую взаимодействующего с аппаратной частью, а иногда и оптимизации алгоритмов с точки зрения быстродействия и потребления памяти. Изначально активно использовался в x86 архитектуре. Потом была пора когда я изучал архитектуру AVR и там в виду ограниченных ресурсов зачастую писал исключительно на ассемблере, однако после ознакомления с архитектурой ARM, я стал его использовать и там. Но благодаря тому что ARM разрабатывалась как архитектура под компилятор C, то применение этой группы языков там ограничено ввиду того что в большинстве случаев даже при взаимодействии с аппаратной частью можно обходится и С, изредка переключаясь на язык ассемблера так где нужен код который по разным причинам не может быть сгенерирован компилятором.

С
Так как на языке ассемблера не возможно составить большие и эффективные системы (кто с этим не согласен советую почитать Гради Буча и других классиков по проектированию сложных систем) поэтому я решил перейти на ступеньку выше, а именно стал повсеместно использовать язык С. В моём аккаунте на GitHub, на этом языке написано 90% всего исходного кода. Также т.к. я занимаюсь проблемами toolchain и Linux Kernel и собственно Gentoo Linux, а также программирую МК и МП на низком уровне, то данный язык я использую практически повсеместно. Однако сейчас этот язык уступает дорогу своему последователю - С++.

C++
Знакомство с этим языком у меня происходило более спонтанно чем с С, я то уходил от этого языка то возвращался к нему, каждый раз меняя подходы и методы написания ПО по мере развития самого языка и компиляторов для него. И вот после выхода одной из новых версий языка - С++11 я стал по другому смотреть на него, по началу не понимая для чего все эти усложнения и нововведения, однако с каждым разом пробуя их в своих новых проектах я понял всю силу языка и то что его возможности превосходят С и позволяют писать более краткий и выразительный код, который на выходе порождает такой же краткий и выразительный машинный код. Также этот язык несмотря на свою сложность является уникальным так как позволяет реализовать несколько парадигм разработки - в частности я в последнее время увлёкся шаблонным мета программированием: это когда мы переносим всё что можно из времени выполнения во время компиляции, экономя таким образом на количестве кода, а также повышаем вероятность предотвращения ошибок в логике программы.
Из любимых библиотек это конечно же - stl, boost (есть желание добраться до портирования всего этого добра под Bare Metal) и Qt4(5) для приложений. Все новые проекты на моём аккаунте GitHub написаны исключительно на этом языке - потому как реализовывать вручную большинство того что за тебя делает язык это зачастую иррационально.

Python
Т.к. C всё таки компилируемый язык, мне всегда хотелось иметь под рукой язык на котором можно было бы без труда и быстро написать базовый функционал для прототипов. Этим языком стал Python. Также на этом языке я реализую то для чего он предназначен - скрипты автоматизации, различные инструменты для разбора входящей информации, веб-сайты. В голом виде конечно язык сам интересен, т.к. "поставляется с батарейками в комплекте"(присутствует базовая библиотека), однако зачастую использую и другие библиотеки - PyQt, Django, Tornado.

Послесловие
Большое спасибо за интерес к моему блогу, постараюсь писать как можно больше интересных статей для него. Для желающих материально выразить свою благодарность есть Webmoney:

Z601861216283, R405763550320.

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