Поэтому я немного поэкспериментировал с STM32F407 (я новичок в ARM) и решил написать простое приложение с использованием библиотек HAL, поскольку кажется, что ST прекратил выпуск стандартных библиотек периферийных устройств. Итак, мой вопрос, какой смысл в HAL? Разве StdPeriph не делал свою работу? Почему они прекратили бы это для HAL? Мне кажется, что HAL - полный беспорядок.
Документация ужасна, по крайней мере, для StdPeriph есть полная справка, организованная достаточно хорошо, чтобы легко найти то, что вы хотите ( http://stm32.kosyak.info/doc/ ). Для HAL существует дурацкий PDF ( http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf ), который имеет, казалось бы, случайную структуру. Читая любой раздел, например, относительно периферийных устройств, я не могу понять требования для его настройки и правильной настройки. Это больше похоже на личные заметки от кого-то, кто не хочет забывать вещи, чем ссылки.
Я знаю, что могу использовать CubeMX для инициализации GPIO и настройки периферийных устройств, но моя цель - сделать это самому, чтобы я лучше понимал их работу, а не какое-то программное обеспечение, делающее все это для меня. Я делаю что-то неправильно? Меня смущает новичок в ARM? Или доступная документация ЭТО плохо?
Ответы:
Создать свои собственные библиотеки довольно просто. Их документация по спецификации реестра довольно хорошая, большинство, если не все периферийные устройства просты в настройке. Я нахожу гораздо более болезненным использование их библиотек. но, возможно, это только я. Это верно для st, nxp, ti, atmel, чтобы назвать несколько (не так много для intel и microchip).
Почему они меняют библиотеки, может быть по нескольким причинам, какой-то новый босс вступил во владение, какое-то подразделение закрыто, другое вступило во владение. Маркетинг хотел новый образ для продукта. Как упоминал ElectronS, это может быть попыткой отвлечься от аппаратного обеспечения, чтобы привлечь пользователей, не желающих или не умеющих делать голый металл. Я хотел бы пойти дальше и сказать, что они, вероятно, пытаются конкурировать с феноменом Arduino. Который мбед и все остальные всегда пытались сделать и потерпели неудачу (даже до Arduino).
В любом случае, чем дальше от аппаратного обеспечения, тем более раздутым и медленным, тем больше вы должны тратить на единицу для rom, ram и mhz. Просто чтобы ты мог потратить столько же времени на программирование? Просто делать это по-другому?
Вы говорите, что пришли из мира PIC, теперь они отлично справились с инструментами, хотя их документы по чипам были ужасными, хотя и одними из худших. они компенсировали с помощью библиотек и песочниц.
В конце дня, попробуйте различные варианты, попробуйте конкурирующие продукты, чтобы увидеть, как их инструменты сравниваются. Многое из того, что вы можете сделать бесплатно, просто чтобы увидеть, имеет ли это смысл, и вы можете компилировать вещи. Может быть, даже использовать симулятор набора инструкций. Найдите тот, который подходит вам.
Обратите внимание, что опция без консервированных библиотек всегда доступна для вас. Вы не ограничены тем, какой набор инструментов вы можете использовать, какую операционную систему хоста, какой ide, редактором и т. Д. Они могут придерживаться его при программировании деталей, если их возможности в этом отношении крайне ограничены, и переходят на какой-то другой чип. или продавец, если можете.
Чтобы продать подобный чип-продукт, они должны предоставить среду разработки, будь то все их или бесплатные вещи, которые они склеили. И они, как правило, собирают какую-то библиотеку. Это должно выглядеть просто достаточно хорошо, и приведенный пример работает достаточно хорошо, чтобы заставить ваше руководство или команду аппаратного обеспечения спроектировать свой продукт, тогда, когда ваш программный продукт переброшен через стену на программное обеспечение, это когда боль делает или не прибывает. Если это почти работает, но не совсем, это большая победа для производителя чипов, так как теперь вы будете платить за техническую поддержку для этого последнего кусочка. Поэтому в их интересах быть почти там, но не совсем.
Производители чипов должны выглядеть достаточно хорошо, чтобы выиграть дизайн. Они должны постоянно улучшать («менять») продукт, чтобы привлекать новых и старых клиентов. Таким образом, им придется делать оверны, как далеко друг от друга и сколько предыдущих библиотек продолжают поддерживать, варьируется. Так что практически любая библиотека, к которой вы привыкли, со временем исчезнет. Так что учитесь приспосабливаться (или не используйте их вещи и переходите к собственным, которые вы можете поддерживать бесконечно). Конечно, в идеале вам нужно разрабатывать приложение только один раз для каждого продукта, делать идеальную прошивку (удачи, если вы используете сторонние библиотеки), и вам не нужно возвращаться и искать компьютер, который загрузит их набор инструментов, если вы сможете найти скопируйте его и вспомните, как использовать эту старую библиотеку. Помните, что вы должны не только сохранять исходный код, но и сохранять все его инструменты и документы.
Их библиотеки поддерживаются, как правило, только в одной цепочке инструментов, в одной, может быть, в двух IDE, а иногда только в Windows, и в определенных версиях. Опять же, у вас нет ни одного из этих ограничений, определенно не для ARM, если вы делаете свое дело. Вы всегда можете прочитать любую / все их библиотеки, чтобы увидеть, как они работают. Но это часто очень страшно, они не используют своих разработчиков команды A для библиотек, я выделил несколько строк кода, чтобы спросить кандидатов на собеседованиях, что не так с этим кодом.
чтобы сэкономить время и усилия как на стороне кремния, так и на стороне программного обеспечения, они очень часто перерабатывают один и тот же ip, поэтому, как только вы видите, как периферийное устройство работает на одном из их чипов, оно часто работает так же, как и на многих других их чипах. Да, системы часов могут быть хитрыми с их библиотеками или без них. Высокие шансы на обломок чипа, именно здесь произошел брикет моего чипа / платы. Помогает понять, как работают их микросхемы, например, AVR, большинство, если не все, можно перепрограммировать во время сброса микросхемы, поэтому любой плохой код, который испортил контакты, необходимые для перепрограммирования, или повредил логику, необходимую для перепрограммирования, не делает независимо от того, вы можете перепрограммировать эти чипы. Некоторые из этих поставщиков (st is one) имеют встроенный загрузчик, который можно выбрать с помощью ремешка (например, BOOT0 в st-мире),
Один размер подходит всем и никому не подходит. Особенно актуально для программного обеспечения. Поэтому любая попытка абстрагировать аппаратное обеспечение просто делает его медленным и раздутым. Также возможно получить чип большего размера и запустить на нем linux, если вы действительно этого хотите. Большая часть этого является результатом того, что разработчики не хотят запачкать руки, поэтому мы в основном просили об этом, и они пытаются это предоставить.
Опять же, не привязывайтесь к st или любому другому поставщику (если это не слишком поздно, и руководство и / или команда аппаратного обеспечения не обратили на вас внимания, обратите внимание, что продукты stm32 хороши и просты в использовании). Магазин вокруг. TI кладет много яиц в корзину cortex-m4. Вы можете использовать mbed для ряда продуктов, а также для решений, поддерживаемых поставщиком.
Одна вещь, на которую вы всегда можете положиться, это то, что они будут время от времени менять библиотеки и в конце концов перестанут поддерживать ту, к которой вы привыкли.
источник
Позвольте мне сказать вам, что многие из нас разделяют то же разочарование, которое вы испытываете к библиотекам HAL, они действительно плохо и смутно документированы, и все же новое содержит много ошибок.
Итак, ответить на ваш вопрос, почему ST выбрал HAL, просто:
Они хотят создать уровень аппаратной абстракции, что на простом английском означает, что они хотят, чтобы разработка программного обеспечения и код не зависели от микроконтроллера, поэтому, если вы сегодня напишите код для stm32f4, и вам понадобится через пару лет перейти на stm32f7, он будет легко, и код будет очень модульным.
Это также позволяет большему количеству разработчиков, таких как программист, работать с микроконтроллером, не понимая и не углубляясь в подробности того, как оборудование решает задачу. Такие компании, как ST и TI (начинающие этот путь сейчас) пытаются сделать встраиваемую разработку похожей на разработку кода для ПК, где вы используете высокоуровневые драйверы для разработки кода FAST. Неуклюжесть и отсутствие оптимизации в их драйверах и библиотеках компенсируется высокой производительностью устройств ARM.
Я думаю, что STM32cubeMX - отличный инструмент, если вы используете библиотеки HAL, потому что самая трудоемкая работа - это инициализация периферийных устройств, и теперь вы можете сделать это за очень короткое время, с визуальным интерфейсом, который можно легко изменить, не затрагивая пользовательский код (если вы пишете свой код в соответствующем месте) Вы можете использовать Stm32cubeMx, а затем просмотреть код и попытаться понять, как и почему они используют каждую функцию, таким образом, вы пытаетесь выполнить упражнение и располагаете рядом с руководством по решению для исправления, которое отличное ИМО.
Ядро ARM довольно сложное, поэтому старые методы, которые мы использовали на 8-битном микроконтроллере, такие как непосредственная обработка регистров (написание C выполняется в ассемблерном режиме), неосуществимы, занимают много времени и затрудняют поддержку кода из-за сложной архитектуры (проверьте настройка часов например)
источник
Я знаю, что это будет долго и самоуверенно, но, поскольку мы только что (успешно) выпустили наш новый продукт с использованием HAL, я думаю, что это стоит рассмотреть. Кроме того, я не работаю на ST, я ненавидел каждый бит HAL, почти перезапустил проект с StdPeriph, я почувствовал боль - но теперь я понимаю, почему.
Сначала немного предыстории. Мы разрабатываем системы телеметрии со сверхнизким энергопотреблением, и наш продукт работает на STM32L1. Когда мы начали работать над микропрограммой, у нас были обычные варианты для («голых») устройств ST: делать все вручную, использовать библиотеки StdPeriph или использовать HAL. Парни из ST убедили нас пойти с HAL - так мы и сделали. Это было больно, нам приходилось обходить ошибки в программном обеспечении (часть I2C в течение некоторого времени сводила нас с ума), и мне все еще не нравилась общая архитектура. Но это работает.
Когда я перешел с настольного компьютера на встроенный, чуть больше года назад, я был ошеломлен чем-то странным, что я не мог назвать или даже понять. Со временем я был в состоянии понять , что было - или , вернее, то , что это - происходишь: вложенный мир находится в переходном периоде. Силикон становится дешевле каждый день, а микроконтроллеры более мощные и универсальные. Все больше и больше устройств, независимо от их размера, потребностей в питании, полагаются на универсальные микроконтроллеры. Все больше и больше компаний присоединяются к игре, привлекая множество новых разработчиков с различным опытом. «Средняя» культура отходит от традиционного «парня из EE с навыками программирования» до «парня из SW с неопределенными знаниями в области аппаратного обеспечения».
Хорошо это или плохо, не имеет значения. Это просто случилось. На самом деле, это также случалось с миром программного обеспечения, не раз. Веб-бум в 2000 году привлек новичков в PHP / MySQL - скажи им, что в процессоре есть регистры, они ответят: «Я использую Linux, поэтому в моей ОС нет реестра». Ранее многопользовательские ОС, работающие в защищенном режиме, позволяли ленивым разработчикам никогда не устанавливать ISR за всю свою карьеру и все было в порядке . Еще раньше клавиатурные и экранные перфораторы и производители принтеров сходили с ума.
И да, текущие тенденции меня лично огорчают, поскольку я вижу, как невежественные разработчики в восторге от последних блестящих технологий, будучи совершенно неспособными связать их с историей. Когда в 2015 году я вижу себя моложе меня, пишущего код на Javascript для WebGL, я хочу крикнуть: «Ничего нового! Я сделал то же самое с C ++ и 3Dfx SDK в 1995 году!». История не рассказывает о том, что его игра работает на моем мобильном телефоне, в то время как моему нужен компьютер для игры (и установщик, а я не могу загружать обновления через Интернет). Правда в том, что он мог разработать игру за один месяц, где я делал то же самое за шесть или двенадцать.
Очевидно, что ни ST, ни TI, ни Intel, ни те, кто производит чипы, не хотят пропускать ход. И они правы. HAL является ответом ST, и на самом деле он достаточно здравый, не только со стороны бизнеса или маркетинга, но и с инженерной стороны. Причина, почему это звук, заключается в названии:
Во всяком случае, это то, что вы должны помнить. HAL - это попытка отойти от оборудования. Это хорошая техника, потому что она позволяет нам отделить функциональность от деталей. Расслоение - это то, что позволяет разрабатывать сложные программы - одна абстракция поверх другой, вплоть до аппаратного обеспечения. На самом деле абстракция - это самый мощный инструмент для управления сложностью . Я очень сомневаюсь, что кто-нибудь на этой планете сможет программировать веб-браузер в сборке для конкретного процессора.
Культурный сдвиг действительно трудно усвоить, но, как мне кажется, не нужно читать « Искусство компьютерного программирования» Кнута для разработки веб-приложений, мир EE должен признать, что есть новички, которые могут (и будут!) Разрабатывать встроенный код. не прочитав
FuckingHoly Reference Manual.Хорошая новость заключается в том, что новые игроки не означают меньше работы для старых игроков - наоборот, ИМХО. Кому они будут звонить, когда что-то не работает? Если у вас есть RTFM (в отличие от них), и если вы знаете, что делает каждый бит этого непонятного регистра конфигурации, у вас есть преимущество.
Между вашими чтениями и экспериментами просто идите с HAL. Новый MCU? Нет проблем. Новая линия MCU? Также нет проблем (я кодировал тест на STM32F4 Nucleo всего за один день с CubeMX, а затем просто перенес его на наше устройство ... оно показалось мне правильным ). Издеваться над юнит-тестами? Нет проблем. Список можно продолжать и продолжать, потому что абстракция хороша.
Конечно, сам HAL не на 100% в порядке. Это ужасная документация (но у вас есть RT
FHRM, не так ли?), Есть ошибки, ST только что выложила нам бета-версию (кажется, довольно стандартной в наши дни), и их публичная поддержка - шутка. Но не выпускать HAL было бы еще хуже.источник