Я нашел процессор своей мечты!!! Если я ДОБУДУ ЭТО 8ми ядерное, 32х битное, 80МГцевое чудо в DIP40 корпусе... да за 10баксов штучка... Да это просто праздник какой то!!! Главный мозг Робота своего буду делать на нем!
Рассказывать о Propeller непросто. Хотя бы потому, что в этой разработке очень мало общего с привычными микропроцессорами и микроконтроллерами.
Во-первых, в отличие от любого вычислительного устройства из своего ценового диапазона Propeller содержит восемь 32-разрядных синхронных, но независимо работающих вычислительных ядра фон-неймановской архитектуры, каждое из которых оснащено весьма нетривиальной интегрированной периферией и локальной оперативной памятью небольшого объема. В терминах Propeller каждое такое вычислительное ядро называется «зубом» (дословный перевод термина cog - зуб шестеренки). Странное сочетание «синхронные, но независимые» на деле означает, что работа всех восьми «зубов» Propeller'а тактируется импульсами одного общесистемного генератора тактовой частоты, но при этом каждый «зуб» может исполнять свою собственную программу. Каждый «зуб», кроме ОЗУ универсального назначения (фон-неймановская архитектура) емкостью 496 32-разрядных слов, содержит 16 регистров специального назначения и целый «букет» отображенных на них периферийных устройств, таких как два управляемых коммуникатора портов ввода/вывода, два универсальных счетчика событий и даже... генератор видеосигналов!
Во-вторых, все восемь «зубов» Propeller четырьмя 32-разрядными шинами соединены между собой и с двумя совсем уж неожиданными в таком случае подсистемами микроконтроллера. И если две шины традиционны для цифровых вычислителей (шины данных и адреса), то общая шина доступа к 32 однобитовым портам ввода/вывода (отображенным на аппаратные выводы, «ноги» микроконтроллера) и отдельная шина разделения общесистемного счетчика машинных циклов - вещи, мягко сказать, экзотические. Более того, посредством этих двух шин каждое вычислительное ядро может в любой момент опросить состояние портов ввода/вывода и прочесть содержимое счетчика машинных циклов - эти операции выполняются полностью асинхронно. В терминах Propeller (и в терминах многозадачных операционных систем) однобитовые порты ввода/вывода и счетчик машинных циклов называются общими разделяемыми ресурсами. Ну а загадочный счетчик машинных циклов -просто 32-битовый счетчик, подсчитывающий импульсы общесистемного генератора тактовой частоты.
В-третьих, кроме общих разделяемых ресурсов, Propeller содержит и так называемые взаимоисключающие ресурсы (mutually exclusive), к которым одновременно может осуществляться доступ только одним вычислительным ядром. Таких ресурсов в Propeller немало, и, кроме очевидной общей оперативной памяти (8 килослов), к ним относятся, например, аппаратно реализованные битовые семафоры (в терминах Propeller они называются locks, но, по сути, являются традиционными механизмами защиты взаимоисключающих разделяемых ресурсов от непредсказуемых результатов одновременного доступа).
В-четвертых, кроме восьми «зубов», Propeller содержит еще и общее управляющее ядро - «вал» (hub). Главное назначение этого механизма - упорядочивание доступа «зубов» к взаимоисключающим ресурсам. Такая задача решается в Propeller на микропрограммно-аппаратном уровне, но при этом почти так же, как принято ее решать в операционных системах. Если попробовать использовать образы, навязанные названиями отдельных элементов Propeller, можно сказать так: через каждые два такта общесистемной тактовой частоты «вал» доворачивает всю «шестеренку» процессора до вхождения в «зацепление» очередного «зуба» и взаимоисключающих ресурсов. Менее образно, но более внятно, это означает, что тактовая частота «вала» в два раза ниже общесистемной тактовой частоты, и в каждый такт своей работы «вал» предоставляет очередному вычислительному ядру доступ к взаимоисключающим ресурсам. Подобным «вращением доступа» (все-таки мы говорим о Propeller) в операционных системах занимается важнейший элемент ядра ОС - диспетчер (scheduler), а само «вращение» называется циклическим алгоритмом диспетчеризации (round robin). Разработчики Propeller реализовали этот алгоритм с одним важным нюансом - независимо от того, сколько вычислительных ядер микроконтроллера задействовано пользовательской программой, диспетчер-«вал» гарантирует стабильный временной интервал между получением доступа к mutually exclusive ресурсам - 16 тактов общесистемной тактовой частоты.
В-пятых, «вал» сам как бы является сопроцессором вычислительного ядра, исполняющим специальные команды доступа к взаимоисключающим ресурсам. По сути, эти команды, входящие во множество машинных команд Propeller, есть не что иное, как аналог... системных вызовов в операционных системах - именно посредством исполнения ядром ОС этих вызовов пользовательские программы получают доступ к взаимоисключающим ресурсам. В языке ассемблера Propeller таким командам соответствуют, например, мнемоники RDBYTE/WRBYTE и группа мнемоник, начинающихся четырьмя символами LOCK. Первые - это полный аналог системных вызовов чтения/записи разделяемой (shared) памяти, вторые - аналог группы системных вызовов, отвечающих за управление семафорами.
В-шестых, в Propeller нет понятия «прерывание». Вообще нет. Но не спешите фыркать - разработчики Parallax свое дело знают отлично. Давайте подумаем - зачем нужен механизм прерываний? Ответ очевиден - чтобы получить возможность управления потоком исполнения в зависимости от аппаратных асинхронных с этим потоком событий. В Propeller для решения подобной задачи нет нужды усложнять сущности без необходимости и вводить в восьмипроцессорной аппаратно-программной системе реального времени дополнительный механизм. Хотя бы потому, что на любой из процессоров можно возложить решение задач опроса состояний общего ресурса (портов ввода/вывода) и трансформации этих состояний во взаимоисключающий ресурс, например битовый флаг, сообщающий о событии.
В-седьмых, Propeller имеет встроенное ПЗУ, в котором есть чуть ли не все, что нужно для построения на основе этой микросхемы самых разных управляющих устройств. Достаточно только упомянуть о том, что в ПЗУ хранятся и прошивки знакогенераторов для генераторов видеосигналов каждого вычислительного ядра (с него можно сразу же на видео выход напрямую гнать сигнал!!!), и готовые таблицы для быстрых аппроксимационных вычислений основных тригонометрических функций и перевода чисел в экспоненциальную форму, и программа начальной загрузки, и даже... интерпретатор кодов промежуточного представления мощного языка программирования Spin. То есть фактически Propeller - это не микроконтроллер, и даже не восьмиядерный микроконтроллер, а функционально завершенная аппаратно-программная платформа для разработки систем реального времени. Вот так - ни много ни мало.
Ну и наконец, в-восьмых. Propeller как многозадачная машина, исполняющая комбинированные на Spin и ассемблере программы, является полноценной объектно-ориентированной системой. При этом здесь понятия «объект», «метод», «интерфейс объекта», «внешние (external) данные модуля» и т. п. настолько тесно связаны с уникальными возможностями всей системы, что Propeller можно считать замечательной учебной партой для будущих объектно-мыслящих программистов.
Даташит на это чудо В даташите есть схема демоборды... ЭТО ЖЕСТЬ!!!