реклама на сайте
подробности

 
 
> Cortex-M4 SIMD инструкции, Вызов функции __QADD implicit declaration
Gleb80
сообщение Mar 3 2017, 14:10
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 25-09-08
Из: Москва
Пользователь №: 40 470



Приветствую, уважаемые!
Делаю проект для STM32F437 (Cortex-M4) в Keil MDK-ARM 5.23. Среди прочего, в проекте имеются такие строки:
Код
#define ARM_MATH_CM4
#include "arm_math.h"

arm_dot_prod_f32(a, b, c, d);

Все работает как задумано, но в процессе компиляции выскакивают предупреждения:
Код
../arm_math.h(4889): warning:  #223-D: function "__SMUAD" declared implicitly
../arm_math.h(5032): warning:  #223-D: function "__QADD" declared implicitly

и т.д. перечисляются все задействованные SIMD инструкции.
Вот тут сказано, что компилятор генерирует подобные ошибки или предупреждения если контролер, для которого генерируется код, не поддерживает этих инструкций. Но Cortex-M4 поддерживает и вообще все работает нормально. Более того, когда этот же проект компилировался на MDK 4.xx этих предупреждений не было.
В чем тут дело?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Mar 3 2017, 16:15
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Gleb80 @ Mar 3 2017, 16:10) *
В чем тут дело?
Надо изучать букварь по Си или гуглить "function declared implicitly". У вас (или у них) куда-то потерялось подключение (#include) заголовочного файла, в котором объявлены эти функции.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Gleb80
сообщение Mar 3 2017, 17:01
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 25-09-08
Из: Москва
Пользователь №: 40 470



Цитата(Сергей Борщ @ Mar 3 2017, 19:15) *
... куда-то потерялось подключение (#include) заголовочного файла, в котором объявлены эти функции.


Эти SIMD (Single Instruction Multiple Data) инструкции присутствуют в компиляторе как intrinsic (встроенные) функции. В заголовках есть такое место:
Код
#define __QADD  __qadd
#define __QSUB   __qsub
.... и т.д.


а __qsub говорит компилятору, что нужно вставить в машиннй код такую-то инструкцию, что и происходит, это по объектным файлам видно, и программа нормально работает. А вот откуда берутся предупреждения, непонятно....
Поправьте меня если я что-то неправильно понимаю.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 02:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016