Fórum témák
- • Egyfázisú villanymotor fordulatszám szabályozása
- • Fejhallgató erősítő
- • Arduino
- • Indukciós főzőlap, sütő bekötése, kábelek kiépítése
- • Napelem alkalmazása a lakás energia ellátásában
- • Lézer érzékelő
- • Transzformátor készítés, méretezés
- • IMI villanymotor
- • MyElecParts alkatrész kereső és készlet nyilvántartó
- • Műhelyünk felszerelése, szerszámai
- • Robotfűnyíró vagy fűnyíró robot
- • Erősítő mindig és mindig
- • Mikrovezérlős cambus-os izzító relé
- • Kombikazán működési hiba
- • Villanyszerelés
- • Rádiótechnika számok keresése
- • Szárítógép problémák
- • Számítógép hiba, de mi a probléma?
- • Porszívó javítás
- • Rendelés külföldről (eBay - Paypal)
- • Szobatermosztát bekötése
- • Sárga Kazettás Piaci Nintendo (8bit)
- • Klíma beszerelése, fűtés-hűtés házilag
- • Hűtőgép probléma
- • Kutya macska (vad) riasztó
- • FET vezérlése
- • Muzeális készülékek-alkatrészek restaurálása
- • Oszcilloszkóp, avagy hogyan kell használni?
- • Toroid transzformátor
- • LCD TV probléma
- • Elektromos távirányítós kapunyitó
- • Videomagnó problémák
- • SMD forrasztás profin
- • Érdekességek
- • CNC építése házi alkatrészekből az alapoktól
- • Ki hol gyártatja a NYÁK-ot ?
- • Felajánlás, azaz ingyen elvihető
- • Kazettás magnó (deck) javítása
- • HESTORE.hu
- • Hibrid erősítő
- • Borhűtő vezérlő panel
- • Karácsonyi fényfüzérek
- • Mosogatógép hiba
- • PC táp átalakítás
- • LED-es világítás
- • Áramlökés határoló lágyindító
- • Rádió adó építése
- • Akkus lámpa javítás
- • Elektromos tolókapu
- • Villanypásztor
- • Li-Po - Li-ion akkumulátor és töltője
- • Gondolkodó ház avagy házautomatizálás
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Kapcsolási rajzot keresek
- • Rádióamatőrök topikja
» Több friss téma
|
Fórum » ARM - Miértek hogyanok
Na 
Nekem is akkor szokott ilyesmi előfordulni, ha a stack kicsi, de én ilyenkor 0x800-ra szoktam felnyomni és akkor nincs macera.
(#) |
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:
if( status != ARM_MATH_SUCCESS)
Tovabbra sem jo valami.
MCUFLAGS = -mcpu=cortex-m4 -mthumb -mthumb-interwork
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.....
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
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...
Melyik GCC verzióval fordítottad?
Szia ! arm-linaro-eabi-4.6 csomag es ezen belul arm-none-eabi-gcc-4.6.2.
(#) |
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 ?
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.
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.
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.
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?>
Koszi szepen hogy megnezted ! Tehat akkor nalad el sem jut idaig ? if( status != ARM_MATH_SUCCESS)
Nalam a fenti agban vegzi, oda fut be. A hozzászólás módosítva: 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.
Nem jó –O2 –vel!
Csak: -O0
Valamit ki optimalizál ebből?:
snr = arm_snr_f32(&refOutput[0], &testOutput[0], TEST_LENGTH_SAMPLES);
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
Én átnézném helyedben ezt debugban: math_helper.c
float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize)
{
float EnergySignal = 0.0, EnergyError = 0.0;
uint32_t i;
float SNR;
int temp;
int *test;
for (i = 0; i < buffSize; i++)
{
/* Checking for a NAN value in pRef array */
test = (int *)(&pRef[i]);
temp = *test;
if(temp == 0x7FC00000)
{
return(0);
}
/* Checking for a NAN value in pTest array */
test = (int *)(&pTest[i]);
temp = *test;
if(temp == 0x7FC00000)
{
return(0);
}
EnergySignal += pRef[i] * pRef[i];
EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]);
}
/* Checking for a NAN value in EnergyError */
test = (int *)(&EnergyError);
temp = *test;
if(temp == 0x7FC00000)
{
return(0);
}
SNR = 10 * log10 (EnergySignal / EnergyError);
return (SNR);
}
Hól ugrik ki 0-ával?
-Wall opciót szoktatok használni?
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
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
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.
(#) |
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.
/** \example arm_fir_example_f32.c
*/
/* ----------------------------------------------------------------------
** Include Files
** ------------------------------------------------------------------- */
/*
Atdolgozva linaro-gcc -re:
-DARM_MATH_CM4 -D__FPU_PRESENT a Makefile-ban hozzaadva
*/
#include "math_helper.h"
#include "fpu.h"
/* ----------------------------------------------------------------------
** Macro Defines
** ------------------------------------------------------------------- */
#define TEST_LENGTH_SAMPLES 320
#define SNR_THRESHOLD_F32 140.0f
#define BLOCK_SIZE 32
#define NUM_TAPS 29
/* -------------------------------------------------------------------
* The input signal and reference output (computed with MATLAB)
* are defined externally in arm_fir_lpf_data.c.
* ------------------------------------------------------------------- */
extern float32_t testInput_f32_1kHz_15kHz[TEST_LENGTH_SAMPLES];
extern float32_t refOutput[TEST_LENGTH_SAMPLES];
/* -------------------------------------------------------------------
* Declare Test output buffer
* ------------------------------------------------------------------- */
static float32_t testOutput[TEST_LENGTH_SAMPLES];
/* -------------------------------------------------------------------
* Declare State buffer of size (numTaps + blockSize - 1)
* ------------------------------------------------------------------- */
static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1];
/* ----------------------------------------------------------------------
** FIR Coefficients buffer generated using fir1() MATLAB function.
** fir1(28, 6/24)
** ------------------------------------------------------------------- */
const float32_t firCoeffs32[NUM_TAPS] = {
-0.0018225230f, -0.0015879294f, +0.0000000000f, +0.0036977508f, +0.0080754303f, +0.0085302217f, -0.0000000000f, -0.0173976984f,
-0.0341458607f, -0.0333591565f, +0.0000000000f, +0.0676308395f, +0.1522061835f, +0.2229246956f, +0.2504960933f, +0.2229246956f,
+0.1522061835f, +0.0676308395f, +0.0000000000f, -0.0333591565f, -0.0341458607f, -0.0173976984f, -0.0000000000f, +0.0085302217f,
+0.0080754303f, +0.0036977508f, +0.0000000000f, -0.0015879294f, -0.0018225230f
};
/* ------------------------------------------------------------------
* Global variables for FIR LPF Example
* ------------------------------------------------------------------- */
uint32_t blockSize = BLOCK_SIZE;
uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE;
float32_t snr;
#define nop() __asm__ __volatile__("nop")
GPIO_InitTypeDef GPIO_InitStructure;
void Delay(__IO uint32_t nCount)
{
while(nCount--)
{
}
}
/* ----------------------------------------------------------------------
* FIR LPF Example
* ------------------------------------------------------------------- */
int32_t main(void)
{
uint32_t i;
arm_fir_instance_f32 S;
arm_status status;
float32_t *inputF32, *outputF32;
/* Initialize input and output buffer pointers */
inputF32 = &testInput_f32_1kHz_15kHz[0];
outputF32 = &testOutput[0];
/* GPIOD Periph clock enable */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
/* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD, &GPIO_InitStructure);
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
/* Call FIR init function to initialize the instance structure. */
arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32[0], &firStateF32[0], blockSize);
/* ----------------------------------------------------------------------
** Call the FIR process function for every blockSize samples
** ------------------------------------------------------------------- */
for(i=0; i < numBlocks; i++)
{
arm_fir_f32(&S, inputF32 + (i * blockSize), outputF32 + (i * blockSize), blockSize);
}
/* PD13 to be toggled */
GPIO_SetBits(GPIOD, GPIO_Pin_13); //narancs
/* ----------------------------------------------------------------------
** Compare the generated output against the reference output computed
** in MATLAB.
** ------------------------------------------------------------------- */
do{
snr = arm_snr_f32(&refOutput[0], &testOutput[0], TEST_LENGTH_SAMPLES);
GPIO_ResetBits(GPIOD, GPIO_Pin_12 | GPIO_Pin_15);
if (snr < SNR_THRESHOLD_F32)
{
status = ARM_MATH_TEST_FAILURE;
}
else
{
status = ARM_MATH_SUCCESS;
}
/* ----------------------------------------------------------------------
** Loop here if the signal does not match the reference output.
** ------------------------------------------------------------------- */
if( status != ARM_MATH_SUCCESS)
{
/* PD15 to be toggled */
GPIO_SetBits(GPIOD, GPIO_Pin_15); //kek
}
else
{
/* PD12 to be toggled */
GPIO_SetBits(GPIOD, GPIO_Pin_12); //zold
}
}while(1); /* main function does not return */
}
Nálam elsőre hibátlan!
Viszont felesleges: #include "fpu.h" és "fpu.c"
Mert nem hívod meg sehol!
Persze, tudom hogy folosleges, de ezen most ne akadjunk el !
|
|