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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
2sandro
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Ср май 17, 2017 08:34:57
Откуда: Никополь
Контактная информация:

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

Сообщение 2sandro »

Здравствуйте!
Столкнулся вот намедни с необходимостью использования 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 что то совсем не густо в плане манёвров, ИМХО.
Что можете посоветовать на этот счет. Интересует банальное - преобразование Фурье массива полученного с АЦП.
Реклама
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

Иван Сусанин - первый полупроводник :solder:
Реклама
Аватара пользователя
2sandro
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Ср май 17, 2017 08:34:57
Откуда: Никополь
Контактная информация:

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

Сообщение 2sandro »

Хорошо, посмотрим...
------------------------------------------
Вроде бы как для использования 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
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

Иван Сусанин - первый полупроводник :solder:
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

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

Сообщение 240265 »

IVL ex UA6PJ
Реклама
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

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

Сообщение 240265 »

IVL ex UA6PJ
Реклама
Ответить

Вернуться в «ARM»