Re: STM32F4xx __libc_init_array a ARM kód.

Josef Štengl ok1ced na nagano.cz
Pondělí Březen 27 15:33:12 CEST 2017


Aha. Mě ten výpis nedával smysl, když jsem ho dnes ráno uviděl poprvé, nyní ano.

GCC jsem používal výjimečně, pro ARM nikdy, tak jsem se v tom ztrácel a neviděl tam parametry v tom obsažené.
Díky za nakopnutí.



Dne 27.3.2017 v 15:14 Milan B. napsal(a):
> On 3/27/2017 2:49 PM, Josef Štengl wrote:
>> Tak jsem zjistil, možna že se to někomu bude hodit, že pro -mfloat-abi=soft to vkládá ARM knihovny. Musí být hard nebo
>> softfp, pak to reaguje na -march, a vkládá žádaný kód, jinak to vkládá default ARM kód.
>>
>> Jestli je to bug nebo feature to netuším.
>>
>
> Nerobte z toho ciernu magiu. Vidite niekde vo vypise multilib polozku obsahujucu mfloat-abi=soft ?
>
> Ja nie. Takze sa pouzije default kniznica, ktora je arm. Works as designed.
>
>
>
>>
>> Dne 27.3.2017 v 14:12 Milan B. napsal(a):
>>> On 3/27/2017 2:06 PM, Josef Štengl wrote:
>>>> To jsem už udělal, je to hned v původním mailu :-). Jen jsem se nemohl pohnout dále. Vypadá to, že vaše poslední řádka
>>>> zabrala, jdu studovat proč a jestli to doopravdy funguje.
>>>>
>>>
>>> -print-multi-lib !=  -print-multi-directory
>>>
>>> Prve vypise zoznam existujucich, druhe vypise, ktory adresar sa vybral pocas skutocneho linkovania.
>>>
>>>
>>>>
>>>> Dne 27.3.2017 v 13:58 Milan B. napsal(a):
>>>>>
>>>>> Len tip: v danej verzii gcc & co. nie je vygenerovana kniznica pre danu kombinbacia architektury/fpu. Failback je
>>>>> obvykle
>>>>> defaultna kniznica v arm.
>>>>>
>>>>> Pridajte -print-multi-directory a uvidite, odkial sa kniznice linkuju. Ak vypise iba bodku, je to nedobre - tam je ta
>>>>> default arm kniznica.
>>>>>
>>>>> Mozno je treba pridat aj parameter  -mfloat-abi=
>>>>>
>>>>> Ten multilib vypis hovori:
>>>>> pouzi kniznice v adresari xxx ak je kombinacia parametrov ....
>>>>>
>>>>> Takze pre HW FPU a Cortex M4 by sa zrejme mali pouzit kniznice z adresara armv7e-m/fpu a k tomu sa dopracuje cez
>>>>> kombinaciu parametrov:
>>>>>
>>>>> -mthumb -march=armv7e-m -mfloat-abi=hard -mfpu=fpv4-sp-d16
>>>>>
>>>>>
>>>>>
>>>>> -m-
>>>>>
>>>>>
>>>>>
>>>>> On 3/27/2017 11:28 AM, Josef Štengl wrote:
>>>>>> Ahoj,
>>>>>>   vytvářím nový projekt pro Cortex-m4 (trošku mě překvapilo, že oproti cortex-a/r je to prakticky jiný procesor) pomocí
>>>>>> STM32CubeMX + gcc (tahle kombinace poprvé, jak procesor tak překladač, tak se s tím zatím peru :-). No a drhne to na
>>>>>> fci
>>>>>> volání __libc_init_array, ve které se to zadrhne. Co jsem se dočetl, tak se většinou pro C komentuje. To sice také
>>>>>> funguje, ale nechápal jsem proč to nejde a bloudí a co dělá (jsem někdy nemístně zvědavý).
>>>>>> V asm výpisu (LST file) jsem zjistil, že kód je místo THUMB ARM. ARM ten procesor dle dokumentace neumí a nemám tušení
>>>>>> jak se to interpretuje.
>>>>>>
>>>>>> Procesor je STM32F329 (bude pak 405)
>>>>>>
>>>>>> Nemá někdo tušení, jak přesvědčit kompilátor/linker aby přidával svůj kus kódu ve správných instrukcích (THUMB only)?
>>>>>>
>>>>>> Našel jsem zmíňku o výpis možných knihoven pro překladač, ale už jsem nenašel jak s touto informací naložit.
>>>>>> Buď to nikdo neřeší, nebo něco přehlížím.
>>>>>>
>>>>>> #arm-none-eabi-gcc --print-multi-lib
>>>>>>
>>>>>> .;
>>>>>> thumb;@mthumb
>>>>>> fpu;@mfloat-abi=hard
>>>>>> armv6-m;@mthumb na march=armv6s-m
>>>>>> armv7-m;@mthumb na march=armv7-m
>>>>>> armv7e-m;@mthumb na march=armv7e-m
>>>>>> armv7-ar/thumb;@mthumb na march=armv7
>>>>>> armv7e-m/softfp;@mthumb na march=armv7e-m na mfloat-abi=softfp na mfpu=fpv4-sp-d16
>>>>>> armv7e-m/fpu;@mthumb na march=armv7e-m na mfloat-abi=hard na mfpu=fpv4-sp-d16
>>>>>> armv7-ar/thumb/softfp;@mthumb na march=armv7 na mfloat-abi=softfp na mfpu=vfpv3-d16
>>>>>> armv7-ar/thumb/fpu;@mthumb na march=armv7 na mfloat-abi=hard na mfpu=vfpv3-d16
>>>>>> thumb/armv7-ar/fpu/vfpv3-d16/be;@mthumb na march=armv7 na mfloat-abi=hard na mfpu=vfpv3-d16 na mbig-endian
>>>>>>
>>>>>>
>>>>>> Překlad:
>>>>>> arm-none-eabi-gcc -MT obj/usart.o -MMD -MP -mthumb -mlittle-endian -mcpu=cortex-m4 -mfpu=vfpv4-d16 -DSTM32F4
>>>>>> -DSTM32F429xx -DUSE_STDPERIPH_DRIVER -DVECT_TAB_SRAM   ...
>>>>>>
>>>>>> Linkování:
>>>>>> arm-none-eabi-gcc -mthumb -mlittle-endian -mcpu=cortex-m4 -mfpu=vfpv4-d16
>>>>>> -Wl,--gc-sections,-Map=SmartAtFire_SCU-cortex-m4_debug.map,--cref ...
>>>>>>
>>>>>>
>>>>>> Díky za každé nakopnutí.
>>>>>> ced
>>>>>> _______________________________________________
>>>>>> HW-list mailing list  -  sponsored by www.HW.cz
>>>>>> Hw-list na list.hw.cz
>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> HW-list mailing list  -  sponsored by www.HW.cz
>>>>> Hw-list na list.hw.cz
>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>> _______________________________________________
>>>> HW-list mailing list  -  sponsored by www.HW.cz
>>>> Hw-list na list.hw.cz
>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>
>>>
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list