wie int16 zu float umwanden ?

OP #3565000
Lesenswert?

Hallo,

ich verwende auf dem STM32 eine TypConversion die ein int16 zu einem 
float umwandeln soll, leider löst die immer einen hardfault aus und ich 
weiß nicht warum:
1
typedef float real32_T;
2

3

4
real32_T Math_int2single(int16_T v_int)
5
{
6

7
  real32_T Buffer;
8
  Buffer = 0.0;
9
  Buffer = (real32_T) v_int;
10
  
11
  return Buffer;
12
}

Please help ;D
Angehängte Dateien:
OP #3565021
Lesenswert?

Hi,

das war scheinbar nicht der Fehler.
Ich hab jetzt mal die FPU abgeschaltet und siehe da es geht!!!


hier die for-Schleife wo ich das benutze:
1
// i_col loop
2
for(i_col = 0; i_col < 64; i_col++)
3
{
4
  i_buffer = i_col + (i_frame * 64);
5
  data_cut [i_buffer]=  Math_int2single(Pixvector[i_col]);
6
  ref_cut[i_buffer] = Math_int2single(Refvector[i_col]);
7
  }


Warum ist die FPU so böse zu mir ?
Ich benutze keil als IDE und hatte "Use FPU" angeklickt.

Viele Grüße


Schienbar hat in der system_stm32f4xx.c

in der system init das hier gefehlt:
1
  /* FPU settings ------------------------------------------------------------*/
2
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
3
  SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
4
#endif
Gast #3565033
Lesenswert?

Ersan G. schrieb:
> Warum ist die FPU so böse zu mir ?
> Ich benutze keil als IDE und hatte "Use FPU" angeklickt.
Weil du keine (eingeschaltet) hast:

UsageFault, No coprocessor
Status bit UFSR.NOCP
Occurs on an attempt to access a coprocessor that does not exist, or to 
which access is denied

Siehe S. 671 im ARMv7M Architecture Reference Manual
#3696216
Lesenswert?

Ersan,
du bist mein Held des Tages!
Ich hatte dasselbe Problem beim Casten eines Ints zu Float und 
aktivierter FPU (STM32F427ZI).
Ich habe dann auch zuerst (zwar erfolgreich, aber etwas uneffizient) 
versucht ohne FPU zu arbeiten, aber mit der von dir geschilderten 
Anpassung der SystemInit() hat es nun auch mit FPU geklappt.


Herzlichen Dank für den wertvollen Beitrag,

MickMack

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren