Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: GCC ARM - не имплементируются функции SIN, COS
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2, 3
__inline__
Здравствуйте.

Скачал и поставил, затем ребутнул (для переменных окружения) 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, как решить проблему?
scifi
Цитата(__inline__ @ Oct 1 2017, 10:34) *
Скачал и поставил, затем ребутнул (для переменных окружения) GCC-тулчейн: gcc-arm-none-eabi-6-2017-q2-update-win32.exe
...
Помогите плиз, нужен хардварный синус/косинус для ядра Cortex-A7, VFPv4 или NEON - для floating point, как решить проблему?

Во-первых, не то скачали. Там английским по белому написано "Arm Cortex-M and Cortex-R". То есть дальше его ковырять нет смысла. Ищите правильный gcc.

Попробуйте вот это.
__inline__
Цитата(scifi @ Oct 1 2017, 08:00) *
Попробуйте вот это.


Там 4 тулчейна и все оканчиваются на eabi, тоесть привязано к операционной системе. Мне надо под железо писать, какой из этих тулчейнов сойдёт?

Разработка в Win32, целевая платформа Cortex-A7.

gcc-linaro-6.3.1-2017.05-i686-mingw32_arm-eabi.tar.xz 23-May-2017 08:39 388.7M open
gcc-linaro-6.3.1-2017.05-i686_arm-eabi.tar.xz 23-May-2017 08:39 263.8M open
gcc-linaro-6.3.1-2017.05-x86_64_arm-eabi.tar.xz 23-May-2017 08:39 248.1M open
sysroot-newlib-linaro-2017.05-arm-eabi.tar.xz 23-May-2017 08:39 44.2M open
scifi
Вот здесь разъясняют. Видимо, вам надо arm-eabihf, но такого там нет. Пичалька crying.gif
Вероятно, придётся собирать тулчейн самостоятельно.
__inline__
тот тулчейн что я скачал в ридмишнике написано :

Цитата
|----------|--------------------------------------------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a | armv7-ar |
|(No FP) | | /thumb |
|----------|--------------------------------------------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=softfp| armv7-ar |
|(Soft FP) | -mfpu=vfpv3-d16 | /thumb |
| | | /softfp |
|----------|--------------------------------------------|----------|
|Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=hard | armv7-ar |
|(Hard FP) | -mfpu=vfpv3-d16 | /thumb |
| | | /fpu |
--------------------------------------------------------------------


Я правильно думаю, что -march=armv7-a - это Cortex-A7 ?
scifi
Цитата(__inline__ @ Oct 1 2017, 11:47) *
Я правильно думаю, что -march=armv7-a - это Cortex-A7 ?

Здесь написано.
__inline__
Цитата(scifi @ Oct 1 2017, 08:49) *
Здесь написано.


Спасибо! sm.gif

Глянул:
Цитата
ARMv7-A => ARM Cortex-A5, ARM Cortex-A7, ARM Cortex-A8, ARM Cortex-A9, ARM Cortex-A12, ARM Cortex-A15, ARM Cortex-A17


Значит тот тулчейн который я скачал тоже подходит!

Вызвал раздельно компиляцию и линковку, появился sin, cos, но вызовы ОЧЕНЬ стрёмные, Hard FPU тут даже и не пахнет:

Код
000081b4 <main>:
    81b4:    e92d4800     push    {fp, lr}
    81b8:    e28db004     add    fp, sp, #4
    81bc:    e30a3de4     movw    r3, #44516; 0xade4
    81c0:    e3403001     movt    r3, #1
    81c4:    ed937a00     vldr    s14, [r3]
    81c8:    e30a3de8     movw    r3, #44520; 0xade8
    81cc:    e3403001     movt    r3, #1
    81d0:    edd37a00     vldr    s15, [r3]
    81d4:    ee777a27     vadd.f32    s15, s14, s15
    81d8:    eeb00a67     vmov.f32    s0, s15
    81dc:    fa000005     blx    81f8 <sinf>
    81e0:    eef07a40     vmov.f32    s15, s0
    81e4:    e30b364c     movw    r3, #46668; 0xb64c
    81e8:    e3403001     movt    r3, #1
    81ec:    edc37a00     vstr    s15, [r3]
    81f0:    e320f000     nop    {0}
    81f4:    e8bd8800     pop    {fp, pc}

000081f8 <sinf>:
    81f8:    ee10 3a10     vmov    r3, s0
    81fc:    f640 72d8     movw    r2, #4056; 0xfd8
    8200:    f6c3 7249     movt    r2, #16201; 0x3f49
    8204:    b500          push    {lr}
    8206:    b083          sub    sp, #12
    8208:    f023 4300     bic.w    r3, r3, #2147483648; 0x80000000
    820c:    4293          cmp    r3, r2
    820e:    dd1a          ble.n    8246 <sinf+0x4e>
    8210:    f1b3 4fff     cmp.w    r3, #2139095040; 0x7f800000
    8214:    db04          blt.n    8220 <sinf+0x28>
    8216:    ee30 0a40     vsub.f32    s0, s0, s0
    821a:    b003          add    sp, #12
    821c:    f85d fb04     ldr.w    pc, [sp], #4
    8220:    4668          mov    r0, sp
    8222:    f000 f833     bl    828c <__ieee754_rem_pio2f>
    8226:    f000 0003     and.w    r0, r0, #3
    822a:    2801          cmp    r0, #1
    822c:    d01d          beq.n    826a <sinf+0x72>
    822e:    2802          cmp    r0, #2
    8230:    d011          beq.n    8256 <sinf+0x5e>
    8232:    b308          cbz    r0, 8278 <sinf+0x80>
    8234:    eddd 0a01     vldr    s1, [sp, #4]
    8238:    ed9d 0a00     vldr    s0, [sp]
    823c:    f000 f960     bl    8500 <__kernel_cosf>
    8240:    eeb1 0a40     vneg.f32    s0, s0
    8244:    e7e9          b.n    821a <sinf+0x22>
    8246:    2000          movs    r0, #0
    8248:    eddf 0a0f     vldr    s1, [pc, #60]; 8288 <sinf+0x90>
    824c:    f000 fd08     bl    8c60 <__kernel_sinf>
    8250:    b003          add    sp, #12
    8252:    f85d fb04     ldr.w    pc, [sp], #4
    8256:    2001          movs    r0, #1
    8258:    eddd 0a01     vldr    s1, [sp, #4]
    825c:    ed9d 0a00     vldr    s0, [sp]
    8260:    f000 fcfe     bl    8c60 <__kernel_sinf>
    8264:    eeb1 0a40     vneg.f32    s0, s0
    8268:    e7d7          b.n    821a <sinf+0x22>
    826a:    eddd 0a01     vldr    s1, [sp, #4]
    826e:    ed9d 0a00     vldr    s0, [sp]
    8272:    f000 f945     bl    8500 <__kernel_cosf>
    8276:    e7d0          b.n    821a <sinf+0x22>
    8278:    2001          movs    r0, #1
    827a:    eddd 0a01     vldr    s1, [sp, #4]
    827e:    ed9d 0a00     vldr    s0, [sp]
    8282:    f000 fced     bl    8c60 <__kernel_sinf>
    8286:    e7c8          b.n    821a <sinf+0x22>
    8288:    00000000     andeq    r0, r0, r0

00008500 <__kernel_cosf>:
    8500:    ee10 3a10     vmov    r3, s0
    8504:    f023 4300     bic.w    r3, r3, #2147483648; 0x80000000
    8508:    f1b3 5f48     cmp.w    r3, #838860800; 0x32000000
    850c:    da2c          bge.n    8568 <__kernel_cosf+0x68>
    850e:    eefd 7ac0     vcvt.s32.f32    s15, s0
    8512:    ee17 3a90     vmov    r3, s15
    8516:    2b00          cmp    r3, #0
    8518:    d067          beq.n    85ea <__kernel_cosf+0xea>
    851a:    ee20 7a00     vmul.f32    s14, s0, s0
    851e:    eddf 7a34     vldr    s15, [pc, #208]; 85f0 <__kernel_cosf+0xf0>
    8522:    ed9f 5a34     vldr    s10, [pc, #208]; 85f4 <__kernel_cosf+0xf4>
    8526:    eddf 5a34     vldr    s11, [pc, #208]; 85f8 <__kernel_cosf+0xf8>
    852a:    ed9f 6a34     vldr    s12, [pc, #208]; 85fc <__kernel_cosf+0xfc>
    852e:    ee07 5a27     vmla.f32    s10, s14, s15
    8532:    eddf 7a33     vldr    s15, [pc, #204]; 8600 <__kernel_cosf+0x100>
    8536:    eddf 6a33     vldr    s13, [pc, #204]; 8604 <__kernel_cosf+0x104>
    853a:    ee55 5a07     vnmls.f32    s11, s10, s14
    853e:    ee05 6a87     vmla.f32    s12, s11, s14
    8542:    ee56 7a07     vnmls.f32    s15, s12, s14
    8546:    ee47 6a87     vmla.f32    s13, s15, s14
    854a:    ee66 6a87     vmul.f32    s13, s13, s14
    854e:    ee20 0a20     vmul.f32    s0, s0, s1
    8552:    ee17 0a26     vnmls.f32    s0, s14, s13
    8556:    eef6 7a00     vmov.f32    s15, #96; 0x3f000000  0.5
    855a:    ee17 0a27     vnmls.f32    s0, s14, s15
    855e:    eef7 7a00     vmov.f32    s15, #112; 0x3f800000  1.0
    8562:    ee37 0ac0     vsub.f32    s0, s15, s0
    8566:    4770          bx    lr
    8568:    ee20 7a00     vmul.f32    s14, s0, s0
    856c:    f649 1299     movw    r2, #39321; 0x9999
    8570:    eddf 7a1f     vldr    s15, [pc, #124]; 85f0 <__kernel_cosf+0xf0>
    8574:    f6c3 6299     movt    r2, #16025; 0x3e99
    8578:    4293          cmp    r3, r2
    857a:    ed9f 5a1e     vldr    s10, [pc, #120]; 85f4 <__kernel_cosf+0xf4>
    857e:    eddf 5a1e     vldr    s11, [pc, #120]; 85f8 <__kernel_cosf+0xf8>
    8582:    ed9f 6a1e     vldr    s12, [pc, #120]; 85fc <__kernel_cosf+0xfc>
    8586:    ee07 5a27     vmla.f32    s10, s14, s15
    858a:    eddf 7a1d     vldr    s15, [pc, #116]; 8600 <__kernel_cosf+0x100>
    858e:    eddf 6a1d     vldr    s13, [pc, #116]; 8604 <__kernel_cosf+0x104>
    8592:    ee55 5a07     vnmls.f32    s11, s10, s14
    8596:    ee05 6a87     vmla.f32    s12, s11, s14
    859a:    ee56 7a07     vnmls.f32    s15, s12, s14
    859e:    ee47 6a87     vmla.f32    s13, s15, s14
    85a2:    ee66 6a87     vmul.f32    s13, s13, s14
    85a6:    ddd2          ble.n    854e <__kernel_cosf+0x4e>
    85a8:    2200          movs    r2, #0
    85aa:    f6c3 7248     movt    r2, #16200; 0x3f48
    85ae:    4293          cmp    r3, r2
    85b0:    bfdc          itt    le
    85b2:    f103 437f     addle.w    r3, r3, #4278190080; 0xff000000
    85b6:    ee07 3a90     vmovle    s15, r3
    85ba:    ee20 0a20     vmul.f32    s0, s0, s1
    85be:    bfd4          ite    le
    85c0:    eeb7 6a00     vmovle.f32    s12, #112; 0x3f800000  1.0
    85c4:    eef5 7a02     vmovgt.f32    s15, #82; 0x3e900000  0.2812500
    85c8:    eef6 5a00     vmov.f32    s11, #96; 0x3f000000  0.5
    85cc:    bfd8          it    le
    85ce:    ee36 6a67     vsuble.f32    s12, s12, s15
    85d2:    ee17 0a26     vnmls.f32    s0, s14, s13
    85d6:    ee57 7a25     vnmls.f32    s15, s14, s11
    85da:    bfc8          it    gt
    85dc:    eeb6 6a07     vmovgt.f32    s12, #103; 0x3f380000  0.7187500
    85e0:    ee37 0ac0     vsub.f32    s0, s15, s0
    85e4:    ee36 0a40     vsub.f32    s0, s12, s0
    85e8:    4770          bx    lr
    85ea:    eeb7 0a00     vmov.f32    s0, #112; 0x3f800000  1.0
    85ee:    4770          bx    lr
    85f0:    ad47d74e     stclge    7, cr13, [r7, #-312]; 0xfffffec8
    85f4:    310f74f6     strdcc    r7, [pc, -r6]
    85f8:    3493f27c     ldrcc    pc, [r3], #636; 0x27c
    85fc:    37d00d01     ldrbcc    r0, [r0, r1, lsl #26]
    8600:    3ab60b61     bcc    fed8b38c <_stack+0xfed0b38c>
    8604:    3d2aaaab     vstmdbcc    sl!, {s20-s190}


Это просто абзац!

Билдил этими командами:

Код
arm-none-eabi-gcc -std=c99 -march=armv7-a -mfloat-abi=hard -mfpu=vfpv4 -c fpu.c

arm-none-eabi-gcc --specs=rdimon.specs -march=armv7-a -mfloat-abi=hard -mfpu=vfpv4 -o fpu.elf fpu.o -lm

arm-none-eabi-objdump -D fpu.elf > fpu.asm

arm-none-eabi-objcopy -O binary fpu.elf fpu.bin


Куда дальше рыть?
scifi
Цитата(__inline__ @ Oct 1 2017, 11:57) *
Куда дальше рыть?

Цитата(scifi @ Oct 1 2017, 11:45) *
Вероятно, придётся собирать тулчейн самостоятельно.

Тот же линаро вроде бы публикует скрипты для сборки. Ещё рассказывают про buildroot и всё такое.

Есть ещё Sysprogs, но я не знаю, есть ли там hardfloat.
aaarrr
Цитата(__inline__ @ Oct 1 2017, 11:57) *
Hard FPU тут даже и не пахнет:

Шок-абзац, ага. А команды вида vXXX.f32 - это что, как думаете?
__inline__
Тут пишут https://habrahabr.ru/post/319736/ , что:
Цитата
*eabihf — это почти то же самое, что и eabi, с разницей в реализации ABI вызова функций с плавающей точкой. hf — расшифровывается как hard float

Так может разница лишь в реализации вызова функций с FP?

Есть ли ещё какие-нибудь компиляторы для Cortex-A7, кроме вышеупомянутых?

И вообще GNU - дрянь ещё та... Писал во многих средах: Keil ARM MDK, IAR, Visual DSP, Visual C,.... - нигде такого гемора как с GNU нет
scifi
Цитата(__inline__ @ Oct 1 2017, 10:34) *
Помогите плиз, нужен хардварный синус/косинус для ядра Cortex-A7, VFPv4 или NEON - для floating point, как решить проблему?

Что такое "хардварный синус/косинус"? Вычисление одной инструкцией? Такое вообще существует в природе?

Цитата(__inline__ @ Oct 1 2017, 12:11) *
И вообще GNU - дрянь ещё та... Писал во многих средах: Keil ARM MDK, IAR, Visual DSP, Visual C,.... - нигде такого гемора как с GNU нет

Мыши плакали, кололись, но продолжали жрать кактус. Ну и используйте всё вышеупомянутое, кто же мешает?
__inline__
Цитата(aaarrr @ Oct 1 2017, 09:06) *
Шок-абзац, ага. А команды вида vXXX.f32 - это что, как думаете?

Это то что мне надо, и я это видел. Вопрос ни к ним, а к реализации синуса/косинуса. Почему так фигово реализовано? Я подозреваю, что из-за неправильных ключей компилятора/линковщика и отсутствия явно заданных путей. Одних только libm.a - куча и какая из них используется???

И с адреса 0x8000 программа пошла, хотя для линковщика ниче не указано, и _exit() понадобился... Одно г_вно честное слово...

Цитата(scifi @ Oct 1 2017, 09:14) *
Что такое "хардварный синус/косинус"? Вычисление одной инструкцией? Такое вообще существует в природе?


Существует: начиная ещё с древних со-процессоров x87 intel: fsin,fcos.

Цитата(scifi @ Oct 1 2017, 09:14) *
Мыши плакали, кололись, но продолжали жрать кактус. Ну и используйте всё вышеупомянутое, кто же мешает?


Мешает отсутствие альтернативы. С удовольствием писал бы в Keil ARM MDK, но там нет Coretex-A7 без привязки к контроллеру.
scifi
Цитата(__inline__ @ Oct 1 2017, 12:18) *
Существует: начиная ещё с древних со-процессоров x87 intel: fsin,fcos.

Хорошо, уточняю: у Cortex-A7 есть такие инструкции?

Update:

Похоже, аффтар слился. Обкакал GNU, а оказалось, что это его собственное недомыслие. Бывает, чо.
__inline__
Цитата(scifi @ Oct 1 2017, 09:20) *
Хорошо, уточняю: у Cortex-A7 есть такие инструкции?

Подозреваю, что нет. Но я не дурак и вижу, что sin() и cos() по своему объёму не внушают быстродействия. А значит, не все ключи оптимизации задействованы или нужно другую либу math подключить. Вот я и хочу выяснить, есть ли более лучший вариант реализации или мне пасти нечего?

В ряд Тейлора и то быстрее было бы.

Ещё раз прогнал код, на этот раз проверил ещё умножение и корень - эти работают как надо:

Код
#include <fastmath.h>

float a=1.2F;
float b=3.21F;
float c=0.0F;

void main(void)
{
c=a+b;
a=b*c;
b=sinf(a);
c=sqrtf(b);
}

void _exit(int i)
{
while(1);
}


00008030 <main>:
    8030:    b538          push    {r3, r4, r5, lr}
    8032:    f249 642c     movw    r4, #38444; 0x962c
    8036:    f2c0 0401     movt    r4, #1
    803a:    f649 2588     movw    r5, #39560; 0x9a88
    803e:    f2c0 0501     movt    r5, #1
    8042:    ed2d 8b02     vpush    {d8}
    8046:    edd4 7a00     vldr    s15, [r4]
    804a:    ed94 7a01     vldr    s14, [r4, #4]
    804e:    ee37 7a87     vadd.f32    s14, s15, s14         ------------OK
    8052:    ee67 7a87     vmul.f32    s15, s15, s14        ------------OK
    8056:    ed85 7a00     vstr    s14, [r5]
    805a:    eeb0 0a67     vmov.f32    s0, s15
    805e:    edc4 7a01     vstr    s15, [r4, #4]
    8062:    f000 f89d     bl    81a0 <sinf>         ---------- VERY BAD !!!
    8066:    eeb5 0a40     vcmp.f32    s0, #0.0
    806a:    ed84 0a00     vstr    s0, [r4]
    806e:    eeb1 8ac0     vsqrt.f32    s16, s0     ------------OK


Напрягает наличие процедуры _exit() и программа слинковалась для адреса 0x8000.
Можно ли как-то избавиться от _exit() и слинковать для адреса 0, не прибегая к линкерным скриптам? (я это могу сделать, только не даёт покоя вопрос, почему в первом случае слинковалось без мусора с с 0? (см. первый пост))
scifi
Цитата(__inline__ @ Oct 1 2017, 12:34) *
Подозреваю, что нет. Но я не дурак и вижу, что sin() и cos() по своему объёму не внушают быстродействия. А значит, не все ключи оптимизации задействованы или нужно другую либу math подключить. Вот я и хочу выяснить, есть ли более лучший вариант реализации или мне пасти нечего?

Кому-то нужно быстродействие в ущерб точности, кому-то - точность в ущерб быстродействию. Не исключено, что та же glibc всё делает быстро, но это уже линух. А вот newlib, скорее, будет напирать на точность.
Короче, сделайте свой синус, кто же мешает? Подсунуть свою функцию вместо библиотечной - дело нехитрое, ЕМНИП.
__inline__
скачал gcc-linaro-6.3.1-2017.05-i686_arm-eabi.tar.xz - в бинарниках эльфы, а не эхе.
Нету там под маздай ничего....
scifi
Цитата(__inline__ @ Oct 1 2017, 12:49) *
скачал gcc-linaro-6.3.1-2017.05-i686_arm-eabi.tar.xz - в бинарниках эльфы, а не эхе.
Нету там под маздай ничего....

А если вот это:
gcc-linaro-6.3.1-2017.05-i686-mingw32_arm-eabi.tar.xz
Ну блин, нельзя же так cranky.gif
__inline__
Цитата(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
Ну блин, нельзя же так cranky.gif

Я это понял как компилятор для сборки ARM- и MINGW- приложений... Под Линуксом... Качаю сейчас его, посмотрим.

Это я тупой или линуксоиды слишком умные? Почему когда соприкасаешься с GCC, то он кроме негативных реакций ничего не вызываeт?

ARM GCC, что и Кокос(cookox) - дерьмо полнейшее. Последний умер, правда.
Genadi Zawidowski
А с каких пор в этих процессорах хардварный синус с косинусом появился?

Для оптимизации имеющегося: для вычислений с одинарной точностью (float) есть функции sinf и cosf. Еще поможет -fno-math-errno. Это обязательтное условие для инлайна sqrtf.

В моем случае выглядит вот так (синусы-косинусы таблицами):

arm-none-eabi-gcc -c -mcpu=cortex-a9 -march=armv7-a -mfloat-abi=hard -mfpu=neon -ftree-vectorize -fno-math-errno -funroll-loops -fgraphite-identity -ffunction-sections -fdata-sections -ffat-lto-objects -Ofast -flto -gdwarf-2 -fomit-frame-pointer -Wa
ll -Wstrict-prototypes -DNDEBUG=1 -DCPUSTYLE_R7S721=1 -DCPUSTYLE_R7S721020=1 -MD -MP -MF ./dep/bandfilters.o.d -I.. -I../rza1x_inc -I.. ../bandfilters.c -o bandfilters.o
__inline__
Цитата(Genadi Zawidowski @ Oct 1 2017, 10:00) *
А с каких пор в этих процессорах хардварный синус с косинусом появился?

Для оптимизации имеющегося: для вычислений с одинарной точностью (float) есть функции sinf и cosf. Еще поможет -fno-math-errno.

В моем случае выглядит вот так (синусы-косинусы таблицами):

arm-none-eabi-gcc -c -mcpu=cortex-a9 -march=armv7-a -mfloat-abi=hard -mfpu=neon -ftree-vectorize -fno-math-errno -funroll-loops -fgraphite-identity -ffunction-sections -fdata-sections -ffat-lto-objects -Ofast -flto -gdwarf-2 -fomit-frame-pointer -Wa
ll -Wstrict-prototypes -DNDEBUG=1 -DCPUSTYLE_R7S721=1 -DCPUSTYLE_R7S721020=1 -MD -MP -MF ./dep/bandfilters.o.d -I.. -I../rza1x_inc -I.. ../bandfilters.c -o bandfilters.o


За ключи - спасибо! sm.gif Попробую! А про f в конце в курсе.
Genadi Zawidowski
Цитата(__inline__ @ Oct 1 2017, 13:03) *
За ключи - спасибо! sm.gif Попробую! А про f в конце в курсе.


Про "в курсе" из кусков кода видно небыло.
Вот скрипты из моего проекта. тулчейн отсюда.
__inline__
Цитата(Genadi Zawidowski @ Oct 1 2017, 10:09) *
Про "в курсе" из кусков кода видно небыло.
Вот скрипты из моего проекта.


Ещё раз - спасибо! Кстати, тот GCC что я скачал - не имеет утилиты make, как я буду по макам собирать - это загадка, сдела сейчас батник, но для больших программ так не годится.

Больше всего меня убивает, что когда возишься с GNU, то пляска с докачкой дополнительных утилит и обвесами патчей - гарантирована!
Такого нет ни в одной другой среде программирования, даже OpenWatcom по сравнению с GCC - это как небо и земля
Genadi Zawidowski
мэйк у меня от 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
__inline__
Цитата(Genadi Zawidowski @ Oct 1 2017, 10:09) *
Вот скрипты из моего проекта. тулчейн отсюда.

У меня такой же тулчейн, последняя версия
scifi
Цитата(__inline__ @ Oct 1 2017, 13:14) *
Кстати, тот GCC что я скачал - не имеет утилиты make, как я буду по макам собирать - это загадка, сдела сейчас батник, но для больших программ так не годится.

Можно скачать отсюда.
Цитата(__inline__ @ Oct 1 2017, 13:14) *
Больше всего меня убивает, что когда возишься с GNU, то пляска с докачкой дополнительных утилит и обвесами патчей - гарантирована!

Это потому, что не под линухом. Там всё уже есть. И звените.
__inline__
Цитата(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).
Genadi Zawidowski
Цитата
Затем написал программу тект ниже

С хорошей оптимизацией (те ключи что в моем проекте) такая программа заоптимизируется в ничто.
jcxz
Цитата(__inline__ @ Oct 1 2017, 14:34) *
При просмотре листинга видно, что функции sin( ) и cos( ) НЕ ИМПЛЕМЕНТИРОВАЛИСЬ, вместо них стоит переход:
...
У меня нет слов, одни эмоции (касаемо GCC тулчейна)!

Эмоции надеюсь радостные?
Не очень понятно - что Вас озадачило? Такая "программа" на выходе компилятора должна дать просто return.
__inline__
Цитата(jcxz @ Oct 1 2017, 11:59) *
Эмоции надеюсь радостные?
Не очень понятно - что Вас озадачило? Такая "программа" на выходе компилятора должна дать просто return.

Ну так подскажите, что неправильно, а не издевайтесь тут!
mantech
Цитата(__inline__ @ Oct 1 2017, 12:18) *
Мешает отсутствие альтернативы. С удовольствием писал бы в Keil ARM MDK, но там нет Coretex-A7 без привязки к контроллеру.


Да ладно? biggrin.gif

То-то у меня сейчас проект под ИАР для кортекса А9, без привязки к конкретному процу. Просто отличие в том, что с привязкой там все параметры стартапа и линкера проставляются автоматом.

Цитата(__inline__ @ Oct 1 2017, 13:14) *
Больше всего меня убивает, что когда возишься с GNU, то пляска с докачкой дополнительных утилит и обвесами патчей - гарантирована!
Такого нет ни в одной другой среде программирования, даже OpenWatcom по сравнению с GCC - это как небо и земля


А как вы думали, почему за коммерческий софт просят не хилые бабки? В последнее время - совсем не хилые??
Есть куча времени и нервов - добро пожаловать в мир бесплатного софта, ищем бубен и начинаем плясать biggrin.gif
__inline__
Цитата(mantech @ Oct 1 2017, 12:46) *
1) То-то у меня сейчас проект под ИАР для кортекса А9, без привязки к конкретному процу. Просто отличие в том, что с привязкой там все параметры стартапа и линкера проставляются автоматом.

2) А как вы думали, почему за коммерческий софт просят не хилые бабки? В последнее время - совсем не хилые??
Есть куча времени и нервов - добро пожаловать в мир бесплатного софта, ищем бубен и начинаем плясать biggrin.gif


1) Как бы не фанат ИАРа. Мне бы Keil sm.gif Но в v.4 он не поддерживает Cortex-A7. Версия 5 у меня не идет (потому что ХРюн и 32 бита, ставить анальные зонды - блевисты 7,8, ,... нет желания).

2) Коммерческий софт лечится таблЭтками sm.gif
HardEgor
Цитата(__inline__ @ Oct 1 2017, 19:53) *
Мне бы Keil sm.gif Но в v.4 он не поддерживает Cortex-A7. Версия 5 у меня не идет (потому что ХРюн и 32 бита, ставить анальные зонды - блевисты 7,8, ,... нет желания).

В XP нормально работает 5.17. Версия 5.18а тоже нормально работает, но часто при закрытии программы повисает(но ничего не теряет). А вот 5.20 уже не работает.
jcxz
Цитата(__inline__ @ Oct 1 2017, 19:42) *
Ну так подскажите, что неправильно, а не издевайтесь тут!

Почему неправильно? Всё там правильно. И компилятор тоже прав. Если соптимизировал тот код в 0.
_3m
Цитата(__inline__ @ Oct 1 2017, 15:53) *
2) Коммерческий софт лечится таблЭтками sm.gif

Попробуйте объяснить прокурору про таблетки. Уверен он поймет вас неправильно - лет на семь т.к кейл/иар сразу тянут на "особо крупный размер".
Еще расскажите заказчику про покупку лицензии на компилятор когда он потребует легализации разработанного ПО.
__inline__
Цитата(_3m @ Oct 2 2017, 07:01) *
Попробуйте объяснить прокурору про таблетки. Уверен он поймет вас неправильно - лет на семь т.к кейл/иар сразу тянут на "особо крупный размер".
Еще расскажите заказчику про покупку лицензии на компилятор когда он потребует легализации разработанного ПО.

Спасибо, посмеялся! santa2.gif
Попробуйте зажигать пуканы юзерам в другом месте! biggrin.gif
scifi
Цитата(__inline__ @ Oct 1 2017, 15:53) *
Версия 5 у меня не идет (потому что ХРюн и 32 бита, ставить анальные зонды - блевисты 7,8, ,... нет желания).

Мсье изволит эстетствовать biggrin.gif
demiurg_spb
Чтобы нормально разобраться в принципах работы gcc-xxx, утилиты make и т.д.и т.п. нужен не один месяц.
Вместо того, чтобы устраивать подобную клоунаду ТС просто необходимо научиться читать доки.
Жаль что Чукча не читатель, а писатель.
__inline__
Не переживайте!
Освоение GCC в процессе! rolleyes.gif
Наконец-то выжал, что нужно! fman.gif
Forger
Цитата(__inline__ @ Oct 1 2017, 15:53) *
ставить анальные зонды - блевисты 7,8, ,... нет желания).

Недавно на всех своих компах поставил вин 10 x64, заранее купил на ебеи три ключа (5$ за один), в итоге ось получилась официальная, никаких вопросов и таблеток sm.gif
Теперь все софтины работают как надо, особенно те, которые не хотели заводится на старой вин 7 х64.
Вот думаю прикупить ключи для вин-офиса (5..10$) ...
Короче, привыкаю к официальному платному софту. Не подкопаться biggrin.gif


scifi
Цитата(Forger @ Oct 2 2017, 16:36) *
Короче, привыкаю к официальному платному софту. Не подкопаться biggrin.gif

С точки зрения прокурора это точно такой же мухлёж, только вам ещё и раскошелиться пришлось biggrin.gif
__inline__
Поставил ARM DS-5 из дебрей интернета, так оказалось их ARM-compiler не имеет bare-metal таргета и пукает от некорректной лицензии.
В том же ИДЕ (он же Эклипс) есть опция GCC bare metal, сравнил выхлоп с первым тулчейном - результат один-в-одни, а Эклипс упростил сперва настройку проекта - флаги компиляции и встроенный make.

В итоге, после длительного ознакомления с флагами компилятора, линковщика, многократных экспериментов и просмотра листинга на асме, получил что хотел.
Ну и скрипт для линковщика написал, теперь всё линкуется как надо и куда надо, даже филлинг освоил (заливка оставшегося места нулевыми символами для получения объема прошивки ровно 16 кБ).

В целом GCC ARM неплох, как оказалось больше возможностей подёргать ключи оптимизации.

Пример:

Код
-march=armv7-a -mfpu=vfpv4 -mfloat-abi=hard -nostdinc -O3 -Wall -fomit-frame-pointer -fforce-addr -falign-jumps=4 -fgcse -std=c99 -marm -mlittle-endian -fpic -mtune=cortex-a7 --specs=nosys.specs -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -ffunction-sections -fdata-sections -nostdlib -nostartfiles -ffreestanding -fno-math-errno -fno-common -fno-builtin -ffreestanding -fno-strict-aliasing -mno-thumb-interwork -fno-stack-protector -fno-toplevel-reorder -Wstrict-prototypes -Wno-format-nonliteral -Wno-format-security -Wextra -Wno-unused-result -Wno-main

-T "test0.ld" -gc-sections -Wl,-N -fomit-frame-pointer -fforce-addr -falign-jumps=4 -fgcse -std=c99 -marm -mlittle-endian -fpic -mtune=cortex-a7 --specs=nosys.specs -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -ffunction-sections -fdata-sections -nostdlib -nostartfiles -ffreestanding -fno-math-errno -fno-common -fno-builtin -ffreestanding -fno-strict-aliasing -mno-thumb-interwork -fno-stack-protector -fno-toplevel-reorder -Wstrict-prototypes -Wno-format-nonliteral -Wno-format-security -Wextra -Wno-unused-result -Wno-main


Ну а на счёт блевисты, я имел ввиду, что она несанкционированно стучит и из неё сочится во все щели. Если в ХР как-то можно ещё заделать дыры, то в блевистах это практически невозможно. И вообще для меня это хобби, а не производственный процесс с получением выгоды, как тут некоторые поняли.
Forger
Цитата(scifi @ Oct 2 2017, 17:02) *
С точки зрения прокурора это точно такой же мухлёж, только вам ещё и раскошелиться пришлось biggrin.gif

Прокурору до лампочки рядовой нищий (для него) юзер, а вот мне вовсе не до лампочки рассадник троянов и т.п. в кряках и активаторах!
mantech
Цитата(Forger @ Oct 2 2017, 18:25) *
Прокурору до лампочки рядовой нищий (для него) юзер, а вот мне вовсе не до лампочки рассадник троянов и т.п. в кряках и активаторах!


В конторе хочешь не хочешь, а придется покупать. До кризиса, ИАР вышел мне в 40 с копейками рублей (1100бакинских примерно), теперь взглянул на их ценник и офонарел(подд 200тку тянет!!), сейчас никогда бы не решился, проще человека нанять и заплатить за перепортирование на гцц... Но про винду - согласен с тсом - хрюша самая оптимальная для разработчика...
Forger
Цитата(mantech @ Oct 2 2017, 18:29) *
В конторе хочешь не хочешь, а придется покупать.

Конторы начинает чесаться лишь тогда, когда установленный там "левый" софт начинает стучать своему разработчику ... вот беготня начинается! Боссы готовы до кучи покупать даже необязательные плагины biggrin.gif
Наблюдал такое однажды.... переживать начинают даже уборщицы crying.gif
Как говорится "пока жареный петух не клюнет"

Цитата
хрюша самая оптимальная для разработчика...
... архаичного софта sm.gif

Но любой современный софт требует современного железа и соотв. ось, а с этим уже ничего не поделать ((

Помню, хрюшу переставлял на своих компах стабильно раз в полгода-год.
Семерка прожила несколько лет.
Посмотрим, как поведет себя десятка ...
jcxz
Цитата(Forger @ Oct 2 2017, 22:45) *
Конторы начинает чесаться лишь тогда, когда установленный там "левый" софт начинает стучать своему разработчику ... вот беготня начинается!

Странная контора, админы которой не знают про файрволл.
Forger
Цитата(jcxz @ Oct 2 2017, 20:35) *
Странная контора, админы которой не знают про файрволл.

С самой конторой все в порядке, но админы ... термин "файрволл" им наверняка знаком, но, видать, этим все и ограничивается smile3046.gif
После этого случая главным "админом" было принято, мягко говоря, странное решение: на ВСЕ компы поставили виртуалки с линухом, из-под которых был возможет выход в инет cranky.gif
Виртуалки, естественно, требуют повышенных ресурсов компа, поэтому было принято еще не менее странное решение - добавить в каждый комп ОЗУ до 8Гб...
Разумеется, добавка ОЗУ почти никак не отразилась на скорости работы компов, но, благодаря такому "интернету", армия поклонников этих "админов" немного поредела (мягко говоря) sm.gif
mantech
Цитата(Forger @ Oct 2 2017, 18:45) *
... архаичного софта sm.gif

Но любой современный софт требует современного железа и соотв. ось, а с этим уже ничего не поделать ((


Не совсем, ну хорошо, кортекс А7, А9, можно сказать архаичный, мне хватает, зачем менять то, что хорошо работает, правда? Иногда общаюсь с людьми, говорят, вот надо то обновить, другое... Спрашиваешь, что, плохо работает? Нет, нормально. Тогда зачем обновлять? Просто от нечего делать, видимо... biggrin.gif

Цитата(Forger @ Oct 2 2017, 20:42) *
После этого случая главным "админом" было принято, мягко говоря, странное решение: на ВСЕ компы поставили виртуалки с линухом, из-под которых был возможет выход в инет cranky.gif
Виртуалки, естественно, требуют повышенных ресурсов компа, поэтому было принято еще не менее странное решение - добавить в каждый комп ОЗУ до 8Гб...


Ммда, ну и "админы"...
__inline__
С удовольствием девелопил бы и на Windows 98, но есть причины, по которым это сделать теперь невозможно:

1) старые компы все ушли в мир инной, а на новый 98-я не устанавливается, просто зависает в середине установки и всё
2) большинство дев-софта не поддерживает 98 винду.
3) геморой с USB-устройствами - на принтер и флешки производители не пишут драйверы.

Помню как плевался, когда переходил на XP - это была целая традегия! В то время комп был 800 МГц + XP Home edition со свистоперделками.
С появлением более мощных компов и XP Professional edition жить стало по-легче.

НО, в XP мне не нравится ограничение доступа к железу, для общения с портами надо писать VXD-драйвер или качать готовый.
Например - WinIO, позволяющий писать/читать в любой порт или участок памяти.
Это для связи разрабатываемого устройства с компом - COM- LPT- USB- порты.

Ну и порезать ХР сложнее чем 98 (отключение, удаление ненужного барахла).

А вообще, моё мнение, нормальная винда заканчивается на 98-й, всё что позже - уже почикана виртуальная машина DOS, многое уже просто в нём не сделаешь.
Я воспитан в духе традиций - экономить память и оптимизировать по скорости всё, но к сожалению, в ЭПОХУ ГОВНОКОДА, эти достоинства нивелировались и теперь осмеиваются.

Ну ещё вспомните 90е - 2000-е, когда господствовали AVR-ки с ПИК-ами, в то время НИКТО НЕ СМЕЛ думать о том, как бы впендюрить ОС в них.
А теперь почему-то считается, что разработка под Embeedded должна идти на ОС.
Эпоха Говнокода, одним словом...

Ну ещё вспомнил, что видел скрипт на Питоне, который мигает лампочками на Raspberry Pi. Это клиника скажу я вам.... !
В анальные закрома уходят Ассемблер и Си, зато привествуется Си Диез и скриптовые языки, ну никак не предназначенные для программирования контроллеров!
Довольно весело и тошно одновременно читать на гиктаймсе/хабре выкладки какого-нибудь "админа" с приаттаченным фрагментом говно-кода на питоне, который мигает лампочками на распберри пи sm.gif Ого! Зто он "ТРУЪ адмЫн" и "повелитель железа" теперь: - укротил контроллер на 1-2 ГГц и теперь ходит с распальцовкой...
По моему мнению, он просто рядовой говнокодер!

Я понимаю, что Raspberry Pi и прочие клоны, Оллвиннеры, ИМХы, Ситары - это Application Processors, но это восе не значит, что нельзя на них писать напрямую (bare metal)!

Ситуация меняется, когда производители этих Application Processor-ов СОЗНАТЕЛЬНО ПРЯЧУТ ту самую фундаментальную информацию для работы на low level :
- как происходит загрузка программ
- алгоритмы работы периферии
- таблица векторов прерываний
Просто на отшибись дают выгрузку регистров с их описанием.

И хорошо, что есть Linux, в исходниках которого можно много чего подчерпнуть и ликвидировать пробелы.
Но согласитесь, такой подход к "изучению" процессора - весьма нелёгок и неоптимален!

Про софт и палево:
Про стучание софтом, можно вообще убрать эти ваши интернеты, на машинах разработчика. Сделать отдельную машину с интернетами, изолированную от других.
Или фаервол с белым списком.
Forger
Цитата(__inline__ @ Oct 3 2017, 04:29) *
можно вообще убрать эти ваши интернеты, на машинах разработчика

Для архаичных разработок интернет, может быть, и не нужен, но заказчиков такого архаизма уже почти не осталось (разве что кроме отечественных госзаказов, где чем больше возраст микросхеме, тем дороже железо и потому лучше всем) sm.gif
Однако, в настоящее время без интернета (выхода в мировую сеть) уже невозможно сделать ни одной современной разработки.

Цитата
Сделать отдельную машину с интернетами, изолированную от других.

Полагаю, что у вас в конторе именно так и сделано biggrin.gif
HardEgor
Цитата(__inline__ @ Oct 3 2017, 08:29) *
С удовольствием девелопил бы и на Windows 98, но есть причины, по которым это сделать теперь невозможно:

Используйте reactos или KolibriOS

Цитата(__inline__ @ Oct 3 2017, 08:29) *
В анальные закрома уходят Ассемблер и Си, зато привествуется Си Диез и скриптовые языки, ну никак не предназначенные для программирования контроллеров!

Да ладно вам, никто никуда не уходит, просто массовке стали доступны простые решения, вот и набивают бесполезную массу. В основе-то всё-равно c и asm sm.gif

Цитата(__inline__ @ Oct 3 2017, 08:29) *
Ситуация меняется, когда производители этих Application Processor-ов СОЗНАТЕЛЬНО ПРЯЧУТ ту самую фундаментальную информацию для работы на low level :

Проблема в том, что эти процессоры стали настолько сложными, что сами авторы не могут сходу сказать что произойдёт если изменить какой-то регистр настройки - то ли перегреется, то ли "кирпич" получится.... У них техподдержка умрет отвечая на вопросы типа "я тут записал куда-то 0xFFЕ и у меня не работает ЭКРАН, что делать?"
Поэтому для конечных пользователей создаются готовые профили настроек, проверенные вдоль и поперек, а избранным дается доступ к их изменению и некоторые описания.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.