|
STM32: регистровый CMSIS или высокоуровневый HAL ?, ПРосто выскажите аргументы за или против, пожалуйста, без холивара |
|
|
|
Nov 4 2015, 07:39
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Здравствуйте, В очередной раз хочется что-то улучшить, попробовал взять от жизни от Куба и STM программистов побольше. Попробовал автоматом сгенерированный проект- На нужном мне (незнакомом до этого) STM32F0 камне поставить FreeRTOS и в одной из задач помигать светодиодом- заняло примерно пару часов вместе с установкой новой версии кейла и Куба. Причем править ничего не пришлось, ну дописал в задачу функцию "HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);" для моргания и все. Причем задача тоже была создана из конфигуратора Куба. Поспрашивал окружающих программеров, почему же все-таки CMSIS применяют? Были высказаны причины: 1. HAL заточен под Кейл и не работает с другими компиляторами. 2. если переходить от STM на другие, то придется переписывать, а CMSIS- он стандарт Но, на мой взгляд- совсем не аргументы, если создается конкретное изделие или линейка. Если нужно будет переходить на нечто другое- то никакой CMSIS не поможет, все равно обновлять и переписывать какие-то куски придется. Ну а про заточенность под конкретный компилятор- ну так я одним пользуюсь при работе, а не создаю универсальный демо-проект для интернет-сообщества. Найденные мной в интернете недостатки HAL (как и его предшественника, SPL): 1. Избыточность сгенерированного кода. Начитался в интернете про "бесконечные перепроверки", но в самом коде HAL увидел, что они зависят от дефайна "USE_FULL_ASSERT. Может, те кто пишет про перепроверки просто не знают о возможности их отключения? Ну и в HAL многое через структуры делается, это как бы много лишнего кода. Но как по мне- совсем не минус при отладке, я структуры очень люблю, они мне и при использовании камней с считанными сотнями байт RAM не мешали, не то что с килобайтами. 2. Сложность и многоуровневость (и засчет этого низкое быстродействие) критических частей- например, при использовании прерываний. Вроде бы через коллбеки и так далеее и получается не просто, а наоборот запутанно. 3. Непереносимость. А что, CMSIS переносим между изготовителями и править в регистрах ничего не нужно? 4. Наличие большого количества глюков в HAL. Мда? 5. неполный доступ к ресурсам. Ну так всегда можно уйти на нижний уровень. Из личного, достоинства HAL: 1. скорость написания работающего кода 2. малый размер пользовательской части программы 3. читабельность. Так за что же не любят HAL? Я не новичок в программировании МК, но не понимаю, почему нужно по старинке в каждый регистр лезть при выполнении стандартных процедур (CMSIS), а не пользоваться высокоуровневой оберткой этого же действа (HAL)? Прошли те времена, когда на асме писали и биты (не байты!) экономили, железо подешевело, зато себестоимость времени разработчика увеличилась. Ну и, опять же, почему я не могу типичную часть программы сделать на HAL (применив, по сути, готовое), а критические участки выполнить на низкоуровневом CMSIS ? почему CMSIS и HAL противопоставляют друг другу, как по мне- так они отлично сочетаются. Любое HAL-действо может быть переписано на низкий уровень, но только когда это нужно, а не вся программа сразу на CMSIS, или я не прав? В-общем, кто что знает? В основном, нужно отговорить от использования STM32 HAL, который я сейчас считаю очень удобным и полезным средством, но вдруг ошибаюсь. Upd: позволю процитировать, очень близко к тому что я думаю (автор- hd44780, но прочитано на другом форуме) Цитата CMSIS - это не HAL, это та же прямая работа с регистрами. И если Вы через год начнёте читать, то CMSIS Вас не спасёт от чтения ДШ. Поэтому вопрос переформулируется как SPL или регистры. А это уже религия, по поводу которой вылита бездонная бочка разного холивара и даже личных оскорблений и всё равно каждый при своём. Поэтому пишите на чём хотите. Как Вам удобнее. Лично я люблю SPL. С её тормозами столкнулся всего лишь раз. Ну и переписал этот кусочек на регистрах  . Но это не повод "огульно охаивать" весь SPL. Багов в ней пока не находил. Ещё, за что ругают SPL, это большой объём результирующего кода. Да, это так. Согласен. Но если моя прошивка занимает 200 кил из мегабайта или двух флэша проца, то почему нет? Это как девушки - кому брюнетки, кому блондинки. А кому и те и те  .
|
|
|
|
|
 |
Ответов
|
Nov 8 2015, 14:49
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Много написано, прочитал по диагонали, потому могу и повторить чьти-то слоа - извините уж. ТС, вы вот пишите в заголовке Цитата пожалуйста, без холивара а в теме что за хрень: Цитата Прошли те времена, когда на асме писали и биты (не байты!) экономили, железо подешевело, зато себестоимость времени разработчика увеличилась. не надо себя преподносить за всех. и цитату привели и обсосано везде: разные есть применения. если вы не получаете по жопке за лишний использованный байт, то у вас работа отличается от того кто получает по этой самой жопке. достали уже "медийщики" мнящие себя эмбеддеррами. используйте рпи. они вообще дешевле грязи и мощи поболе чем в стм32. И по сути: HAL или SPL? Баги есть и там, и там. Кишки ковырять можно и там, и там. Странно, что опытные разработчики(а может "опытные") всё чаще задают такой вот вопрос. Разработчик выбирает не библиотечку, а парадигму, которой он будет придерживаться. Если вы будете ковырять кишки HAL, то он вам не нужен, он не для этого написан. Разработчик может использовать много всяких инструментов. Тот же редактор или IDE. Вы же не спрашиваете на форуме какой редактор лучше: kwrite или gedit? Это тупо. Вы читаете документацию, сравниваете возможности или, если информации слишком много(как редакторов под линукс), то спрашиваете: подскажите редактор с подсветкой выделенной части слова. Профессиональные навыки - это тоже как маленький организм в вашем организме: идейная направленность, приемлемые парадигмы, освоенные приёмы, направление упоротости или "религиозная" предвзятость. Обычно у опытного разработчика не встаёт вопрос, что именно использовать. Если перефразировать немного, то получится вот такое содержание подобных тем: Цитата опытный: годами работал молотком, вот понравилось работать кувалдой. но другие говорят, что это ламерство и ей не надо привыкать работать. подскажите чем лучше забить гвоздь. тролль1: головой. гуру1: я уже 30 лет аккуратно вставляю гвозди руками. это медленно, но надёжно: не повреждается структура дерева, нет дополнительных затрат энергии на взмахи. гуру2: достали малыши. какого размера гвоздь? куда вбивать? какие допустимые вибрационные нагрузки? и т.д. и т.п. вы выбираете молоток, а не молоток вас. есть поставленная задача, есть сложившийся собственный стиль. задачу можно решить несколькими способами: а) старый инструмент, старый стиль: б) новый инструмент, компромисс между парадигмами использования нового инструмента и своими стилем; в) полная внутренняя перенастройка на новые парадигмы, отвергание своего прошлого стиля. можно вести себя консервативно, можно бить энтузиазмом изо всех щелей и каждый раз в поиске нового стиля принимать новые парадигмы. не думаю, что плохо то или другое. главное как им владеет носитель. И, естественно, приведу примеры. 1. Попросили человека написать программу для МК. Он был из типа малоопытный консерватор. Т.е. на асме, с использованием сторонних библиотек, за которые он не несёт ответственности. Т.е. из-за того, что человек не захотел переучиться на ЯВУ, надо было ждать, а потом проверять - правильно ли он написал умножение uint32 и int32. 2. Мне необходимо было ускорить некий код под AMD64: эмуляция TLB другого процессора. После мытарств: D, C++, C, решено было сделать на асме. Потрачено два дня на изучения особенностей AMD64 и написание кода. Здесь следует заметить, что у меня были эти два дня, чётко выделенные на подобное исследование. В большинстве случаев у разработчика нет этого времени и он вынужден быть консерватором по неволе. И результат - написал так же как "gcc -O2". С точки зрения продвижения проекта - два дня в трубу. Но в личном опыте появилась строка - не надо пихать асм куда надо и не надо, если ты хорошо владеешь ЯВУ. Т.е. не используй чужой опыт и инструмент, если недостаточно хорошо им владеешь. Сначала научись одинаково владеть обоими инструментами и при постановке задачи будешь знать какой использовать. 3. Вот тут, кстати, раскрою ещё и вопрос поддержки. Нужен был USB-Audio для stm32f4. STM сказал адью и запилил это уже в кубе. Программа, в которую это надо добавить уже есть, т.е. под кубы и халы переписывать готовую программу в сжатые сроки никто не будет. Берём USB из кубохала, перепиливаем под SPL. И ещё оптимизируем работу с буферами вывода. В данном случае произошло смешение парадигм, но с уклонном в собственную. 4. И пример полного принятия чужой парадигмы(для баланса)) ). Это когда после WinThreads или POSIX Threads ты пробуешь Qt'шные слоты. Но сама идея так делать хороша и это очень удобно(там где уместно). И данная парадигма принимается, без консервативного пихания потоков на любой чих. холивар? ну вы сами начали.
|
|
|
|
Сообщений в этой теме
Ruslan1 STM32: регистровый CMSIS или высокоуровневый HAL ? Nov 4 2015, 07:39 murmur подпишусь на тему. Nov 4 2015, 08:23 ШСА Цитата(murmur @ Nov 4 2015, 11:23) подпиш... Nov 4 2015, 08:30  Ruslan1 Цитата(ШСА @ Nov 4 2015, 10:30) Я тоже, н... Nov 4 2015, 08:39  Tarbal Цитата(ШСА @ Nov 4 2015, 11:30) Я тоже, н... Nov 26 2015, 02:58   rudy_b Цитата(Tarbal @ Nov 26 2015, 05:58) ...
Ч... Nov 26 2015, 14:55 Сергей Борщ Цитата(Ruslan1 @ Nov 4 2015, 10:39) 1. Из... Nov 4 2015, 08:41 ViKo Cube и его HAL никак не связаны с Keil, они создан... Nov 4 2015, 09:07 Ruslan1 Еще один минус HAL в голову пришел- время жизни (п... Nov 4 2015, 09:45 esaulenka Нафиг-нафиг это HAL.
В случае "что-то пошло н... Nov 4 2015, 10:03 Corvus Цитата(esaulenka @ Nov 4 2015, 13:03) Еще... Nov 4 2015, 10:30  Огурцов в кубе докопаться до дна - сложнее, приходится вер... Nov 4 2015, 10:37 MiklPolikov Цитата(esaulenka @ Nov 4 2015, 13:03) Наф... Nov 9 2015, 01:19  ViKo Цитата(MiklPolikov @ Nov 9 2015, 04:19) Д... Nov 9 2015, 05:31 Integro Цитата1. HAL заточен под Кейл и не работает с друг... Nov 4 2015, 11:51 _Pasha Цитата(Integro @ Nov 4 2015, 15:51) В люб... Nov 4 2015, 15:05  Огурцов Цитата(_Pasha @ Nov 4 2015, 16:05) xml-... Nov 4 2015, 15:51   Ruslan1 Ну что же, немного прояснил кое-что для себя
1. Не... Nov 4 2015, 17:49 rudy_b HAL прекрасно работает с IAR, и, на мой взгляд, ве... Nov 4 2015, 15:31 Эдди Советую для начала взять libopencm3, а потом потих... Nov 4 2015, 20:11 AlexandrY Цитата(Эдди @ Nov 4 2015, 22:11) Советую ... Nov 4 2015, 21:08  toweroff Цитата(AlexandrY @ Nov 5 2015, 00:08) Дву... Nov 4 2015, 22:18   Ruslan1 Извините, а libopencm3 под кейлом будет работать?
... Nov 4 2015, 22:20    esaulenka Цитата(Ruslan1 @ Nov 5 2015, 01:20) Извин... Nov 5 2015, 06:19     Ruslan1 Цитата(esaulenka @ Nov 5 2015, 08:19) Бук... Nov 5 2015, 07:03    _Pasha Цитата(Ruslan1 @ Nov 5 2015, 02:20) Извин... Nov 5 2015, 10:25  Эдди Цитата(AlexandrY @ Nov 5 2015, 00:08) Дву... Nov 5 2015, 05:57   AlexandrY Цитата(Эдди @ Nov 5 2015, 07:57) При чем ... Nov 5 2015, 07:33    esaulenka Цитата(AlexandrY @ Nov 5 2015, 10:33) А в... Nov 5 2015, 08:03     AlexandrY Цитата(esaulenka @ Nov 5 2015, 10:03) А в... Nov 8 2015, 15:43    Эдди Цитата(AlexandrY @ Nov 5 2015, 10:33) А в... Nov 5 2015, 12:05 Ruslan1 Цитата(Эдди @ Nov 4 2015, 22:11) Советую ... Nov 4 2015, 21:36 Genadi Zawidowski В проекте с цифровой обработкой звука применяется ... Nov 5 2015, 07:47 yes про HAL
в драйвере CAN-а HAL_UNLOCK не вызывается... Nov 5 2015, 12:30 rudy_b Цитата(yes @ Nov 5 2015, 15:30) в драйвер... Nov 5 2015, 22:33  _Pasha Цитата(rudy_b @ Nov 6 2015, 02:33) HAL по... Nov 6 2015, 07:09   Ruslan1 Цитата(_Pasha @ Nov 6 2015, 09:09) Ужас. ... Nov 6 2015, 07:51 Ruslan1 Цитата(smalcom @ Nov 8 2015, 16:49) холив... Nov 8 2015, 16:19  zltigo QUOTE (Ruslan1 @ Nov 8 2015, 18:19) я зак... Nov 8 2015, 18:58   Ruslan1 Цитата(zltigo @ Nov 8 2015, 20:58) Вообще... Nov 8 2015, 20:10    zltigo QUOTE (Ruslan1 @ Nov 8 2015, 22:10) Лично... Nov 9 2015, 06:43     ViKo Цитата(zltigo @ Nov 9 2015, 09:43) Хороши... Nov 9 2015, 07:17      Ruslan1 В-общем, HAL я обошел стороной, но решил хоть ... Nov 18 2015, 22:31 smalcom забавно, а теперь покажите где там провокация. кро... Nov 8 2015, 21:12 rudy_b SPL тоже не подарок и ошибок в ней много. Мусора п... Nov 19 2015, 04:01 Ruslan1 Цитата(rudy_b @ Nov 19 2015, 06:01) SPL т... Nov 19 2015, 11:22  AHTOXA Цитата(Ruslan1 @ Nov 19 2015, 16:22) Одна... Nov 21 2015, 04:23   ViKo Цитата(AHTOXA @ Nov 21 2015, 07:23) Это 2... Nov 21 2015, 06:18   Ruslan1 Цитата(AHTOXA @ Nov 21 2015, 06:23) Это 2... Nov 21 2015, 08:11    AHTOXA Цитата(Ruslan1 @ Nov 21 2015, 13:11) Как ... Nov 21 2015, 08:37     Ruslan1 Цитата(AHTOXA @ Nov 21 2015, 10:37) Да, я... Nov 21 2015, 09:33 ViKo USART_GetITStatus(USART2, USART_IT_TXE) - это функ... Nov 21 2015, 12:59 Tarbal Спасибо.
Надо будет переписать.
Получается по фла... Nov 26 2015, 19:01 Tarbal Не успел переписать
Они уже сами починили. Кстати... Nov 26 2015, 20:57 rudy_b Цитата(Tarbal @ Nov 26 2015, 23:57) Не ус... Nov 27 2015, 02:47  Tarbal Цитата(rudy_b @ Nov 27 2015, 06:47) Выгля... Nov 27 2015, 04:46   rudy_b Ох, не торопитесь апгрейтить Cube, в последней вер... Nov 28 2015, 16:00 x893 Теоретики - как завидую Вам Nov 26 2015, 22:07 Tarbal Цитата(x893 @ Nov 27 2015, 01:07) Теорети... Nov 27 2015, 01:25 Jenya7 лично мои впечатления.
ни с STM32 ни с HAL ни с SP... Nov 29 2015, 12:20 Allregia Цитатасобирал проект на HAL. два дня собирал. собр... Nov 29 2015, 15:56 Jenya7 Цитата(Allregia @ Nov 29 2015, 20:56) Это... Nov 29 2015, 17:01 Bloom Я в проектах часто использую Chibios и, соотвестве... Dec 7 2015, 05:40 yanvasiij Добавлю свои пять копеек. Как мне кажется использо... Apr 16 2016, 11:08 x893 C HAL просто начать, но там нет нужных функций. Дл... Apr 16 2016, 20:42 makser Я свои проекты делаю на SPL, потеря в тактах и бай... Apr 24 2016, 10:58 x893 Мне по барабану регистры, SPL, HAL - у меня код ап... Apr 24 2016, 17:30 zltigo QUOTE (x893 @ Apr 24 2016, 20:30) Мне по ... Apr 24 2016, 21:22 x893 Это легко сравнивается через DWT, таймером, профай... Apr 24 2016, 23:13 alexp74 Ковырял stm32f4xx_hal_eth.c и нашел интересный мом... May 14 2016, 09:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|