Slavka_online
@Slavka_online
Интересная личность

Stm32 SPL или Регистры?

Добрый день, после lpc, захотелось познакомится с stm32, и тут возник вопрос, в lpc для работы всего и вся, я использовал настройку регистров через явное обращение к ним, в stm32 же есть удобная обертка SPL, так вот какой путь будет правельнее, писать как раньше или использовать удобную либу, на которую некоторые грешат?
  • Вопрос задан
  • 2948 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Mirn
SPL
плюсы:
1. Приемлемый уровень абстракции между разными камнями и семействами, есть мануалы как переводить софт с одного на другое семейство стм32 и в них описан ТОЛЬКО SPL
2. Он понятнее чем запись в регистры, особенно если нужно наработки использовать потом через пару лет или другим человеком.
3. Сама фирма производитель тестировала чипы именно на SPL и значит порядок работы с периферией что заложен в SPL даст существенно меньше глюков чем любой другой.
4. В SPL интуитивно понятный и можно писать "на деревню дедушке", т.е. DAC_deinit() например зная что ADC_DeInit() существует значит и другое есть
5. В SPL всё таки много наработок - в множестве функций есть очень тонкие моменты и ньюансы которые уже сделаны и при работе с регистрами на них точно напорешся и потратишь не одну неделю.

МИНУСЫ:
1. SPL медленный, особенно ножкодрыганье - но он для этого не предназначен вообще то и ждать от него скоростей в пару тактов глупо. Да и для 99% задач SPL достаточно быстр. Как решение проблемы использовать побитовый доступ для ножкодрыгания, или один раз через SPL настроил что надо, сохранил все значения регистров в временные переменные и одним memmove просто скопировал в блок регистров сразу всё - максимально быстро особенно для ДМА которой надо дофига всего сделать.
2. SPL толстый - жрёт много флеша, решается сия проблемма превращением части функций в инлайн вариант, тогда отпадают все проверки для всех блоков переферии и код уменьшается в 3-5 раз но только если он использован разово. Можно напороться на особенности инлайн функций и прочие недостатки. Но для 99% задач размера флеша хватает и садить SPL на диету не нужно или просто глупо.
3. код SPL громоздкий ... ну вы батенька WinAPI не видели и другие высокоуровневые языки.
4. SPL написан с учотом что кодить на нём будет профессионал Си и такие ляпы как забыть очистить структуру от мусора стека подразумевается что профессионал не сделает, но если новичок допускает их то сам дурак и можно долго на форумах вонять что SPL гавно - руки от этого не выпрямятся.
Ответ написан
@Eddy_Em
Для инициализации и не требовательных к скорости выполнения участков — opencm3, для критических вещей — регистры. Иного не дано.

HAL/Qube ни в коем случае не использовать.
Ответ написан
Комментировать
@Legath
На SPL сам ST уже грешит, поэтому придумали HAL. Но порой, ни там ни там не находится необходимых функций. Поэтому приходится делать огород из библиотеки и своих функций работы регистрами.
Ответ написан
Комментировать
AlanDrakes
@AlanDrakes
Сам пишу на какой-то дикой смеси из вырезок из HAL и самописных регистровых обращений. Вторые преобладают.
В некоторых местах архитектура самого HAL достаточно странная и ставит буквально в тупик. Например, ETH_HAL_ReceivePacket так и не удалось заставить работать по причине того, что он просто плохо описан.
Пришлось ваять свои шустрые велосипеды.
С отправкой было легче, но тоже перехожу на более легковесные свои функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы