|
GCC ARM - не имплементируются функции SIN, COS, arm-none-eabi |
|
|
|
Oct 1 2017, 07:34
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Здравствуйте. Скачал и поставил, затем ребутнул (для переменных окружения) GCC-тулчейн: gcc-arm-none-eabi-6-2017-q2-update-win32.exe Затем написал программу тект ниже: Код #include <math.h>
float a=1.2F; float b=3.21F; float c=0.0F;
void main(void) { c=sin(a+b); b=cos(a+c); } Построил бинарник и все необходимые файлы командами: Код arm-none-eabi-gcc -std=c99 -march=armv7-a -mfloat-abi=hard -mfpu=vfpv4 -c fpu.c -o fpu.elf -lm arm-none-eabi-objdump -D fpu.elf > fpu.asm arm-none-eabi-objcopy -O binary fpu.elf fpu.bin При просмотре листинга видно, что функции sin( ) и cos( ) НЕ ИМПЛЕМЕНТИРОВАЛИСЬ, вместо них стоит переход: Код 18: e3403000 movt r3, #0 1c: edd37a00 vldr s15, [r3] 20: ee777a27 vadd.f32 s15, s14, s15 24: eef70ae7 vcvt.f64.f32 d16, s15 28: eeb00b60 vmov.f64 d0, d16 2c: ebfffffe bl 0 <sin> ----------------------------- !!! нет вызова 30: eef00b40 vmov.f64 d16, d0 34: eef77be0 vcvt.f32.f64 s15, d16 38: e3003000 movw r3, #0 3c: e3403000 movt r3, #0 40: edc37a00 vstr s15, [r3] 44: e3003000 movw r3, #0 48: e3403000 movt r3, #0 4c: ed937a00 vldr s14, [r3] 50: e3003000 movw r3, #0 54: e3403000 movt r3, #0 58: edd37a00 vldr s15, [r3] 5c: ee777a27 vadd.f32 s15, s14, s15 60: eef70ae7 vcvt.f64.f32 d16, s15 64: eeb00b60 vmov.f64 d0, d16 68: ebfffffe bl 0 <cos> ----------------------------- !!! нет вызова Других тулчейнов нет, пробовал soft-fpu, ничего не меняется, функции из math.h не имплементируются вообще! Залез в папки тулчейна, так там libm.a несколько штук: ...\GCCARM\arm-none-eabi\lib\libm.a ...\GCCARM\arm-none-eabi\lib\thumb\libm.a ...\GCCARM\arm-none-eabi\lib\thumb\v7-ar\libm.a ...\GCCARM\arm-none-eabi\lib\thumb\v7-ar\fpv3\hard\libm.a ...\GCCARM\arm-none-eabi\lib\hard\libm.a У меня нет слов, одни эмоции (касаемо GCC тулчейна)! Помогите плиз, нужен хардварный синус/косинус для ядра Cortex-A7, VFPv4 или NEON - для floating point, как решить проблему?
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Oct 1 2017, 09:59
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Цитата(scifi @ Oct 1 2017, 09:49)  Короче, сделайте свой синус, кто же мешает? Подсунуть свою функцию вместо библиотечной - дело нехитрое, ЕМНИП. Я с вами согласен, но ломается сам кайф от использования ЯВУ. И GCC тут - явный чемпион (по обломам). И программа с 0x8000 пошла, а не с 0. И куча лажи прошилось: init, exit, register_fini, __do_global_dtors_aux,.......... - и куча всего ненужного! А хотелось только sin/cos из libm.a !!! GCC поддерживает вырезание ненужного кода/данных? Цитата(scifi @ Oct 1 2017, 09:52)  А если вот это: gcc-linaro-6.3.1-2017.05-i686-mingw32_arm-eabi.tar.xz Ну блин, нельзя же так  Я это понял как компилятор для сборки ARM- и MINGW- приложений... Под Линуксом... Качаю сейчас его, посмотрим. Это я тупой или линуксоиды слишком умные? Почему когда соприкасаешься с GCC, то он кроме негативных реакций ничего не вызываeт? ARM GCC, что и Кокос(cookox) - дерьмо полнейшее. Последний умер, правда.
Сообщение отредактировал __inline__ - Oct 1 2017, 09:56
|
|
|
|
|
Oct 1 2017, 10:09
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата(__inline__ @ Oct 1 2017, 13:03)  За ключи - спасибо!  Попробую! А про f в конце в курсе. Про "в курсе" из кусков кода видно небыло. Вот скрипты из моего проекта. тулчейн отсюда.
Сообщение отредактировал Genadi Zawidowski - Oct 1 2017, 10:15
|
|
|
|
|
Oct 1 2017, 10:14
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Цитата(Genadi Zawidowski @ Oct 1 2017, 10:09)  Про "в курсе" из кусков кода видно небыло. Вот скрипты из моего проекта. Ещё раз - спасибо! Кстати, тот GCC что я скачал - не имеет утилиты make, как я буду по макам собирать - это загадка, сдела сейчас батник, но для больших программ так не годится. Больше всего меня убивает, что когда возишься с GNU, то пляска с докачкой дополнительных утилит и обвесами патчей - гарантирована! Такого нет ни в одной другой среде программирования, даже OpenWatcom по сравнению с GCC - это как небо и земля
|
|
|
|
|
Oct 1 2017, 10:23
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Цитата(Genadi Zawidowski @ Oct 1 2017, 10:09)  Вот скрипты из моего проекта. тулчейн отсюда. У меня такой же тулчейн, последняя версия
|
|
|
|
|
Oct 1 2017, 10:26
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(__inline__ @ Oct 1 2017, 13:14)  Кстати, тот GCC что я скачал - не имеет утилиты make, как я буду по макам собирать - это загадка, сдела сейчас батник, но для больших программ так не годится. Можно скачать отсюда. Цитата(__inline__ @ Oct 1 2017, 13:14)  Больше всего меня убивает, что когда возишься с GNU, то пляска с докачкой дополнительных утилит и обвесами патчей - гарантирована! Это потому, что не под линухом. Там всё уже есть. И звените.
|
|
|
|
|
Oct 1 2017, 10:31
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Цитата(Genadi Zawidowski @ Oct 1 2017, 10:22)  мэйк у меня от Atmel-овского тулчейна есть... можно yagarto-всктм yagarto-tools-20121018-setup.exe воспользоваться (правда тут http://www.yagarto.org/ или тут http://www.emb4fun.de/ я его уже не нашел). Про make.exe от Атмела: Atmel AVR 8-bit and 32-bit Toolchain 3.4.2 - Windows http://www.atmel.com/images/avr-toolchain-...2.win32.x86.exeДля обеспечения работы под x64 версиями Windows 8.x, Windows 10 скачать http://www.madwizard.org/download/electron...1.0-vista64.zipИ разархивировать msys-1.0.dll в тот же каталог, где находится make.exe Или взять данный файл (или целиком пакет) с download page проекта MinGW - Minimalist GNU for Windows http://sourceforge.net/projects/mingwНикогда не думал, что make от других тулчейнов может подойти. Ранее качал mingw для win32 - сборка от MAMEspirits - впечатления самые приятные - засунули даже Netwide Assembler и кучу библиотек. А вот в стандартном тулчейне mingw много чего не хватало, пришлось выкачивать почти пол-интернета, чтобы портировать. Но это была платформа Win32, сейчас вот с АРМ-ами надо разобраться Цитата(scifi @ Oct 1 2017, 10:26)  Можно скачать отсюда. Это потому, что не под линухом. Там всё уже есть. И звените. Под Линуксом та же фигня. Чтоб собрать загрузчик для Allwinner - нужно кучу патчей накладывать, прежде чем получить заветный бинарник под нужный процессор и под нужный источник загрузки(SPI, SD, FEL).
|
|
|
|
|
Oct 1 2017, 12:46
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(__inline__ @ Oct 1 2017, 12:18)  Мешает отсутствие альтернативы. С удовольствием писал бы в Keil ARM MDK, но там нет Coretex-A7 без привязки к контроллеру. Да ладно? То-то у меня сейчас проект под ИАР для кортекса А9, без привязки к конкретному процу. Просто отличие в том, что с привязкой там все параметры стартапа и линкера проставляются автоматом. Цитата(__inline__ @ Oct 1 2017, 13:14)  Больше всего меня убивает, что когда возишься с GNU, то пляска с докачкой дополнительных утилит и обвесами патчей - гарантирована! Такого нет ни в одной другой среде программирования, даже OpenWatcom по сравнению с GCC - это как небо и земля А как вы думали, почему за коммерческий софт просят не хилые бабки? В последнее время - совсем не хилые?? Есть куча времени и нервов - добро пожаловать в мир бесплатного софта, ищем бубен и начинаем плясать
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|