есть такие 32 разрядные риск микроконтроллеры XMOS (http://www.xmos.com/technology). работают на частотах до 400-500 мгц, ~1 команда на такт, 400-500 мипс. имеют по 64кб озу + 8кб однократно программируемого пзу на ядро + аппаратный загрузчик с внешней спи флэши. жтаг совместимый с армовым. конфигурируемые порты + поддержка последовательных операций небольшое количество команд таймеры, программируемые делители-источники частоты, исключения, прерывания. что необычного: аппаратная реализация вытесняющей и кооперативной многозадачности. одновременно выполняются до 8 потоков на ядро, до 4х ядер на кристалле. аппаратные блокировки, и синхронизаторы (мутексы, критические секции) аппаратные события и их ожидание потоком аппаратные контролируемые каналы и их ожидание. как межпоточные одного ядра, так и между ядрами 1го кристалла и даже между разными xmos контроллерами. заточены на применение в гридах, но можно и как рядовые мк, тк они наленькие и недорогие. имеют небольшое количество команд и конструкций. имеют специальную модификацию гцц и эклипса для максимально простого использования этих ообенностей. простейший хардверный дизайн https://www.xmos.com/download/private/XM-000306-BP-1.zip (http://www.xmos.com/support/silicon) вот тут я перевел на ру наиболее интересную и необычную, на мой взгляд часть введения в XMOS ассемблер (главы 1.5 и примеры еще не успел). разделы идут снизу вверх http://basmphg.heliohost.org/f/xmos-asm-about/
> Инструкции выбираются из выполняемых потоков по карусельному алгоритму Т.е., нет такого понятия, как timeslice или quantum. И нет понятия приоритета. Одна команда из 1-го потока, потом из 2-го и так далее. Потоки сами могут сихронизироваться друг с другом, переходить в ожидающее состояние и т.п. Т.е., имеем некий гибрид вытесняющей и кооперативной многозадачности. Я правильно понял?
насколько я понял, там планировщик на каждом такте выполняет очередную команду очередного активного (не спящего или ожидающего) потока. те, скорее вытесняющая. я кооперативной назвал способ с управляющим потоком-хозяином и пачкой подчиненных потоков. хотя, там я не совсем понял. скорей, это простой способ распараллелить вычисления небольшого участка программы с последующим сведением в одно. вобщем, надо пробовать. насчет времен - там есть программно настраиваемые источники частоты (максимум 100мгц), которые можно привязывать к разным видам ресурсов (тактировать их). и таймеры порождающие события (события вообще порождать может почти все). не помню точно, но вроде, поток можно принудительно переводить в режим спячки/работы имея его ID. те, породивший поток имеет такую власть над порожденными. можно попробовать организовать приоритетность так если надо, те посадить событие на таймер, посадить управляющий приоритетами поток на ожидание этого события и переключать усыплять/будить пачки потоков по приоритетности. чего там не все хорошо на мой первый взгляд - нет механизма защиты внутренней памяти, событий по доступу к внутренней памяти и прочего мму на нее. только базовые смещения для потоков. я пока не все перевел. там надо табличку системных регистров доперевести. и про исключения, прерывания и ядерные вызовы (???) части. там еще примеры кода как всем этим поточно-канальным добром пользоваться. ------ расширения С они провели такие - вывели на простые типы С процессорные ресурсы: таймеры, потоки, каналы, порты. и сделали специальные команды (значки) для работы с ними. с виду стало похоже на го (алеф, лимбо). ------ еще проц может загружаться с канала 0 (конца канала 0?), те с ведущего проца. итд. вообще, особенностей там хватает и литературы тоже. пока читаю. пока и самому больше не все понятно.
Приветствую Вас, уважаемые форумчане. Надеюсь, эта тема еще кому-нибудь интересна. Начал работать в XDE, сделал один вывод (возможно, не верный) - отсутствуют какие-либо способы синхронизации (в т.ч. мутексы и семафоры). Я конечно не спорю, их, наверное, возможно реализовать программно, но в первом посте я прочитал вот такое: "аппаратные блокировки, и синхронизаторы (мутексы, критические секции)". В связи с этим хочу спросить: 1) Действительно ли это так или я просто недалекий человек? 2) В случае, если я прав, получается, что при разработке того же банального ЮАРТа придется вводить отдельный буфер с количеством входных каналов (channel), соответствующим количеству пользователей ЮАРТА и одним выходным каналом, который собственно будет идти на трехлятый ЮАРТ. Такой вариант меня, если честно, не очень прельщает, как-то не гибко это получится, да и слишком много аппаратных ресурсов придется потратить на этот самый трехлятый ЮАРТ, ведь один канал может иметь не более одного входа и не более одного выхода. Вопрос такой: какие еще есть способы реализации такой задачи на XC?
Да и параллельность тредов в симуляторе поддерживается так себе. Чтобы нормально отдебагить приложение, все-таки необходимо лить программульку на плату. Закажу, наверное, одну XK-1A с адаптером. Интересно посмотреть на это творение праворуких в действии. Пробовал через Аргуссофт (официальный дистрибьютор вроде), пока молчат. А стоимость доставки через их сайт составляет 120$. При стоимости упомянутой платки в 59$ (а это вместе с адаптером) не совсем рентабельным мне это кажется
за ХС не знаю. глянул на него только мельком и больше на примеры (С с парой спецконструкций и спецтипов). смотрел/переводил больше на асм, тк интересовался возможностями контроллера. в асме есть блокировки вроде бы. хотя они больше на критические секции похожи. на несовершенство программного симулятора жалуетесь не вы первый. в ответ обычно советуют использовать аппаратный. на оф сайте оф макетки дешевле $100 нет. это с программатором сразу. впрочем, свм программатор можно использовать как еще 1 макетку на хмосе, те купив 2 комплекта вы получаете 3 хмос-макетки + 1 программатор. если хотите, то оф псб и сторонние разного качества лежат на оф сайте и форуме. можете сделать или заказать. на оф форуме несколько чел там пробуют сделать конкурирующие макетки в более практичном и дешевом исполнении. но пока еще в процессе и я не знаю как с доставкой к нам/вам. (а оф дистрибутер, зачем он вам?) если хотите еще дешевле, то сами контроллеры я брал по $7 без доставки. разные псб, иногда с полными проектами, на их сайте/форуме. платы можно заказать и у нас. распвйкой если не хотите сами - к телефонмастеру. затык может быть со спи флэшами. ат25 достать нереально. м25 и сст25 иногда попадаются (пожалуй самая неудобная фича)
Может быть в асме и реализованы подобия критических секций, я почитаю. В любом случае, спасибо за информацию. А вот в ХС это дело реализовано вот таким вот правилом (скопировано из оф руководства): 3.2 Thread Disjointness Rules All variables are subject to usage rules that prevent them from being shared by threads in potentially dangerous ways. In general, each thread has full access to its own private variables, but limited access to variables that are shared with other threads. The rules for disjointness on a set of threads T0 . . . Ti and a set of variables V0 . . . Vj are as follows: 1) If thread Tx contains any modification to variable Vy then none of the other threads (Tt ; t 6 x) are allowed to use Vy. 2) If thread Tx contains a reference to variable Vy then none of the other threads (Tt ; t 6 x) are allowed to modify Vy. 3) If thread Tx contains a reference to port Vp then none of the other threads are allowed to use Vp. In other words, a group of threads can have shared read-only access to a variable, but only a single thread can have exclusive read-write access to a variable. These rules guarantee that each thread has a well-defined meaning that is independent of the order in which instructions in other threads are scheduled. Interaction between threads takes place explicitly using inputs and outputs on channels. Возможно, я что-то не так понял. Аналогичные правила там есть и для каналов.
А вот касательно возможности заказа платок у неофициальных распространителей прошу, по возможности, рассказать более подробно. К сожалению, у меня нет опыта "проворачивания" подобных вещей. И, извиняюсь за безграмотность, что такое "псб"? Заранее благодарен за ответ. Есть еще такой момент: все-таки реализация параллельной работы потоков действительно реализована довольно примитивно (опять же взято из оф руководства по ХС): The XMOS architecture is designed to perform multiple real-time tasks concurrently, each of which is guaranteed predictable thread performance. Each processor uses a round-robin thread scheduler, which guarantees that if up to four threads are active, each thread is allocated a quarter of the processing cycles. If more than four threads are active, each thread is allocated at least 1 n cycles (for n threads). The minimum performance of a thread can therefore be calculated by counting the number of concurrent threads at a specific point in the program. Простыми словами (насколько я понял): 1) каждый поток дает не более 100 мипсов; 2) при работе 4-х потоков на одном ядре производительность гарантирована и составляет 100 мипс; 3) при работе более 4-х потоков производительность уже может быть от 50 до 100 мипс, т.е. не является детерминированной (этот момент уже точно под вопросом, это лишь мои выводы). Ну и добавлю, что в целом меня хмос порадовал. Действительно большие возможности реализованы аппаратно, проглядывается реальная возможность разработать что-то серьезное без ОСРВ.
rmnnk хм, а вы хотели полноценного ядра реализованного аппаратно в контроллере размером с ноготь, небольшим потреблением и ценой с авр-мегу? имхо, они и так реализовали почти все и сделали больше чем мечталось. только то, что флэши внутре нет видится заметно неудобным. а что потоков апаратных мало - решеется добавлением камней хмоса. тем более, что связывание их опять же решается аппаратно. на каждом 4х ядерном хмосе до 64 потоков без падения. снова посудите - нет потерь на переключение в одном случае и потеря только в 1 такт на разморозку потока в другом - я считаю очень хороший результат. не совсем. речь идет об одновременно работающих потоках. поток ожидающий события замораживается и выбрасывается из планировщика до пока оно не произойдет. а обычно большая часть потоков будет именно ожидающих. (имхо, куда удобнее прерываний) серьезнее осрв. мало какая осрв предоставит подобные сервисы (вы только про каналы почитайте. а наращивание добавлением камней?). да еще и без единой строчки кода. PCB? чертеж-макет печатной платы под изготовление. на оф сайте сразу в герберах. напечатал-засветил-насверлил-паяешь. и хс и среда и все прошивки (того же программатора-жтага) в опенсорцах. активно обсуждаются и развиваются. если сильно сильно надо, то можете попросить вделать (или заказать). и, вроде, там есть команда asm и можно вставлять асм команды. но точней не скажу. а какой тут нужен опыт? просто берете в магазинах где оно есть. кроме оф сайта это пара магазинов в америке, пара в англии, пара в германии и франции. там без накруток, но стоимость доставки может быть заметная. я брал в футуреэлектроникс.сом с доставкой на канаду. также, когда чуть раскрутятся пару товарищей из ам и фр, что уже запустили в производство свои варианты макеток, можно будет заказать и у них.