ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
775853
Sl (23.08.2017 18:10, просмотров: 4559)
IAR ANSI C/C++ Compiler V8.11. Работа с float разрешена - --cpu=Cortex-M7 -e --fpu=VFPv5_sp. stm32f745. Проблема.  Транслятор не хочет при извлечении квадратного корня из переменной типа float_t использовать команду vsqrt.f32. А считает нужным использовать библиотечные подпрограммы. :( float_t FUinFC10_tmp; float_t FUinADC_tmp; 373 FUinFC10_tmp = sqrt(FUinADC_tmp); \ 000000D8 0xEE18 0x0A10 VMOV R0,S16 \ 000000DC 0x.... 0x.... BL __aeabi_f2d \ 000000E0 0xEC41 0x0B10 VMOV D0,R0,R1 \ 000000E4 0x.... 0x.... BL sqrt \ 000000E8 0xEC51 0x0B10 VMOV R0,R1,D0 \ 000000EC 0x.... 0x.... BL __aeabi_d2f \ 000000F0 0xEE08 0x0A90 VMOV S17,R0 Хотя деление float/float выполняет без проблем. 369 FUinFC10_tmp = FUinADC_tmp/CFUin_0_1V; \ 000000EA 0xED9F 0x.... VLDR.W S0,??DataTable132_1 ;; 0x3f7a2ad0 // Load. \ 000000EE 0xEE88 0x8A80 VDIV.F32 S16,S17,S0 И против прямого вызова ассемблерной команды ничего не имеет против. __asm volatile ("VSQRT.F32 S16,S17"); Как уговорить транслятор использовать VSQRT.F32 ? Можно написать подпрограмму на ассемблере и ее вызывать. Но это не лучший вариант :( Спасибо!