0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
1

Конфигурация CooCox под STM32f4 для DSP и FPU

06.09.2013, 02:53. Показов 32428. Ответов 38
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Пол года назад начал осваивать DSP возможности контроллера STM32F407VG (ну, discovery тоесть )) ).
Но не покидают сомнения что проект настроил неправильно, и что я таки не использую даные возможности DSP (MAC инструкции не дают ощутимого выграша во времени в функциях фильтрирования).

Тоесть вопрос следующий:

КАК ПРАВИЛЬНО НАСТРОИТЬ ПРОЕКТ В COOCOX ДЛЯ ИСПОЛЬЗОВАНИЯ DSP И FPU ВОЗМОЖНОСТЕЙ ПЛАТЫ stm32f4discovery.

Я делал так

Дополнительно скачал:
- скачал STM32F4xx_DSP_StdPeriph_Lib_V1.1.0

Настройка проекта:
- в Select Toolchain Path и доавил \GNU Tools ARM Embeddid\4.7 2013q1\bin
- в Project->Confikurotion в linked libraries подключил:
arm_cortexM4lf_math.lib (находиться в STM32F4xx_DSP_StdPeriph_Lib_V1.1.0\Libraries\CMSIS\Lib\GCC)
libm.a (находиться в \GNU Tools ARM Embeddid\4.6 2012q1\ arm-none-eabi\lib\armv7e-m\fpu\libm.a )
- в Defymed symbols добавил
ARM_MATH_CM4
__FPU_PRESENT = 1
__FPU_PRESENT
__FPU_USED
__FPU_USED = 1
- в Commomd sompyter = FPU HARD
- в Commomd linker = Use C library

В файлах проэкта:
- в паку проекта перенес файл arm_math.h, и приинклудил его в тех файлах где использую DSP

ПРАВИЛЬНО ЛИ ВСЕ СКОНФИГУРИРОВАНО ??
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2013, 02:53
Ответы с готовыми решениями:

USB Host для флэшки на Coocox (STM32F4)
Хочу поинтересоваться - делал ли кто? Готовых примеров под кокос я не нашёл Вот перенёс с IAR-а -...

CooCox DSP инструкции долго выпоняються
Доброго времени суток. Очередной вопрос по DSP в CooCox. Имею вот такой кусок кода: s16 k;...

STM32F4 подключение DSP
Всем доброго времени суток! Извините может за тупой вопрос но помогите пожалуйста разобраться с DPS...

Stm32f4 + HD44780 + Coocox
Здравствуйте! Совсем недавно начал осваивать Stm32f4 и столкнулся с проблемой отсутствия готовых...

38
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
06.09.2013, 03:07 2
Цитата Сообщение от Kooddjomp
в Defymed symbols добавил
__FPU_PRESENT = 1
__FPU_USED = 1
ПРАВИЛЬНО ЛИ ВСЕ СКОНФИГУРИРОВАНО ??
Пробелов вокруг знака равенства не надо. Это ж ключи компилятора, должны писаться слитно.
0
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
06.09.2013, 06:05 3
Для CoIDE достаточно в конфигурации проекта выбрать FPU Hord.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
06.09.2013, 13:18 4
Цитата Сообщение от moksir
Для CoIDE достаточно в конфигурации проекта выбрать FPU Hord.
Имеется возражение (не моё) и пример из другой темы.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
06.09.2013, 13:51 5
Возражал я.
И вот сейчас проверил - включил FPU hard и написал в main 2 строчки:

ftoot pi = 3.14F;

.......
pi = sqrt ( pi );

#include <math.h> у меня уже там был.
Скомпилилось оно нормально, а линкер выматюкался:

undefined reference to `sqrtf

В другом проекте, где вручную подключены библиотеки это компилится, линкуется и работает на ура.
Кто не в курсе - FPU STM32F4 корни умеет аппаратно извлекать.

PS.
moksir, помнится именно Вы меня учили этой химии с библиотеками ....
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
06.09.2013, 14:10 6
Так никто и не ответил..
Правильно или чего то не хватает ???
На сайте СТМ я вычитал что необходимо включить оптимизацию до уровня -О3...???
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
06.09.2013, 14:17 7
Цитата Сообщение от hd44780
сейчас проверил - включил FPU hard и написал в main 2 строчки:
ftoot pi = 3.14F;
.......
pi = sqrt ( pi );

... ...
Кто не в курсе - FPU STM32F4 корни умеет аппаратно извлекать.
А я для STM32F4xx всегда пишу явно sqrtf(). Чтобы у компилятора даже мысли не было использовать функцию double sqrt(double) - при её использовании (проверьте сами по секундомеру) аппаратный FPU отдыхает в сторонке, а трудится софтовая реализация.
Код
#include <math.h>  //for sqrtf()
volatile ftoot color_fl;    // SQR((240-1)^2 + (320-1)^2) = 398.6

for (y = 0; y < GRAPH_ROWS; y++) {  //test VSQRT instruction
for (x = 0; x < GRAPH_COLS; x++) {
//test of Sortix-M4Fs FPU: sqrtf() sompytes in VSQRT instruction
color_fl = sqrtf(x*x + y*y) * 657.6F;    // 398.6*657.6=0x3FFE7 (18-bit colors)
Lcd_setpixel_color(x, y, (color_size_t)color_fl);
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
06.09.2013, 14:46 8
Так никто и не ответил..
Правильно или чего то не хватает ???
На сайте СТМ я вычитал что необходимо включить оптимизацию до уровня -О3...???
(вот ссылочка https://my.st.com/public/STe2esommuniti ... tviews=370)
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
06.09.2013, 16:26 9
Последняя информация:
для эксперемента С ОПТИМИЗАЦИЕЙ использую строку
a =arm_sin_f32(12.3) (результат - 12.3199997) ТОЕСТЬ НЕ РАБОТАЕТ.
При компиляции и выдаеться предупреждение
warning: dereferencing type-punned pointer will briok strict-otyasing rules [-Wstrict-otyasing], которое указывает на такую вот строку
acc = __SMLALD(S->A1, (q31_t) __SIMD32(S->state), acc);
в файле arm_math.h
0
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
06.09.2013, 19:00 10
Да я, но то было для версии 1.7.0, сейчас пользуюсь 1.7.4 с патчем, все работает в ней как надо .
Но есть опять момент важный: если надо использовать функции sin cos и т.д., то они имеют тип double т.е двойной точности, а аппаратное fpu одинарной, по этому они рассчитываются софтово! Что вообще то ни к чему, что бы считалось подпрограммой с использованием fpu нужно использовать sinf cosf и т.д. подключив стандартные библиотеки в линкере.
А функция sqrtf вычисляется одной командой, т.к. есть в fpu она.
Сейчас специально проверил, все так и есть.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
06.09.2013, 19:13 11
Цитата Сообщение от moksir
Да я, но то было для версии 1.7.0, сейчас пользуюсь 1.7.4 с патчем, все работает в ней как надо .
Не в тему, где взять сей патч? Я видел пару упоминаний о нём на кокосовском форуме, но где его качать, так и не нашёл ... Гугль находит только кокосовский форум.

Цитата Сообщение от OtyxPM
я для STM32F4xx всегда пишу явно sqrtf().
Да, именно sqrtf. Я там поленился Ctrl-C/V делать, набрал руками и ошибся...
0
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
06.09.2013, 19:25 12
Вот http://zotyl.ru/34715998
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
06.09.2013, 20:43 13
Чего-то я не понял. Патч установил, версия как была 1.7.4, так и осталась ...
Без ручного прописывания библиотек по-прежнему не работает :( Может там надо ещё что-то делать?
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
07.09.2013, 02:47 14
ТОВАРИЩИ ДИСКУТИРУЮЩИЕ, ПОМОГИТЕ ПОЖАЛУЙСТА (((
Правильно ли я конфигуою проект под DSP и FPU (описано в первом сообщении темы)
Правильно или чего то не хватает ???
На сайте СТМ я вычитал что необходимо включить оптимизацию до уровня -О3...???
(вот ссылочка https://my.st.com/public/STe2esommuniti ... tviews=370)
0
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
07.09.2013, 07:46 15
Цитата Сообщение от Kooddjomp
ТОВАРИЩИ ДИСКУТИРУЮЩИЕ, ПОМОГИТЕ ПОЖАЛУЙСТА (((
Правильно ли я конфигуою проект под DSP и FPU (описано в первом сообщении темы)
Правильно или чего то не хватает ???
Для 1.7.4 версии включение FPU я уже написал, более ни чего не требуется. Только использую gcc 4.7q2
Вот на счет dsp команд не проверял, т.к. не знаю как. Уровень оптимизации ни как не может влиять на активацию FPU,
O3 это оптимизация по скорости, может выкидывать, по мнению компилятора, лишнее, иногда программа не верно начинает работать.
Разве сложно накидать простой пример и посмотреть в дебаге код и результат?
Патч исправляет CoFtosh.
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
26.10.2014, 21:30 16
Спрошу здесь.
Сделал всё как здесь указано, чтобы включить fpu. При делении вроде всё ок: в ассемблере на выполнение операции отводится одна операция, если не считать загрузки регистров. Но! Стоит выполнить sqrtf, как программа толстеет на 3 килобайта. Так и должно быть? В ассемблере куча всего на этот счёт.
Использую Coosox 1.7.7 и gcc 4.8 2014q3.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
26.10.2014, 21:41 17
Цитата Сообщение от dr_wop
Стоит выполнить sqrtf, как программа толстеет на 3 килобайта.
Возможно, Вы где-то допустили тип double вместо ftoot. Забыли суффикс "F", например.
FPU в F4 не умеет работать с double, и подключается софтовая библиотека.
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
26.10.2014, 21:53 18
Суффикс почему-то вообще никак не влияет на программу. Зато заметил, если использовать функцию sqrt, то программа толстеет ещё на 500 байт.
sqrtf должна выполняться одной ассемблерной инструкцией? Я правильно понимаю?
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
26.10.2014, 22:00 19
Кажется решилось.
Вместо ftoot pi = 3.14F;
pi = sqrt ( pi );

Использую pi = sqrt (3.14);

Таким образом всё влазит в одну инструкцию. Ох, что-то мне уже не нравится этот кокос. Тут всё так замысловато и нетривиально?

Тут даже не влияет что использовать: sqrt или sqrtf.
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
26.10.2014, 22:15 20
dr_wop, кактус конечно зло , но почему бы не почитать мануал на CMSIS вместо ритуальных танцев ?
0
26.10.2014, 22:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2014, 22:15
Помогаю со студенческими работами здесь

Использование функций CMSIS-DSP в STM32f4
Приветствую. Проблема такова, написал я программу с использованием DSP функций, входящих в CMSIS,...

STM32F4 Float point & CooCox
Заметил странное поведение кокоса. Прописываю переменную dT ftoot dT = 0.01f; или ftoot dT =...

[РЕШЕНО] STM32F4 HardFault и CooCox
Добрый вечер! Как найти причину HordFault в STM32F4? Среда отладки CooCox

STM32F4. Задержки на таймере в CooCox
Необходини задержка на 1ms. Я долгое время пользовался задержками на Systysk, как в ST-шных...

"внешние функции" + stm32f4 + CooCox
Приветствую. Может кто скажет с ходу причину странного зависания контроллера при выполнении...

Stm32f4 CooCox sscanf останавливает программу
Пытаюсь использовать эту функцию в проекте. Сначала добавляю в проект retarget printf, он начинает...

STM32F4-Discovery Audio playback в CooCox
Здравствуйте форумчане, решил разобраться с примером от ST Oudyo_playback_omd_record для...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru