Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Модератор
8195 / 6067 / 809
Регистрация: 14.02.2011
Сообщений: 21,034
1

HAL или SPL

26.06.2020, 19:16. Просмотров 162. Ответов 11
Метки нет (Все метки)

Цитата Сообщение от locm Посмотреть сообщение
В SPL это нагляднее и меньше лишнего кода.
SPL умер, и новые линейки не поддерживаются им
а лишний код это какой? assert _ы ?

 Комментарий модератора 
тема вычленена отсюда Не соответствие выходного напряжения на портах
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2020, 19:16
Ответы с готовыми решениями:

SPL и HAL для STM32 - зло или благо? (Холивар)
У меня - нейтральное отношение к данным библиотекам. Однако некоторым они позволяют облегчить...

STM32 HAL+SPL
Добрый день, подскажите возможно ли код из CubeMX впихать на SPL

CubeMX, HAL, LL libs, SPL(rip) etc. на чем остановиться?
Решил перейти на новый мк stm32l4 и для него уже нет SPL, но есть HAL, LL и по старинке можно...

hal.dll отсутствует или поврежден
Привет. проблема такого характера преустановливал на нетбуке систему (windows SP3), создал по всем...

11
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
26.06.2020, 19:27 2
Цитата Сообщение от ValeryS Посмотреть сообщение
новые линейки не поддерживаются им
Речь в теме про STM32F103C8T6, а для него есть SPL.
Цитата Сообщение от ValeryS Посмотреть сообщение
а лишний код это какой? assert _ы ?
Это когда "пустой проект" содержащий файлы HAL собирается в прошивку весом 16 КБ. Ладно "объектное болото" на компе (.NET и др.), но в МК это слишком!
0
Почетный модератор
11086 / 4058 / 388
Регистрация: 12.06.2008
Сообщений: 11,775
26.06.2020, 19:43 3
Цитата Сообщение от locm Посмотреть сообщение
В SPL это нагляднее и меньше лишнего кода.
SPL уже давно не поддерживается. Сейчас скачал для STM32F1 (он датирован 2011 годом) и увидел, что там даже поддержки USB нет. Лучше использовать HAL, который поддерживается и развивается. Да, библиотека HAL находится в архиве STM32CubeMX, но никто не заставляет использовать автоматический генератор. Можно взять только библиотеки и использовать их так же как SPL.

Добавлено через 7 минут
Цитата Сообщение от locm Посмотреть сообщение
Это когда "пустой проект" содержащий файлы HAL собирается в прошивку весом 16 КБ.
Вот смотрю заготовку своего проекта: подключены GPIO, RCC и UART. Плюс несколько функций в main.c. Размер 6.7 КБ. Сильно сомневаюсь, что SPL значительно отличается.
0
Модератор
8195 / 6067 / 809
Регистрация: 14.02.2011
Сообщений: 21,034
26.06.2020, 19:49  [ТС] 4
Цитата Сообщение от locm Посмотреть сообщение
Это когда "пустой проект" содержащий файлы HAL собирается в прошивку весом 16 КБ.
вот у меня сейчас тестовый проект содержит FreeRTOS, дисплей Nokia, 4 таймера, RTC, память на I2C, и еще по мелочи
без всяких сжатий
Program Size: Code=17056 RO-data=1744 RW-data=156 ZI-data=8180
что я делаю не так?
и потом ну 16 и что? памяти ведь хватает? это по моему болезнь 0x51 где экономили каждый байт

Добавлено через 2 минуты
Цитата Сообщение от locm Посмотреть сообщение
Это когда "пустой проект" содержащий файлы HAL собирается в прошивку весом 16 КБ.
боюсь что в настройках куба стоит копировать все библиотеки HAL и надо и не надо
пересмотри настройки чтобы копировалось только те библиотеки которые нужны

Добавлено через 3 минуты
Цитата Сообщение от Humanoid Посмотреть сообщение
Сейчас скачал для STM32F1 (он датирован 2011 годом) и увидел, что там даже поддержки USB нет.
USB есть, сам делал, но он идет другим пакетом, каким не спрашивай давно было не помню
но накручено там тоже ..... пока разобрался и то не до конца, где то колбеки нужны, где то свои функции
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
26.06.2020, 19:56 5
Цитата Сообщение от Humanoid Посмотреть сообщение
Сейчас скачал для STM32F1 (он датирован 2011 годом) и увидел, что там даже поддержки USB нет.
Поддержка USB не входила в SPL. Для нее другие библиотеки.

Цитата Сообщение от Humanoid Посмотреть сообщение
Лучше использовать HAL, который поддерживается и развивается.
Каждый выбирает сам. Лично я не вижу смысла в большем объеме кода, когда для многих моделей МК я могу писать с использованием SPL.

Цитата Сообщение от Humanoid Посмотреть сообщение
Вот смотрю заготовку своего проекта: подключены GPIO, RCC и UART. Плюс несколько функций в main.c. Размер 6.7 КБ. Сильно сомневаюсь, что SPL значительно отличается.
Размер будет 1.5 - 2 КБ.

Цитата Сообщение от ValeryS Посмотреть сообщение
и потом ну 16 и что? памяти ведь хватает? это по моему болезнь 0x51 где экономили каждый байт
Не стоит забывать о младших моделях в 16 КБ флеша.
0
Почетный модератор
11086 / 4058 / 388
Регистрация: 12.06.2008
Сообщений: 11,775
26.06.2020, 20:48 6
Цитата Сообщение от locm Посмотреть сообщение
Размер будет 1.5 - 2 КБ.
Сейчас специально попробовал. Полностью повторять не стал, а добавил только инициализацию GPIO. С такой же оптимизацией размер получился 5.4 КБ. Разница 1 КБ незначительна, учитывая то, что при последующем добавлении кода размер будет прибавляться примерно одинаково.
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
26.06.2020, 21:25 7
Цитата Сообщение от Humanoid Посмотреть сообщение
Полностью повторять не стал, а добавил только инициализацию GPIO. С такой же оптимизацией размер получился 5.4 КБ.
Должно быть намного меньше. Скиньте проект, посмотрю.
0
Почетный модератор
11086 / 4058 / 388
Регистрация: 12.06.2008
Сообщений: 11,775
26.06.2020, 22:42 8
Действительно, в HAL'овском проекте был отключен UART в конфиге, поэтому линковалась пустышка. Отключил и в SPL - размер уменьшился до 4.5 КБ против 6.7 КБ у HAL.

Для SPL:
268 байт вектор
68 байт reset handler
54 байт main.o
326 байт system_stm32f10x.o
648 байт stm32f10x_gpio.o
828 байт stm32f10x_rcc.o
Итого (не считая статических переменных): 2258 байт. Остальное добавляет компилятор.

Для HAL:
268 байт вектор
72 байта reset handler
56 байт main.o
164 байта system_stm32f1xx.o
468 байт stm32f1xx_hal.o
572 байт stm32f1xx_hal_cortex.o
780 байт stm32f1xx_hal_gpio.o
1868 байт stm32f1xx_hal_rcc.o
Итого (не считая статических переменных): 4248 байт. Остальное добавляет компилятор.

В общем, согласен, что HAL крупнее, чем SPL. Он изначально использует прерывания (как минимум для поддержки HAL_GetTick и HAL_Delay) и из-за этого пустой проект требует stm32f1xx_hal_cortex. Ну и отдельный функционал (например, RCC) оказался более тяжёлым. Не знаю, что там такого добавили, что размер так увеличился.

Модераторы, перенесите, пожалуйста, эти сообщения в отдельную тему, а то мы тут увлеклись споря про SPL и HAL Автору этот спор явно не нужен.
0
Вложения
Тип файла: zip tmp-hal.zip (284.1 Кб, 1 просмотров)
Тип файла: zip tmp-spl.zip (136.9 Кб, 1 просмотров)
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
27.06.2020, 01:27 9
Цитата Сообщение от Humanoid Посмотреть сообщение
Итого (не считая статических переменных): 2258 байт. Остальное добавляет компилятор.
Размер прошивки 1 КБ.

Цитата Сообщение от Humanoid Посмотреть сообщение
Итого (не считая статических переменных): 4248 байт. Остальное добавляет компилятор.
Размер 3.4 КБ.

Итого, даже на простом коде, HAL дает прирост прошивки в 3 раза.
0
Вложения
Тип файла: zip STM32F103C8T6.zip (513.3 Кб, 2 просмотров)
Модератор
8195 / 6067 / 809
Регистрация: 14.02.2011
Сообщений: 21,034
27.06.2020, 05:52  [ТС] 10
Цитата Сообщение от Humanoid Посмотреть сообщение
как минимум для поддержки HAL_GetTick и HAL_Delay
так не пользуйся
и вообще изначально речь шла не о HAL а о CubeMX, который генерит HAL листинг
так вот чтобы посадить ножку на 0 там есть такая функция
C
1
HAL_GPIO_WritePin(LedBoard_GPIO_Port, LedBoard_Pin, GPIO_PIN_RESET);
кто мешает сразу написать без функции
C
1
 LedBoard_GPIO_Port->BSRR = (uint32_t)LedBoard_Pin << 16U;
или даже так
C
1
 LedBoard_GPIO_Port->BRR = LedBoard_Pin ;

то же самое и с SPL, нужно ручками подделывать
0
Почетный модератор
11086 / 4058 / 388
Регистрация: 12.06.2008
Сообщений: 11,775
27.06.2020, 14:34 11
Цитата Сообщение от locm Посмотреть сообщение
Итого, даже на простом коде, HAL дает прирост прошивки в 3 раза.
Это не "даже". Это самый плохой вариант для сравнения, потому что сравнивается минимальный набор кода. Да, он у HAL больше (особенно, когда для HAL использовали HAL_Delay, а для SPL пустой цикл). Но по мере увеличения кода разница останется примерно такая же.
А что за опции линковщика "-eb_start_files" и "-eb_lib=n" ? Они только для HAL указаны и в код добавлено много функций от компилятора, которого нет для SPL. И, вообще, функция main для hal у вас получилась огромная. У меня в 3.5 раза меньше. С такими же опциями у меня hal получилася 4648, а spl 2428. Всё те же 2 КБ разницы. Видимо, компиляторы по-разному оптимизируют.

Да и вообще, главное - это функционал и правильность работы. Когда пользовались SPL (не помню, какая была версия), то помню, что пару ошибок находили, из-за которых потратили кучу времени. А если главная задача - это размер, то лучше работать через регистры и написать свои минималистичные функции.
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
27.06.2020, 15:06 12
Цитата Сообщение от Humanoid Посмотреть сообщение
И, вообще, функция main для hal у вас получилась огромная. У меня в 3.5 раза меньше.
Я использовал ваши фалы. В код изменений не вносил.

Цитата Сообщение от Humanoid Посмотреть сообщение
Когда пользовались SPL (не помню, какая была версия), то помню, что пару ошибок находили, из-за которых потратили кучу времени.
А сколько ошибок в HAL... Это одна из причин почему отказался от этой библиотеки и использую SPL.

Цитата Сообщение от Humanoid Посмотреть сообщение
А если главная задача - это размер, то лучше работать через регистры и написать свои минималистичные функции.
Это потребует больше времени. Не всегда обосновано.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.06.2020, 15:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Файл hal.dll поврежден или отсутствует
Здравствуйте. после очередных обновлений, не удается запустить windows из-за ошибки hal.dll ...

HAL.dll отсутствует или поврежден Windows 7 Home
Добрый всем день! В общем ситуация такая: на ПК с Windows 7 Home х64 в процессе установки...

Не найден или неисправен файл <Windows root>\system32\hal.dll
Создал новый раздел на жестком через gparted. После этого винда перестала грузиться. При запуске...

Не удается запустить Windows из-за испорченного или отсутствующего файла <windows root>\ system32\hal.dll
Здравствуйте умные люди. Решил написать какай я &quot;умный&quot; пользователь ПК. Вообщем проблема такая; на...

Не удается запустить Windows из-за испорченного или отсутствующего файла: Windows root\system32\hal.dll
Это катастрофа, не одно так другое, причем в 100 раз хуже!!! &quot;Не удается запустить Windows из-за...

Не удается запустить Windows из-за испорченного или отсутствующего файла: <Windows root>\system32\hal.dll
Купил нетбук без оптического привода с предустановленной пробной версией Win7. Решил установить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.