Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

STM32F103C8 DSP_Lib в разных IDE. Использование FFT.

Пт мар 02, 2018 14:05:47

Здравствуйте!
Столкнулся вот намедни с необходимостью использования FFT в своём проекте. Погуглил... Наткнулся на стандартную для ARM библиотеку - DSP_Lib, почитал доки. "Всё просто!" - подумал я, открыл CubeMX сделал для данного камня минимальную конфигурацию и сгенерировал проект для Keil, из примеров к библиотеке для использования Фурье выдрал два файла arm_fft_bin_data.c и arm_fft_bin_example_f32.c. В бесконечный цикл main.c добавил вызов основной функции из примера. В настройках проекта добавил использование DSP_Lib. И, собственно в Preprocessing Symbols в поле Define добавил ARM_MATH_CM3, для успешного компилирования проекта. Скомпилировав, Keil выдал такие значения:
Program Size: Code=8826 RO-data=12094 RW-data=8224 ZI-data=5120

Да, пример рабочий, вопросов к нему нет.
Далее... Приступил к использованию в примере функций RealFFT вместо ComplexFFT, для этого посредством CubeMX настроил АЦП и таймер для получения реального массива данных с АЦП, но даже простой вызов функции инициализации arm_rfft_fast_init_f32 без дальнейших каких-либо действий по работе с FFT, приводили к тому, что проект компилировался с Fatal Error - Memory Overflow. Тогда использовалась другая функция инициализации - arm_rfft_init_q15, в этом случае компиляция проходила до конца, но с размером flash аж 54кБ!. Естественно в бесплатном Keil, имеющим ограничение в 32кБ, уже ничего не сделаешь.
Тот же проект с самым первым и родным примером был перенесён в SW4STM32, добавлены в проект самые необходимые компоненты DSP_Lib и компиляция заканчивается словами
Description Resource Path Location Type
region `FLASH' overflowed by 173068 bytes fft test C/C++ Problem
- вот эти 173кБ - это то, что в Keil компилировалось вполне нормально с данными
Code=8826 RO-data=12094 RW-data=8224 ZI-data=5120
.
До этого SW4STM32 не использовал вообще, версия у него 1.8. С более новыми на Win XP имеются проблемы. Какие здесь подводные камни есть?
Да и вообще, понимаю что DSP - это не единственное решение, но по теме FFT что то совсем не густо в плане манёвров, ИМХО.
Что можете посоветовать на этот счет. Интересует банальное - преобразование Фурье массива полученного с АЦП.

Re: STM32F103C8 DSP_Lib в разных IDE. Использование FFT.

Пт мар 02, 2018 23:37:45

http://paulbourke.net/miscellaneous//dft/

Re: STM32F103C8 DSP_Lib в разных IDE. Использование FFT.

Сб мар 03, 2018 11:36:11

Хорошо, посмотрим...
----------
Вроде бы как для использования DSP_Lib в доках Кеил значится, что в проект нужно не сорцы добавлять, а библиотеку .lib в одноимённой папке. Если взять пак драйверов от STM для версии STM32F1xx - в ней содержится как сама DSP_Lib, так и просто папка Lib с либами для ARM и GCC. Из папки GCC беру libarm_cortexM3l_math.a и добавляю в проект SW4STM32 через Project -> Properties -> C/C++ General -> Paths & Symbols -> Libraries ну и собственно указываю путь к самой библиотеке, но при компиляции пишет, что библиотека cannot find. Тогда взял из папки ARM файл arm_cortexM3l_math.lib и провел такую же процедуру с добавлением (с удалением предыдущей) и при компиляции всё то же
Description Resource Path Location Type
cannot find -lD:/SW_proj/fft/Drivers/Lib/ARM/arm_cortexM3l_math.lib fft test C/C++ Problem

Что здесь не так?

Добавлено after 2 hours 57 minutes 49 seconds:
Всё ясно! :idea:
Линкер видит в названиях префиксы 'lib' и расширения *.a, посему нужно указать в Library Path путь к папке с либой, а в Libraries имя файла libarm_cortexM3l_math.a нужно написать как "arm_cortexM3l_math".
Далее при компиляции обязательно вылезет следующее:
11:29:17 **** Incremental Build of configuration Debug for project fft test ****
make all
'Building target: fft test.elf'
'Invoking: MCU GCC Linker'
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -L"D:\SW_proj\fft\Drivers\Lib\GCC" -specs=nosys.specs -specs=nano.specs -T"../STM32F103C8Tx_FLASH.ld" -Wl,-Map=output.map -Wl,--gc-sections -o "fft test.elf" @"objects.list" -l"arm_cortexM3l_math"
d:/ac6/systemworkbench/*самореклама*/fr.ac6.mcu.externaltools.arm-none.win32_1.7.0.201602121829/tools/compiler/bin/../lib/gcc/arm-none-eabi/5.2.1/../../../../arm-none-eabi/lib/armv7-m\libm.a(lib_a-wf_sqrt.o): In function `sqrtf':
wf_sqrt.c:(.text.sqrtf+0x7c): undefined reference to `__errno'
wf_sqrt.c:(.text.sqrtf+0x86): undefined reference to `__errno'
collect2.exe: error: ld returned 1 exit status
make: *** [fft test.elf] Error 1

11:29:18 Build Finished (took 1s.16ms)

Нужно снять галку Use C math library, а в библиотеки просто добавить библиотеку "m" (просто написать m, путь задавать не нужно, но обязательно после arm_cortexM3l_math)
Картинка прилагается.
Изображение
Результат:
'Generating binary and Printing size information:'
arm-none-eabi-objcopy -O binary "fft test.elf" "fft test.bin"
arm-none-eabi-size "fft test.elf"
text data bss dec hex filename
25616 8320 5672 39608 9ab8 fft test.elf

Re: STM32F103C8 DSP_Lib в разных IDE. Использование FFT.

Сб мар 03, 2018 15:06:18

Может пригодится https://github.com/andrewkirillov/AForg ... ansform.cs

Re: STM32F103C8 DSP_Lib в разных IDE. Использование FFT.

Сб мар 03, 2018 20:07:45

http://cvs.aiq.ru/

Re: STM32F103C8 DSP_Lib в разных IDE. Использование FFT.

Вт мар 06, 2018 08:34:32

https://hubstub.ru/stm32/149-stm32-byst ... -fure.html
Ответить