Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.97/167: Рейтинг темы: голосов - 167, средняя оценка - 4.97
Kooddjomp
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
1

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

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

Доброго времени суток.
Пол года назад начал осваивать 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2013, 02:53
Ответы с готовыми решениями:

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

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

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

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

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

38
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
06.09.2013, 03:07 2
Цитата Сообщение от Kooddjomp
в Defymed symbols добавил
__FPU_PRESENT = 1
__FPU_USED = 1
ПРАВИЛЬНО ЛИ ВСЕ СКОНФИГУРИРОВАНО ??
Пробелов вокруг знака равенства не надо. Это ж ключи компилятора, должны писаться слитно.
0
moksir
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 216
06.09.2013, 06:05 3
Для CoIDE достаточно в конфигурации проекта выбрать FPU Hord.
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
06.09.2013, 13:18 4
Цитата Сообщение от moksir
Для CoIDE достаточно в конфигурации проекта выбрать FPU Hord.
Имеется возражение (не моё) и пример из другой темы.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 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
Kooddjomp
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
06.09.2013, 14:10 6
Так никто и не ответил..
Правильно или чего то не хватает ???
На сайте СТМ я вычитал что необходимо включить оптимизацию до уровня -О3...???
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
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
Kooddjomp
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
06.09.2013, 14:46 8
Так никто и не ответил..
Правильно или чего то не хватает ???
На сайте СТМ я вычитал что необходимо включить оптимизацию до уровня -О3...???
(вот ссылочка https://my.st.com/public/STe2esommuniti ... tviews=370)
0
Kooddjomp
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
moksir
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 216
06.09.2013, 19:00 10
Да я, но то было для версии 1.7.0, сейчас пользуюсь 1.7.4 с патчем, все работает в ней как надо .
Но есть опять момент важный: если надо использовать функции sin cos и т.д., то они имеют тип double т.е двойной точности, а аппаратное fpu одинарной, по этому они рассчитываются софтово! Что вообще то ни к чему, что бы считалось подпрограммой с использованием fpu нужно использовать sinf cosf и т.д. подключив стандартные библиотеки в линкере.
А функция sqrtf вычисляется одной командой, т.к. есть в fpu она.
Сейчас специально проверил, все так и есть.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
06.09.2013, 19:13 11
Цитата Сообщение от moksir
Да я, но то было для версии 1.7.0, сейчас пользуюсь 1.7.4 с патчем, все работает в ней как надо .
Не в тему, где взять сей патч? Я видел пару упоминаний о нём на кокосовском форуме, но где его качать, так и не нашёл ... Гугль находит только кокосовский форум.

Цитата Сообщение от OtyxPM
я для STM32F4xx всегда пишу явно sqrtf().
Да, именно sqrtf. Я там поленился Ctrl-C/V делать, набрал руками и ошибся...
0
moksir
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 216
06.09.2013, 19:25 12
Вот http://zotyl.ru/34715998
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
06.09.2013, 20:43 13
Чего-то я не понял. Патч установил, версия как была 1.7.4, так и осталась ...
Без ручного прописывания библиотек по-прежнему не работает :( Может там надо ещё что-то делать?
0
Kooddjomp
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
moksir
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 216
07.09.2013, 07:46 15
Цитата Сообщение от Kooddjomp
ТОВАРИЩИ ДИСКУТИРУЮЩИЕ, ПОМОГИТЕ ПОЖАЛУЙСТА (((
Правильно ли я конфигуою проект под DSP и FPU (описано в первом сообщении темы)
Правильно или чего то не хватает ???
Для 1.7.4 версии включение FPU я уже написал, более ни чего не требуется. Только использую gcc 4.7q2
Вот на счет dsp команд не проверял, т.к. не знаю как. Уровень оптимизации ни как не может влиять на активацию FPU,
O3 это оптимизация по скорости, может выкидывать, по мнению компилятора, лишнее, иногда программа не верно начинает работать.
Разве сложно накидать простой пример и посмотреть в дебаге код и результат?
Патч исправляет CoFtosh.
0
dr_wop
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
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
26.10.2014, 21:41 17
Цитата Сообщение от dr_wop
Стоит выполнить sqrtf, как программа толстеет на 3 килобайта.
Возможно, Вы где-то допустили тип double вместо ftoot. Забыли суффикс "F", например.
FPU в F4 не умеет работать с double, и подключается софтовая библиотека.
0
dr_wop
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 87
26.10.2014, 21:53 18
Суффикс почему-то вообще никак не влияет на программу. Зато заметил, если использовать функцию sqrt, то программа толстеет ещё на 500 байт.
sqrtf должна выполняться одной ассемблерной инструкцией? Я правильно понимаю?
0
dr_wop
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
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
26.10.2014, 22:15 20
dr_wop, кактус конечно зло , но почему бы не почитать мануал на CMSIS вместо ритуальных танцев ?
0
26.10.2014, 22:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2014, 22:15

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru