Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   28 / 177
(#) pici válasza Topi hozzászólására (») Feb 3, 2013 /
 
Na
Nekem is akkor szokott ilyesmi előfordulni, ha a stack kicsi, de én ilyenkor 0x800-ra szoktam felnyomni és akkor nincs macera.
(#) kapu48 hozzászólása Feb 4, 2013 /
 
(#) gtk hozzászólása Feb 10, 2013 /
 
Sziasztok !

STM32F4 Discovery.
FPU bekapcsolva.

GCC -vel forditottam az alabbi (lasd link) arm fir peldat. Ugy tunik hogy az snr szamolasnal hardFault -ot ad.
Kozvetlen a szures utan meg tudok ledet bekapcsolni, utanna mar nem. A GDB szerint is hardfault van.

Valakinek van otlete mi lehet a problema?

Bővebben: Link
A hozzászólás módosítva: Feb 10, 2013
(#) gtk hozzászólása Feb 10, 2013 /
 
Sziasztok !

A linker flags-hez hozzaadva az alabbi sort mostmar nem dob hard faultot, de az snr feltetel ezen agaba fut be:
  1. if( status != ARM_MATH_SUCCESS)
Tovabbra sem jo valami.

  1. MCUFLAGS        =       -mcpu=cortex-m4 -mthumb -mthumb-interwork
(#) Imtilk válasza gtk hozzászólására (») Feb 10, 2013 /
 
Csak két tipp, nem biztos, de hátha segít én is többször futottam hard faultra igaz én keil-t használok fordítónak... Hiába állítom be a fordítóba, hogy használja az fpu-t, csak az alábbi kis kód amit mellékelek kapcsolta be azt. ( A program elején meg kell hívni a függvényt)
A másik tippem, hogy esetleg növeld stack, illetve a heap méretét, ahogy lentebb tárgyalták is a kollegák, ez is marha becsapós, sokszor segített amikor téptem a hajamat, hogy miért nem működik egy tökéletes kód.....

fpu.c

fpu.h
   
(#) gtk válasza Imtilk hozzászólására (») Feb 10, 2013 /
 
Szia !

Koszi. Beforditottam, meghivtam, de nincs valtozas. A stack merete a .ld fileban a _Min_Stack_Size lenne ?
Ez nalam 0x400. Az optimalizalasi szint -O2.
A hozzászólás módosítva: Feb 10, 2013
(#) Imtilk válasza gtk hozzászólására (») Feb 10, 2013 /
 
Sajna GCC-ben nincs tapasztalatom Nálam a legkomplikáltabb programomnál (320*240 lcd, st grafikus lib+ov7670 kamera) a stack mérete 0x2000 .... (illetve igazándiból a startup_stm32f4xxx.s fájl szerint 0x00002000) De én is full kezdő vagyok úgyhogy lehet túlzás, vagy ki tudja de működik... Folyamatosan növelnem kellett, ahogy növekedett a program, és annak a memória igénye. Csak reméltem, hogy tudok segíteni...
(#) sikolymester válasza gtk hozzászólására (») Feb 11, 2013 /
 
Melyik GCC verzióval fordítottad?
(#) gtk válasza sikolymester hozzászólására (») Feb 11, 2013 /
 
Szia ! arm-linaro-eabi-4.6 csomag es ezen belul arm-none-eabi-gcc-4.6.2.
(#) kapu48 válasza gtk hozzászólására (») Feb 11, 2013 /
 
Esetleg itt találsz némi segítséget:
Bővebben: Getting Started with the STM32F4 and GCC
(#) gtk hozzászólása Feb 11, 2013 /
 
Nem tudom egyaltalan mukodik az emlitett peldaprogram (arm_fir_example) ? Valaki nem probalna ki, akinek van keznel mukodo gcc es discovery ?
(#) kapu48 válasza gtk hozzászólására (») Feb 11, 2013 /
 
Nekem ez van:
DM-STF4BB Base Board
Bővebben: DM-STF4BB Base Board

De Win. alatt Atolicot használok! Itt szerencsére van Debugolásra lehetőség.

Neked is kellene valami PC - soros illesztőt barkácsolni.
Debugoláshoz szükséges, 1 LED ehhez kevés.
(#) gtk válasza kapu48 hozzászólására (») Feb 11, 2013 /
 
Ennek az egyszeru programnak a debugolasahoz boven eleg egy led, es van belole 4 is. Amugy fent van az openocd es a gdb is. Nem ez a gond.
(#) kapu48 válasza gtk hozzászólására (») Feb 11, 2013 /
 
Eszemben sincs vitatkozni veled!

Biztos látod, hól akad el a programod.
De, hogy miért esélytelen megtalálnod.
(#) gtk hozzászólása Feb 11, 2013 /
 
Innen <<>> leforditottam a Mandelbrot-ot, es ugy tunik hogy a sqrtf -re a 20 ciklusido is rendben van. A FIR szuros pelda meg nem sajat, lehet benne akar hiba is. Arra lennek kivancsi hogy a pelda nem jo vagy a compiler rontja el.
(#) kapu48 válasza gtk hozzászólására (») Feb 11, 2013 /
 
Nálam is kiakad!

Itt a két sor között ugrál:
snr = arm_snr_f32(&refOutput[0], &testOutput[0], TEST_LENGTH_SAMPLES);
2 * snr = 0
3.ra snr = 0x400000
if (snr < SNR_THRESHOLD_F32) És itt a vég!

Nem értem? Ezeknek elvileg csak 1* kellene lefutni?

Lehet Stack méret probléma?>
(#) gtk válasza kapu48 hozzászólására (») Feb 11, 2013 /
 
Koszi szepen hogy megnezted ! Tehat akkor nalad el sem jut idaig ?
  1. if( status != ARM_MATH_SUCCESS)
Nalam a fenti agban vegzi, oda fut be.
A hozzászólás módosítva: Feb 11, 2013
(#) kapu48 válasza gtk hozzászólására (») Feb 11, 2013 /
 
Vissza állítottam az –Os, -O0 –ra

És kilépés eredménye: status = ARM_MATH_SUCCESS;

Ez így jónak tűnik!

Bár a kapott eredményt nem látom.
(#) gtk válasza kapu48 hozzászólására (») Feb 11, 2013 /
 
-O2 -vel megnezned ?
(#) kapu48 válasza gtk hozzászólására (») Feb 11, 2013 /
 
Nem jó –O2 –vel!

Csak: -O0

Valamit ki optimalizál ebből?:
snr = arm_snr_f32(&refOutput[0], &testOutput[0], TEST_LENGTH_SAMPLES);
(#) gtk válasza kapu48 hozzászólására (») Feb 11, 2013 /
 
Koszi megegyszer !

Csupa vicc az egesz,..Az Atollic milyen compilert hasznal ?

Nos nalam a FIR szuros library le van forditva sztatikus konyvtarnak. Kiprobaltam, ujraforditottam az osszes optimalizacios szinttel a libraryt es a projektet is. Egyiknel sem lett jo az SNR. Ez lenne a legkevesebb, ha tudnam hogy jol fut a FIR, de ez csak akkor derul ki ha kiteszem DAC-ra es kimerem.

Udv. Szabi
(#) kapu48 válasza gtk hozzászólására (») Feb 11, 2013 /
 
Én átnézném helyedben ezt debugban: math_helper.c
  1. float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize)
  2. {
  3.   float EnergySignal = 0.0, EnergyError = 0.0;
  4.   uint32_t i;
  5.   float SNR;
  6.   int temp;
  7.   int *test;
  8.  
  9.   for (i = 0; i < buffSize; i++)
  10.     {
  11.           /* Checking for a NAN value in pRef array */
  12.           test =   (int *)(&pRef[i]);
  13.       temp =  *test;
  14.  
  15.           if(temp == 0x7FC00000)
  16.           {
  17.                         return(0);
  18.           }
  19.  
  20.           /* Checking for a NAN value in pTest array */
  21.           test =   (int *)(&pTest[i]);
  22.       temp =  *test;
  23.  
  24.           if(temp == 0x7FC00000)
  25.           {
  26.                         return(0);
  27.           }
  28.       EnergySignal += pRef[i] * pRef[i];
  29.       EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]);
  30.     }
  31.  
  32.         /* Checking for a NAN value in EnergyError */
  33.         test =   (int *)(&EnergyError);
  34.     temp =  *test;
  35.  
  36.     if(temp == 0x7FC00000)
  37.     {
  38.                 return(0);
  39.     }
  40.        
  41.  
  42.   SNR = 10 * log10 (EnergySignal / EnergyError);
  43.  
  44.   return (SNR);
  45.  
  46. }


Hól ugrik ki 0-ával?
(#) _vl_ válasza kapu48 hozzászólására (») Feb 11, 2013 /
 
-Wall opciót szoktatok használni?
(#) kapu48 válasza _vl_ hozzászólására (») Feb 11, 2013 /
 
Egész pontosan:

-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -std=gnu90 -DUSE_STM32F4_DISCOVERY -DHSE_VALUE=8000000 -DSTM32F4XX -DUSE_STDPERIPH_DRIVER -I../src -I..\Libraries\CMSIS\Include -I..\Libraries\Device\STM32F4xx\Include -I..\Libraries\STM32F4xx_StdPeriph_Driver\inc -I..\Utilities\STM32F4-Discovery -O0 -ffunction-sections -fdata-sections -g -Wall
A hozzászólás módosítva: Feb 11, 2013
(#) _vl_ válasza kapu48 hozzászólására (») Feb 11, 2013 /
 
A könyvtárat is ezekkel fordítod? Vagy azt binárisban használod, ahogy kijött a gyárból?
Ill. a másik kérdés, hogy dob-e warningokat a -Wall miatt.
A hozzászólás módosítva: Feb 11, 2013
(#) kapu48 válasza _vl_ hozzászólására (») Feb 11, 2013 /
 
Nem használok előre fordított lib -eket!
Mert úgy nem tudok Debugolni.

Warning van Bőven.
De csak azért mert gyorsan beledobtam az arm_fir_example_f32.c -t egy épen futó GLCD projectba.
(#) kapu48 válasza _vl_ hozzászólására (») Feb 11, 2013 /
 
Itt megtalálod az egész forrás kódot:

Bővebben: STM32F4DISCOVERY board firmware package

STM32F4-Discovery_FW_V1.1.0\Libraries\CMSIS\DSP_Lib\Examples\arm_fir_example\
A hozzászólás módosítva: Feb 11, 2013
(#) gtk hozzászólása Feb 11, 2013 /
 
Sziasztok !

Az alabbi formaban mukodik a dolog, -O0 optimalizacio eseten kizarolag. Viszont ugy tunik hogy az elso szamitasa ebben az esetben sem lesz jo, csak az n.

  1. /** \example arm_fir_example_f32.c
  2.  */  
  3.  
  4. /* ----------------------------------------------------------------------
  5. ** Include Files  
  6. ** ------------------------------------------------------------------- */
  7.  
  8. /*
  9. Atdolgozva linaro-gcc -re:
  10. -DARM_MATH_CM4 -D__FPU_PRESENT a Makefile-ban hozzaadva
  11. */
  12.  
  13.  
  14. #include "stm32f4_discovery.h"
  15. #include "stm32f4xx_gpio.h"
  16. #include "stm32f4xx_rcc.h"
  17. #include "math_helper.h"
  18. #include "fpu.h"
  19.  
  20. /* ----------------------------------------------------------------------
  21. ** Macro Defines  
  22. ** ------------------------------------------------------------------- */
  23.  
  24. #define TEST_LENGTH_SAMPLES 320
  25. #define SNR_THRESHOLD_F32       140.0f
  26. #define BLOCK_SIZE                      32
  27. #define NUM_TAPS                        29
  28.  
  29. /* -------------------------------------------------------------------
  30.  * The input signal and reference output (computed with MATLAB)
  31.  * are defined externally in arm_fir_lpf_data.c.
  32.  * ------------------------------------------------------------------- */
  33.  
  34. extern float32_t testInput_f32_1kHz_15kHz[TEST_LENGTH_SAMPLES];
  35. extern float32_t refOutput[TEST_LENGTH_SAMPLES];
  36.  
  37. /* -------------------------------------------------------------------
  38.  * Declare Test output buffer
  39.  * ------------------------------------------------------------------- */
  40.  
  41. static float32_t testOutput[TEST_LENGTH_SAMPLES];
  42.  
  43. /* -------------------------------------------------------------------
  44.  * Declare State buffer of size (numTaps + blockSize - 1)
  45.  * ------------------------------------------------------------------- */
  46.  
  47. static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1];
  48.  
  49. /* ----------------------------------------------------------------------
  50. ** FIR Coefficients buffer generated using fir1() MATLAB function.
  51. ** fir1(28, 6/24)
  52. ** ------------------------------------------------------------------- */
  53.  
  54. const float32_t firCoeffs32[NUM_TAPS] = {
  55. -0.0018225230f, -0.0015879294f, +0.0000000000f, +0.0036977508f, +0.0080754303f, +0.0085302217f, -0.0000000000f, -0.0173976984f,
  56. -0.0341458607f, -0.0333591565f, +0.0000000000f, +0.0676308395f, +0.1522061835f, +0.2229246956f, +0.2504960933f, +0.2229246956f,
  57. +0.1522061835f, +0.0676308395f, +0.0000000000f, -0.0333591565f, -0.0341458607f, -0.0173976984f, -0.0000000000f, +0.0085302217f,
  58. +0.0080754303f, +0.0036977508f, +0.0000000000f, -0.0015879294f, -0.0018225230f
  59. };
  60.  
  61. /* ------------------------------------------------------------------
  62.  * Global variables for FIR LPF Example
  63.  * ------------------------------------------------------------------- */
  64.  
  65. uint32_t blockSize = BLOCK_SIZE;
  66. uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE;
  67.  
  68. float32_t  snr;
  69.  
  70. #define nop()       __asm__ __volatile__("nop")
  71.  
  72. GPIO_InitTypeDef  GPIO_InitStructure;
  73.  
  74.  
  75. void Delay(__IO uint32_t nCount)
  76. {
  77.   while(nCount--)
  78.   {
  79.   }
  80. }
  81.  
  82.  
  83. /* ----------------------------------------------------------------------
  84.  * FIR LPF Example
  85.  * ------------------------------------------------------------------- */
  86.  
  87.  
  88. int32_t main(void)
  89. {
  90.  
  91.   uint32_t i;
  92.   arm_fir_instance_f32 S;
  93.   arm_status status;
  94.   float32_t  *inputF32, *outputF32;
  95.  
  96.   /* Initialize input and output buffer pointers */
  97.   inputF32 = &testInput_f32_1kHz_15kHz[0];       
  98.   outputF32 = &testOutput[0];
  99.  
  100.     /* GPIOD Periph clock enable */
  101.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  102.  
  103.   /* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */
  104.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
  105.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  106.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  107.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  108.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  109.   GPIO_Init(GPIOD, &GPIO_InitStructure);
  110.  
  111.  
  112.   SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
  113.  
  114.   /* Call FIR init function to initialize the instance structure. */
  115.   arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32[0], &firStateF32[0], blockSize);
  116.  
  117.   /* ----------------------------------------------------------------------
  118.   ** Call the FIR process function for every blockSize samples  
  119.   ** ------------------------------------------------------------------- */
  120.  
  121.   for(i=0; i < numBlocks; i++)  
  122.     {        
  123.       arm_fir_f32(&S, inputF32 + (i * blockSize), outputF32 + (i * blockSize), blockSize);  
  124.     }
  125.  
  126. /* PD13 to be toggled */
  127.    GPIO_SetBits(GPIOD, GPIO_Pin_13); //narancs
  128.  
  129.  
  130.   /* ----------------------------------------------------------------------
  131.   ** Compare the generated output against the reference output computed
  132.   ** in MATLAB.
  133.   ** ------------------------------------------------------------------- */
  134.  
  135. do{
  136.  
  137. snr = arm_snr_f32(&refOutput[0], &testOutput[0], TEST_LENGTH_SAMPLES);  
  138.  
  139. GPIO_ResetBits(GPIOD, GPIO_Pin_12 | GPIO_Pin_15);
  140.  
  141.  
  142.   if (snr < SNR_THRESHOLD_F32)
  143.     {
  144.       status = ARM_MATH_TEST_FAILURE;
  145.     }
  146.   else
  147.     {
  148.       status = ARM_MATH_SUCCESS;
  149.     }
  150.          
  151.   /* ----------------------------------------------------------------------
  152.   ** Loop here if the signal does not match the reference output.
  153.   ** ------------------------------------------------------------------- */
  154.          
  155.   if( status != ARM_MATH_SUCCESS)
  156.     {
  157.      
  158.     /* PD15 to be toggled */
  159.     GPIO_SetBits(GPIOD, GPIO_Pin_15); //kek
  160.     }
  161.   else
  162.     {
  163.     /* PD12 to be toggled */
  164.       GPIO_SetBits(GPIOD, GPIO_Pin_12); //zold
  165.     }
  166.  
  167.    }while(1);                            /* main function does not return */
  168. }
(#) kapu48 válasza gtk hozzászólására (») Feb 11, 2013 /
 
Nálam elsőre hibátlan!

Viszont felesleges: #include "fpu.h" és "fpu.c"
Mert nem hívod meg sehol!
(#) gtk válasza kapu48 hozzászólására (») Feb 11, 2013 /
 
Persze, tudom hogy folosleges, de ezen most ne akadjunk el !
Következő: »»   28 / 177
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem