Top.Mail.Ru
Уведомления
Очистить все

Сообщество | Библиотеки для STM32 на C++

Страница 2 / 2
Эдуард
(@eduard)
Level 2 Moderator

Хочу посоветоваться

Это список библиотек, зависящих от ядра. Есть полностью готовые, есть готовые частично.

Это список библиотек не зависимых от ядра.
В какую сторону продолжать дальше двигаться?

Что нужнее?

ОтветитьЦитата
Topic starter Размещено : 27.02.2022 20:34
Aveal
(@aveal)
Top level Admin

Я думаю из периферии в первую очередь - таймер, USART, SPI. Из внешних устройств - дисплеи.

ОтветитьЦитата
Размещено : 28.02.2022 10:24
Эдуард
(@eduard)
Level 2 Moderator

Сегодня кое как допилил симбиоз I2C и EEPROM AT24Cxx.

Есть такие функции

    // Чтение/запись массива. Формат: Адрес в EEPROM, Буфер, Количество байт
    int16_t Read(uint16_t MemAddress, uint8_t* DataBuff, uint16_t Size);        // Чтение массива
    int16_t Write(uint16_t MemAddress, uint8_t* DataBuff, uint16_t Size);       // Запись массива

    // Чтение/запись одного байта. Формат: Адрес в EEPROM
    int16_t Read(uint16_t MemAddress);                                          // Чтение одного байта
    int16_t Write(uint16_t MemAddress, uint8_t Data);                           // Запись одного байта

Что ещё туда добавлять?

Пока меня прёт.

 

ОтветитьЦитата
Topic starter Размещено : 01.03.2022 20:38
Aveal
(@aveal)
Top level Admin

Тест

Проверяем уведомления на почту при новом ответе в теме.

ОтветитьЦитата
Размещено : 03.03.2022 11:26
Эдуард
(@eduard)
Level 2 Moderator

@aveal Тест прошёл.

Доделал сегодня датчики BME280, BMP280. По I2C.

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

 

ОтветитьЦитата
Topic starter Размещено : 03.03.2022 18:40
Aveal
(@aveal)
Top level Admin

@eduard Вот UART - это просто отлично, и датчики популярные 👍 

ОтветитьЦитата
Размещено : 03.03.2022 18:46
ll47
 ll47
(@ll47)
Level 1

Я провел сравнение по объему занимаемой памяти, что-то результат оказался не так внушителен, как я ожидал... Итак, первый проект - из этой статьи - вообще без изменений:

CPP

И я создал тестовый проект на HAL с инициализацией USART1 и отправкой 32 тестовых байт:

HAL

8.4 КБ флеша против 9.49 КБ.

ОтветитьЦитата
Размещено : 10.03.2022 13:58
Эдуард
(@eduard)
Level 2 Moderator

Вся идея не уменьшении кода, а удобстве пользования.

На МК с малым объёмом памяти - 16 и меньше, HAL забивает вообще 60%.
Здесь можно выборочно взять нужные библиотеки.

Кроме этого. Этот размер занимает вся откомпилированная библиотека. И уже работа с ней отъедает мизер памяти.

ОтветитьЦитата
Topic starter Размещено : 10.03.2022 18:46
ll47
 ll47
(@ll47)
Level 1
От: @eduard

Вся идея не уменьшении кода, а удобстве пользования.

На МК с малым объёмом памяти - 16 и меньше, HAL забивает вообще 60%.
Здесь можно выборочно взять нужные библиотеки.

Кроме этого. Этот размер занимает вся откомпилированная библиотека. И уже работа с ней отъедает мизер памяти.

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

ОтветитьЦитата
Размещено : 11.03.2022 11:27
Эдуард
(@eduard)
Level 2 Moderator
От: @ll47

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

У меня знакомец пишет на HAL.
Когда писал трёхфазный двигатель на таймере, инициализацию делал на HAL. А всё остальное на CMSIS. Почему то на HAL не хотело работать хоть тресни. А там всего то таблица синусов да перегон её в таймер через DMA.

Я то же начинал писать на HAL. Один раз столкнулся с тем, что HAL ни в какую не хотел запускать таймер в одноимпульсном режиме. Один раз запустил и больше не захотел. В чём дело, так и не нашёл.

А насчёт того, что Вы говорили, что переводить старые проекты на новый тип программирования. Зачем. У меня запущен проект на чистом HAL. Потом появились проекты где я HAL обернул в классы. Потом начал куски HAL переводить на прямую работу с регистрами. А потом просто начал писать библиотеки и постепенно в каждом следующем проекте доля написанных библиотек увеличивалась.

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

ОтветитьЦитата
Topic starter Размещено : 11.03.2022 17:27
Борис Д.
(@boris-d)
Level 0

Случайно наткнулся на этот цикл статей, автору респект громадный, делает свои библиотеки, делится ими, так еще и описывает в статьях.

ОтветитьЦитата
Размещено : 23.03.2022 10:11
Эдуард
(@eduard)
Level 2 Moderator

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

У вас могут возникнуть проблемы с компиляцией. Например есть ядро, для которого не написан SPI, а в библиотеке лежит драйвер дисплея работающего по SPI, компилятор будет ругаться.

Вот здесь ругается на драйвер дисплея:

Заметьте, что крестик стоит напротив *.h и *.cpp, чаще всего он стоит напротив *.h файла.

Что бы этого не происходило, необходимо исключить библиотеку из компиляции.

Делается это таким образом:

Правой кнопкой мыши щёлкаем на соответствующем *.cpp файле и выбираем

Ставим галочки и нажимаем ОК. Больше он нам мешать не будет. Так делается на всех файлах, на которые будет ругаться.

Есть нюансик с SPI. Драйвер зависимый от ядра лежит в каталоге драйверов. "Софтварный" SPI лежит в каталоге библиотек. Вместе они компилиться не будут. Так как они одинаковы по структуре и переменным. Только часть отвечающая за передачу разная. Поэтому нужно исключить из компиляции именно тот, который не собираетесь использовать. Позже могут ещё появиться такие дубликаты. С ними придётся поступать так же.

ОтветитьЦитата
Topic starter Размещено : 10.09.2022 13:57
Страница 2 / 2
Поделиться: