Jump to content
    

Стоит ли начинать обучение программированию микроконтроллеров с HALов?

Или с работой напрямую с регистрами?

Лично для меня HALы выглядят совершенно противоестественными - они скрывают суть.

Потом увеличивается трудоёмкость. Сначала нужно разобраться что делать, а потом как это сделать через...

Share this post


Link to post
Share on other sites

1 час назад, dOb сказал:

Или с работой напрямую с регистрами?

Да уж сразу с питонов и рустов наверно, а чего, стильно, модно, молодежно)))))))))

Ну а если серьезно, я например не особо знаю регистры АРМа и его ассемблер, скорее так, в основном понимаю, могу сделать несложные правки, но с нуля написать на асме не смогу, хотя на АВРках писал на асме по десять и более килобайт, там просто асм куда проще АРМовского, на АРМе сугубо на Си, без плюсов, меня на данный момент полностью устраивает, как для простых МК Кортекс-М, СТМ32.. так и для более навороченных Кортекс-А (Аллвиннер), как-то так... Понимание иметь нужно, но писать проги не обязательно.

По типу программирования, есть варианты бареметал, т.е. написание кода на "голом" МК, т.е. без каких-либо ОС, как в старые, добрые времена, либо можно изучать линукс и писать на более высоком уровне под него. Первый вариант, как по мне проще и понятнее, особенно начинающему, ты видишь свой проект полностью, до каждой строчки кода, и можешь проанализировать, что и где глючит и почему. Можно использовать удобные ИДЕ для сборки и компиляции кода.

Второй вариант требует понимания линуксовой философии, вкратце - есть ядро линукса, в котором 99% вы не разберетесь никогда, как там все работает, будете работать с ним, как с "черным ящиком", которому передаете запросы, он их выполняет и выдает вам результат, там нет никаких ИДЕ, это абсолютное царство командной строки, мейк-файлов, файлов конфигурации на птичьем языке(DTS) и т.п. Если это вас не пугает - то можно работать так, возможностей больше, поддержка разный сложных протоколов и режимов уже "из коробки", графики и пр.

Вообщем вариантов много, выбирать вам))))))

Edited by mantech

Share this post


Link to post
Share on other sites

1 hour ago, dOb said:

они скрывают суть.

в ардуино тогда вобще магия происходит

 

1 hour ago, dOb said:

Сначала нужно разобраться что делать, а потом как это сделать

самый лучшый вводный курс по мк который я видел, это уроки к пиккит2 для демоплаты - маленькие примерчики работы с периферией. когда будет понимание как оно работает вцелом, тогда ужэ можно будет лезть в регистры и забираца с часностями.

chapter4_2.jpg

Share this post


Link to post
Share on other sites

2 часа назад, dOb сказал:

Или с работой напрямую с регистрами?

Лично для меня HALы выглядят совершенно противоестественными - они скрывают суть.

Потом увеличивается трудоёмкость. Сначала нужно разобраться что делать, а потом как это сделать через...

конечно стоит, когда заработает можно по частям разбираться с регистрами, можно брать HAL функции + описание и самому оптимизировать исходники

Share this post


Link to post
Share on other sites

2 часа назад, dOb сказал:

Или

Самое разумное - это комбинирование. Другое ограничение - работодатель, который может однозначно определить: HAL, регистры, асм... по своим внутренним соображениям.

Мне встретился глюк в первых версиях cubeide - HAL не переключал тактирование АЦП на системную шину, а тактировал от своего встроенного генератора. Другой момент, последовательность действий по настройке периферии (не вспомню, что именно),  ERRATA сказала, что, да, допустили не точность в RM, но если вы используете HAL, то там последовательность установки бит правильная. Так что, таки да, где HAL, а где ручками.

 

Share this post


Link to post
Share on other sites

31 minutes ago, gridinp said:

конечно стоит, когда заработает можно по частям разбираться с регистрами, можно брать HAL функции + описание и самому оптимизировать исходники

имея пример уже реализованной функции, проще разбираться с теми же регистрами, чтобы не забыть что-то, написанное на совсем другой странице описания и меньше гадать, почему работает не так

Share this post


Link to post
Share on other sites

Всё зависит от того, какая цель ставится.

Если цель - научиться делать "максимально правильно и вдумчиво, прорабатывая все детали и нюансы, с by-design гарантией надёжности и работоспособности" или как-то близко к этому, то работа на регистрах - единственный возможный путь, так как требует внимательного изучения документации. Разумеется, что при таком подходе HAL и прочие не отметаются, как минимум при недостаточной полноте документации, при сомнениях в трактовке так или иначе всё равно придётся заглядывать в библиотеки, чтобы посмотреть "как сделано у них" и сделать свои выводы. Ну и такой подход формирует в голове куда более чёткое понимание работы периферии.

Если же цель - просто "писать чтобы как-нибудь работало", то можно пользоваться библиотеками в формате "пробуем библиотеку, получилось - хорошо, не получилось - берём следующую". В таком случае в голове будет формироваться либо сильно упрощённая картина того, как работает периферия - либо вообще извращённая картина, не соответствующая реальности.

Первый подход хорошо подходит для "серьёзной" разработки, где есть возможность потратить значительные человеко-часы на вдумчивое написание "хорошего" кода. Для случаев создания "быстрых наколенных прототипов" как будто лучше годится второй подход, однако он (в случае, если далее прототип будет развиваться в "серьёзный" проект) дальше сделает больно и всё равно потребует приближаться к первому подходу - а имея за плечами более-менее значительный опыт "работы на регистрах", даже прототипирование на регистрах пишется почти так же быстро, как и на библиотеках.

Ну и первый подход позволяет реализовать всё точно так, как требуется, а второй подход в некоторых ситуациях приводит к тому, что для реализации требуемого приходится либо городить городушки, либо модифицировать библиотечный код, либо ещё как-то выкручиваться.

Лично я придерживаюсь первого подхода.

Share this post


Link to post
Share on other sites

1 час назад, gridinp сказал:

конечно стоит, когда заработает можно по частям разбираться с регистрами, можно брать HAL функции + описание и самому оптимизировать исходники

Чушь полная. Когда заработает нет никакого смысла разбираться с регистрами. Особенно с учетом того, что громадная работа проведена для освоения HAL и повторять ее для освоения переферии контроллера никто не станет. А не имея понимания как работает оптимизировать что либо тоже возможности не будет.

Share this post


Link to post
Share on other sites

9 minutes ago, artemkad said:

Чушь полная. Когда заработает нет никакого смысла разбираться с регистрами. Особенно с учетом того, что громадная работа проведена для освоения HAL и повторять ее для освоения переферии контроллера никто не станет.

Есть смысл. Можно оптимизировать программу. Можно добиться нужного поведения меньшей кровью (с Миландром пришлось повоевать с DMA)

Share this post


Link to post
Share on other sites

4 минуты назад, novikovfb сказал:

Есть смысл. Можно оптимизировать программу. Можно добиться нужного поведения меньшей кровью (с Миландром пришлось повоевать с DMA)

Смысл оптимизировать, если с одной стороны и так работает, а с другой работа периферии не освоена т.к. осваивалась не она, а как заставить работать надстройку. 

Share this post


Link to post
Share on other sites

5 minutes ago, artemkad said:

Смысл оптимизировать, если с одной стороны и так работает, а с другой работа периферии не освоена т.к. осваивалась не она, а как заставить работать надстройку. 

Во встраиваемых приложениях размер занятой памяти и скорость работы могут быть весьма критичны, а HAL часто занимается тасованием байтов по переменным, что ни память не экономит, ни время. Имея работающую программу, можно посмотреть содержимое функций HAL и переписать критичные куски вручную, напрямую управляя регистрами.

Share this post


Link to post
Share on other sites

27 минут назад, artemkad сказал:

Когда заработает

А если не заработает? 

"Не думай о микросекундах свысока" А если в циклограмму не успеваешь? Посмотрел как колбэки сделаны...

Share this post


Link to post
Share on other sites

12 минут назад, novikovfb сказал:

Во встраиваемых приложениях размер занятой памяти и скорость работы могут быть весьма критичны, а HAL часто занимается тасованием байтов по переменным

Тогда зачем его вообще осваивать? Может разумнее сразу заняться освоением периферии вместо освоения этой поделки?

12 минут назад, dOb сказал:

А если не заработает? 

Значит все время на освоения прокладки было затрачено зря.

Share this post


Link to post
Share on other sites

27 minutes ago, artemkad said:

Тогда зачем его вообще осваивать? Может разумнее сразу заняться освоением периферии вместо освоения этой поделки?

описание может быть довольно сумбурным: есть в регистре битовое поле MODE, а что оно означает - написать забыли или написали, но не указали, что для этого регистра. Или что для работы JTAG нельзя изменять некоторые биты в регистре, о чем в описании сказано в совсем другом разделе и можно про это забыть. И т.д. и т.п. В этом случае работающая реализация настроек дает конкретный пример, который можно переделать под свои нужды и радоваться

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...