fastLED для STM32

Slyden

✩✩✩✩✩✩✩
16 Окт 2021
10
3
Загорелся идеей портировать управление световыми эффектами с arduino где для эффектов используется библиотека fastLED на микроконтроллер STM32.
STM32 я знаю, пишу в нем на C.
Но библиотека fadtLED оказалась довольно непростая, в ней используется много функций с ассемблерными вставками.
И насколько мне известно такие функции так просто не перенести на другой МК не зная асемблера.
Не подскажете как выйти с этой ситуации?
Мне только для эффектов нужно, сам код для вывода на адресную ленту у меня есть, там это аппаратно делается без участия процессора, через DMA.
 

bort707

★★★★★★✩
21 Сен 2020
3,065
913
Но библиотека fadtLED оказалась довольно непростая, в ней используется много функций с ассемблерными вставками.
Библиотека FastLED поддерживает работу с парой десятков контроллеров, в том числе СТМ32.
Никаких ассемблерных вставок в этой части библиотеки нет.
Вы, наверно, смотрите ту часть библиотеки, что для АВР.
Загорелся идеей портировать управление световыми эффектами с arduino
не надо ничего портировать. Код световых эффектов запускается на СТМ практически без изменений
 
Изменено:

Slyden

✩✩✩✩✩✩✩
16 Окт 2021
10
3
не надо ничего портировать. Код световых эффектов запускается на СТМ практически без изменений
Тут следует уточнить что я имею ввиду не arduino STM32, а чистый код на С и библиотеки от STM такие как CMSIS/HAL/LL
 

bort707

★★★★★★✩
21 Сен 2020
3,065
913
@Slyden, я догадался.
Давайте сначала - какие функции ФастЛЕД вы собрались портировать? Функции вывода на ленту - те что "с ассемблерными вставками" - вам не нужны, вы сказали у вас есть свой код через ДМА.
А всякие прикладные методы ФастЛЕД, как и коды световых эффектов вообще не привязаны к типу контроллера, там чистый С и С++, непонятно, какие проблемы у вас с ним.
Все, что вам нужно сделать - это заменить в эффектах все вызовы библиотеки ФастЛЕД на свой код вывода на ленту.
 

Slyden

✩✩✩✩✩✩✩
16 Окт 2021
10
3
Ну например взять еффект огонь.
Если пройтись по цепочке вызовов то в конечном итоге мы упираемся в функцию с ассемблерной вставкой
 

Вложения

  • 409.4 KB Просмотры: 16

bort707

★★★★★★✩
21 Сен 2020
3,065
913
Разве это часть библиотеки ФастЛЕД ? Из какого файла?

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

В общем, возвращаясь к исходному вопросу
насколько мне известно такие функции так просто не перенести на другой МК не зная асемблера.
Не подскажете как выйти с этой ситуации?
таких функций в коде эффектов вам практически не встретится. Но если они все-таки попадутся - придется разбираться что они делают и либо заменять их аналогичными из тулчейна СТМ32, либо переписывать самому.
В качестве хорошей новости могу сказать. что переписывать эти куски на СТМ на ассемблере смысла нет, конктроллер достаточно быстрый
 
Изменено:

Slyden

✩✩✩✩✩✩✩
16 Окт 2021
10
3
В файле по пути \FastLED\src\fastled_progmem.h
есть вот такой дефайн
#define FL_PGM_READ_BYTE_NEAR(x) (pgm_read_byte_near(x))
который вызывает функцию pgm_read_byte_near
А вот она уже находится не в библитеке, а лежит по пути (это я смотрю проект лампы FireLamp_JeeUI )
\.platformio\packages\[email protected]\tools\sdk\libc\xtensa-lx106-elf\include\sys\pgmspace.h

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

bort707

★★★★★★✩
21 Сен 2020
3,065
913
pgm_read_byte_near(x)
лежит по пути
\.platformio\packages\[email protected]\tools\sdk\libc\xtensa-lx106-elf\include\sys\pgmspace.h
похоже вы не всю цепочку дефайнов раскрутили.
Путь, который Вы нашли - указывает на код для ЕСП8266. В то же время функция pgm_read_byte_near(x) используется в нескольких типах контроллеров, в том числе АВР
Кстати, в качестве подсказки - посмотрите, на что заменяется эта функция при компиляции для СТМ32. Может и не придется ничего выдумывать.