Микроконтроллер фирмы Parallax под названием Propeller, в сравнении с “классикой” жанра типа PIC или AVR занимает несколько странную нишу. Про первые два можно сказать, что это архитектуры общего назначения. Создатели же Пропеллера подошли к вопросу “с фланга”.
Основные отличительные особенности Пропеллера:
Язык Spin разработан для удобного многопроцессорного программирования, и выглядит как нечто среднее между процедурным и объектно-ориентированным языком.
Вот пример кода на Spin, запускающего функцию крутиться на нескольких ядрах. Код реально простой и понятный.
CON
_clkmode = xtal1 + pll16x 'Establish speed
_xinfreq = 5_000_000 '80Mhz
OBJ
led: "E555_LEDEngine.spin" 'Include LED methods object
VAR
byte Counter 'Establish Counter Variable
long stack[90] 'Establish working space
PUB Main
cognew(Twinkle(16,clkfreq/50), @stack[0]) 'start Twinkle cog 1
cognew(Twinkle(19,clkfreq/150), @stack[30]) 'start Twinkle cog 2
cognew(Twinkle(22,clkfreq/100), @stack[60]) 'start Twinkle cog 3
PUB Twinkle(PIN,RATE) 'Method declaration
repeat 'Initiate a master loop
repeat Counter from 0 to 100 'Repeat loop Counter
led.LEDBrightness(Counter, PIN) 'Adjust LED brightness
waitcnt(RATE + cnt) 'Wait a moment
repeat Counter from 100 to 0 'Repeat loop Counter
led.LEDBrightness(Counter,PIN) 'Adjust LED brightness
waitcnt(RATE + cnt) 'Wait a moment
Функция cognew
запускает задачу на трех ядрах, параметризируя каждую
своей частотой и стеком.
Упрощенно Пропеллер устроен следующим образом:
Название “Пропеллер” произошло от его модели передачи приоритета на доступ к разделяемым ресурсам. Модуль Hub, контролирующий разделение времени, делает это по кругу, типа крутящегося пропеллера.
Я не хочу в этой статье углубляется в сам Пропеллер, ибо это большая тема. Для интересующихся в конце есть ссылки на книги, в которых можно получить исчерпывающую информацию об этом микроконтроллере.
Но хочу рассказать об одном интересном проекте, который называется “Pocket Mini Computer”. Это мини-компьютер на базе Пропеллера (P8X32A), использующий evaluation board “P8X32A QuickStart” как основу.
Выглядит это добро следующим образом (фотография с официального сайта):
Фактически, автор продает evaluation board плюс плату расширения, на которой есть VGA, microSD, PS/2, звук и Wii Gameport. Опционально можно поставить микросхему оперативки SRAM на 32КБ.
Фишка проекта в том, что автор разработал интерпретатор Бейсика, который превращает все это в микро-компьютер а-ля 80-е. Бейсик написан на Spin’e (исходники открыты). Диалект весьма ограничен, например, нет массивов, строковых и вещественных переменных, имена переменных только однобуквенные и т.д. Но тем не менее, дается доступ ко всей периферии, включая SD-карту, и также позволяет запускать чисто двоичные файлы, которые могут быть написаны хоть на том же Spin’e, хоть на С (Parallax имеет версию GCC для Пропеллера), хоть на ассемблере.
Далее несколько фотографий конструктора, чтобы было понятно, что дается в наборе. Как я уже говорил, основа PMC - это готовая плата “P8X32A QuickStart”, поэтому спаять надо только плату расширения.
Почти все запаяно.
Бутерброд в сборе.
Вот небольшая демка, чтобы оценить графические возможности.
Не получается назвать его процессором общего назначения. По моему субъективному мнению, для эффективного использования Пропеллера надо очень хорошо понимать свою прикладную задачу. Например, у Пропеллера нет ШИМ, ЦАП/АПЦ, встроенной флеш-памяти, триггеров, понятия прерываний, и создатели предлагают либо реализовывать необходимое программно, используя силу нескольких ядер, либо использовать специализированные внешние микросхемы. В книгах, приведенных в конце, описано множество примеров работы с дополнительными микросхемами.
Интересно другое. Создатели Пропеллера не забоялись отойти от традиционного подхода и попытались вложить в кристалл конкретные прикладные возможности, почти готовые задачи. Может для каких-то проектов это придется очень кстати. Как я понял, Пропеллер очень удобен для создания разного рода игровых автоматов и приставок, например, из-за встроенной возможности генерировать качественный телевизионный и VGA сигнал.
Вывод: интересная архитектура, определенно заслуживающая внимания.
Опять-таки, двоякое ощущение. Вроде работает, но ресурсов Бейсику явно не хватает, особенно памяти. Например, тот же Maximite на базе PIC32 его на голову превосходит. На нем можно запустить хоть RetroBSD, хоть Радио-86РК. Да и встроенный MMBasic несравнимо мощнее.
Хотя, за 39 долларов США - это отличная игрушка для тех, кто хочет пощупать Пропеллер, имея уже собранное устройство.
Книги по Пропеллеру, которые я прочитал, что касаемо архитектуры, и проглядел (что касаемо проектов). Все рекомендую.
Небольшая и очень понятная книга для начинающих. Описаны (с картинками) интересные проекты. Один из соавторов является конструктором PMC.
Getting Started With the Propeller
Крайне грамотная книга в плане архитектуры и понимания сути Пропеллера. В ней рассматривается только программирование на Spin, но с полным объяснением подходов и особенностей микроконтроллера. Прочитав первую главу, вы получите почти полное понимание архитектуры. Далее описаны несколько проектов (это можно пропустить).
Programming the Propeller with Spin : A Beginner’s Guide to Parallel Processing (Tab Electronics)
Сборник реальных проектов с использованием Пропеллера от его создателей.
Programming and Customizing the Multicore Propeller Microcontroller : The Official Guide
На момент написания этой статьи, первая книга доступна только в формате Киндл на Амазоне по цене в два доллара, а вот вторую и третью можно найти, если поискать.