Подопытный кролик, или один из МК отечественного производства

в 12:55, , рубрики: микроконтроллеры, Программинг микроконтроллеров
Не все так плохо, как могло бы быть, но не столь хорошо, как хотелось бы.

Прежде, чем приступить к рассмотрению реализации драйверов различных устройств в МК, хотелось бы определиться с объектом, на котором мы вышеупомянутую реализация будем осуществлять. Конечно, можно рассмотреть сферический МК в вакууме, но в этом случае любое неудобство, приводящее к особенностям реализации программы, будет рассматриваться, как нечто искусственно созданое. Если же принять за базовый идеальный МК (если бы я умел их создавать, то наверняка давно бы этим занялся), то для него написание какой-либо программы вообще не представляет никакой трудности и сводится к двум командам: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, больше, я думаю, не надо), на мой взгляд, за и против использования данного МК в Ваших разработках. Что же касается меня, то я с этим МК в основном разобрался, значит и Вы сможете, поскольку лично я, несмотря на все минусы, с ним работаю и поэтому все дальнейшие примеры реализации ПО для МК буду демонстрировать именно на нем (вот такой я вредный), тем самым пропагандируя его применение, так что, наверное, все таки пост можно считать рекламой. А что касается критики, не обижайтесь, просто обидно, что создав неплохой (ну действительно неплохой) продукт, разработчик недостаточным вниманием к его продвижению сужает область возможного его примения до размеров гетто (а конкуренты не дремлют).

Автор: GarryC

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js