Подопытный кролик, или один из МК отечественного производства
Не все так плохо, как могло бы быть, но не столь хорошо, как хотелось бы. Прежде, чем приступить к рассмотрению реализации драйверов различных устройств в МК, хотелось бы определиться с объектом, на котором мы вышеупомянутую реализация будем осуществлять. Конечно, можно рассмотреть сферический МК в вакууме, но в этом случае любое неудобство, приводящее к особенностям реализации программы, будет рассматриваться, как нечто искусственно созданое. Если же принять за базовый идеальный МК (если бы я умел их создавать, то наверняка давно бы этим занялся), то для него написание какой-либо программы вообще не представляет никакой трудности и сводится к двум командам:1) пойми мысли разработчика и 2) сделай это. Поэтому какой то реальный МК в качестве базового весьма желателен, причем то, насколько он далек от идеала, станет мерилом ценности разработанного ПО (раз оно устойчиво работает на этом МК, перенести его на любой более совершенный нетрудно — сильное утверждение, но примем его без доказательства).Итак, начинаем выбирать претендента. Скорее всего, архитектура AVR не вызовет особых возражений (сторонники ПИКов, а также MIPSов и так далее, молчать !), поскольку данная архитектура широко распространена и реализованеа в громадном количестве МК различных фирм. Поскольку речь идет все же о МК, а не о SoC, ограничимся уровнем Cortex-M. Так как лично я не вижу особой разницы между М0, М1, М3 и М4 (конечно же она есть и я ее вижу, но для наших целей она несущественна), то можно выбрать любую и поэтому выбираем самую простую (из соображений, рассмотренных выше), а именно М1. А вот тут то нас ждет небольшая засада, а именно: версия М1 адаптирована для построения МК в составе ПЛИС, поэтому отдельный кристалл с такой реализацией найти нелегко. К счастью, он таки есть, и мы можем вполне обоснованно выбрать МК типа 1986ВЕ1Т производства фирмы Миландр. Именно в этом и заключается искусство инженера — грамотно обосновать и доказать неизбежность решения, которое и без того уже принято в силу разнообразных (в том числе субъективных) факторов. На самом деле с этим МК я уже с пол-года танцую с бубном работаю, причем выбран он был не мной и всего лишь по причине соответствия требованиям к условиям эксплуатации. Тем не менее на данном МК вполне можно показать места, гда лежат наиболее популярные в среде разработчиков встроенного ПО грабли, ну и намекнуть о существовании путей их обхода (а вот пользоваться ли этими рекомендациями, каждый решает для себя). В конце концов, жизнь настолько коротка, что ее едва хватает на то, чтобы совершить требуемое количество ошибок, а уж повторять их — непозволительная роскошь. Сразу отвечу тем, кто заподозрил в этом посте оттенок заказа и предложит его перенести — сначала дочитайте, там будет много такого, что к рекламе вряд ли удасться отнести.Итак, что за МК мы выбрали в качестве подопытного кролика — обычный Cortex-M, которых пруд пруди (кому интересно, смотрите его спецификации на сайте производителя, ГУГЛ вам в помощь), если бы не некоторые интересные особенности, а именно:1. Ядро М1 нечасто встречается в готовых решениях, но это особых проблемм не создает, его отличия от M0 не столь существенны, чтобы затруднить разработку ПО (оценка 0).2. Заявленная частота в 144 Мгц превышает характерные величины для МК такого класса, но есть особенности, о чем позже (+1).3. Объем памяти программ в 128 Кб и памяти данных в 48 Кб характерны для средних моделей в семействах МК, а тут один представитель (+1).4. Есть широкий (32 бита адреса и 32 бита данных) быстрый конфигурируемый интерфейс к внешней памяти, что тоже редкость (+1).5. Батарейный домен с RTC и NVRAM — совсем неплохо, если бы не… смотри далее (+1).6. Контроллер прямого доступа в память — тоже не всегда имеется — совсем неплохо, если бы… (+1).7. АЦПx8, ЦАПx2, таймерx4, датчик температуры, SSIx3, UARTx2 — более-менее стандартный набор (0).8. USB FS Host/device c PHY — неплохо, но не уникально (0).9. CANx2, ГОСТ 18997, ГОСТ 52070×2 — неплохо, но на любителя (+1)10. Ethernet 10/100 MAC — неплохо плюс PHY в кристалле —, а вот это редкость (+1)11. Отладка по JTAG и SWD — стандарт (0).12. Температурный диапазон -60 +125 градусов — честный Military c уклоном в Aerospace (+1).Надеюсь всем понятно, что бесплатных пирожных не бывает и именно последний из параметров (точнее, необходимый для его обеспечения металлокерамический корпус) имеет 2 значительных недостатка — высокая цена и проблеммы с формированием ног и обрезкой при монтаже. Ценовую политику заинтересовавшиеся могут уточнить у производителя, я дам только ориентиры в рублях — военная приемка 8000+, просто металлокерамика 6000+, хотя (ура) теперь есть версия в пластике 400+. Имеется отладочная плата разработки самого Миландра, но ее цена (60к+) может неприятно удивить разработчика, приученого западным производителем к недорогим платам. Подводя итоги по железу — мы имеем вполне достойную, даже конкурентоспособную разработку, для определенной группы применений (знающие поймут) практически не имеющую конкурентов. На этом закончим с бочкой меда и перейдем к бочке ложке дегтя, чтобы оправдать обещанные заявления о незаказной природе поста.Что же у нас будет в этой части описания:1. Документация — мне нелегко дается признание вроде бы очевидного факта, но, соглашусь, она все-таки есть. Думаю читатели сразу поняли мое отношение к этой части разработки. Уважаемые коллеги из фирмы Миландр, так делать нельзя. Документация вообще, а в особенности на такой специфичный продукт, как МК, это не то, что можно делать по остаточному принципу, а неотъемлемая часть разработки. Да, у фирмы есть форум, на котором выложено много полезных вещей и на вопросы часто оперативно отвечают. Да, у фирмы есть грамотная служба поддержки и на вопросы всегда оперативно отвечают. Но все это не заменяет не содержащую ошибок, исчерпывающую и понятную документацию и ни в коей мере не является ей альтернативой, как костыли не заменяют ног (они конечно, позволяют передвигаться, но удобным этот процесс я бы не назвал). Рискуя обидеть кого-нибудь, тем не менее скажу — описание (спецификация) МК местами невнятно, неполно, содержит ошибки и многочисленные умолчания, причем как раз по тем вопросам, которые представляют особенный интерес в связи с их уникальностью. Если вы (это я обращаюсь к возможным пользователям МК) не знаете досконально архитектуру аналогичных МК, вам будет очень трудно, поскольку многие места в описании приходится домысливать за авторов, исходя из имеющегося опыта. К счастью, как архитектура самого МК, так и отдельные его узлы, лицензированы у AVR или совпадаютс AVR аналогами, поэтому можно посмотреть оригинальную документацию и многое станет ясно (-1)2. То, к чему мы все давно привыкли (опять таки развращенные западными производителями), а именно рекомендации по применению -так вот, их просто нет. Я не говорю о каких-либо документах, объясняющих особенности применения, а о простейших вещах, типа подключения питания и задания режимов работы. Информация об этом частично раскидана по тексту спецификации на МК, а частично просто отсутствует. Можно скачать схему отладочной платы и посмотреть там (разработчики так частенько делают), и большое спасибо за ее наличие, но почему не сделать отдельные AppNotes, мне кажется, что фирмы класса TI не зря их создают (-1).3. То, без чего мы не можем обойтись (ну я точно не смогу) — среда разработки программ — здесь зачет. Можно использовать и Keil и IAR (что я и делаю) и Eclipse и Фитон (смотри замечания чуть ниже), наверное, что нибудь еще, на форуме выложены настройки для сред программирования, которые позволяют работать (опять таки не без глюков, но все поправимо). Единственное замечание — опять таки нет документа типа Getting Started, где бы все стадии настройки были бы четко прописаны (0).4. То, без чего обойтись можно, (но, какого дьявола мы будем обходится без этого) — стандартные библиотеки и примеры приложений. Вопрос непростой — с одной стороны на форуме можно найти примеры обращения к регистрам внешних устройств МК, причем как в виде отдельных файлов, так и в виде готовых проектов под среду, написанные как в Миландре, так и в фирме Фитон. И хотя настройки проектов можно было бы сделать и поаккуратнее, после минимальной коррекции все работает, а после небольшой коррекции работает хорошо. Предоставляются исходники довольно таки значительных по функционалу проектов и примеров реализации устройств. Да все это есть, но… если взять какую-нибудь книгу по стандартам программирования на С для встроенных систем (естественно, англоязычную, ну неинтересен наш узкий рынок разработчиков отечественным издательствам), то вышеупомянутые тексты можно добавить к этой книге под лозунгом «Как не надо писать программы для ВС или найди 12 ошибок». У меня сложилось ощущение (несомненно неправильное, но поязвить-то можно), что авторы ПО книгу прочитали, и сознательно ее рекомендации игнорируют. Кстати, после знакомства с этой библиотекой у меня возникли сомнения относительно среды разработки от той же фирмы Фитон. Но, с другой стороны, на вкус все краски разные и, может быть, сам по себе такой стиль не так и плох, просто я привык к несколько иному. Тем не менее, преставленные проекты компилируются и работают (по принципу — это не баг, это фича такая) и, если не вникать в детали реализации (а на это частенько нет времени, продукт нужен был еще вчера, вопросы эффективности отходят на второй план и там навечно остаются), могут быть использованы как основа для собственных проектов разработчика (0).Подводить итоги вдумчивому читателю, я изложил основные (коротенько, минут на 40, больше, я думаю, не надо), на мой взгляд, за и против использования данного МК в Ваших разработках. Что же касается меня, то я с этим МК в основном разобрался, значит и Вы сможете, поскольку лично я, несмотря на все минусы, с ним работаю и поэтому все дальнейшие примеры реализации ПО для МК буду демонстрировать именно на нем (вот такой я вредный), тем самым пропагандируя его применение, так что, наверное, все таки пост можно считать рекламой. А что касается критики, не обижайтесь, просто обидно, что создав неплохой (ну действительно неплохой) продукт, разработчик недостаточным вниманием к его продвижению сужает область возможного его примения до размеров гетто (а конкуренты не дремлют).