eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaBiblioteka CMSIS DSP Keil ARMRe: Biblioteka CMSIS DSP Keil ARM
  • Data: 2017-12-14 17:13:18
    Temat: Re: Biblioteka CMSIS DSP Keil ARM
    Od: a...@m...uni.wroc.pl szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Marcin <m...@o...pl> wrote:
    > Witam,
    >
    > Wlasnie przygladam sie FFT na Coetexa-M3 (stm32f103) i chce uzyc biblioteki
    napisanej przez Arm i Keil DSP CMSIS.
    >
    > Bazujac na:
    > https://github.com/ARM-software/CMSIS_5.git
    > i dalej przykladzie: CMSIS_5\CMSIS\DSP\Examples\ARM\arm_fft_bin_example\
    > wersja ewaluacyjan Keila generuje 8kB
    >
    > compiling system_ARMCM3.c...
    > linking...
    > Program Size: Code=8032 RO-data=12032 RW-data=8208 ZI-data=8296
    > ".\ARMCM3_debug\arm_fft_bin_example.axf" - 0 Error(s), 0 Warning(s).
    > Build Time Elapsed: 00:00:00
    >
    > Ten sam przyklad z biblioteka skompilowana pod arm-none-eabi gcc 7.2.0 zajmuje
    85kB !!
    >
    > Invoking: Cross ARM GNU Print Size
    > arm-none-eabi-size --format=berkeley "stm32f103_dsp_cmsis5.elf"
    > text data bss dec hex filename
    > 82524 76 1320 83920 147d0 stm32f103_dsp_cmsis5.elf
    > Finished building: stm32f103_dsp_cmsis5.siz
    >
    >
    > Czy ktos zana pood, dlaczego prosty przyklad:
    >
    > arm_rfft_fast_instance_f32 S;
    > arm_cfft_radix4_instance_f32 cfft;
    >
    > static arm_rfft_instance_q15 Sq15;
    >
    > volatile static uint32_t result ;
    > result = arm_rfft_init_q15(&Sq15, 128, 0, 1);
    >
    > for(int i=0; i < 128; i++){
    > q15InData[i] = (q15_t)(sin3x[i] * 2048.0);
    > }
    >
    > volatile static q15_t magnitude[128];
    > arm_rfft_q15(&Sq15, (q15_t*)q15InData, (q15_t*)fft_results);
    >
    > arm_cmplx_mag_q15((q15_t*)fft_results, (q15_t*)magnitude, 128 );
    >
    >
    > kompiluje sie do 10x wiekszego rozmiaru przy GCC ? Wiedzialem ze GCC jest mniej
    zoptymalizowane, ale zeby 10x wiekszy kod generowac to juz przesada.

    Laczenie. Jak sie patrzylem to GCC generowal bardzo dobry kod
    (nie robilem porownan z Keilem, ale po prostu przy jakosci GCC
    nie ma wiele miejsca na poprawe). Natomiast duzy program zwykle
    bierze sie z dolaczania niepotrzebnych rzeczy. Trzeba zbadac
    co jest laczone i dlaczego. Typowa pulapka to funkcja biblioteczna
    ktora chce wypisac komunikat o bledzie i dolacza cala mase
    potrzebnego do tego kodu. Czasami aby unikniec dolaczania
    zbednego kodu trzeba robic dosc brutalne rzeczy w stylu
    zdefiniowania wlasnej wersji wewnetrznej funkcji (ktora nic
    nie robi w ten sposob unika zaleznosci).

    --
    Waldek Hebisch

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: