Forum: Mikrocontroller und Digitale Elektronik Random Number Generator läuft nicht richtig,stm32f429


von J. T. (chaoskind)


Angehängte Dateien:

Lesenswert?

MoinMoin,

nachdem ich nun endlich mit dem STM32F429Disco zurechtkomme, bin ich auf 
ein kleines Problem gestoßen. Ich bin grad dabei, ein kleines Spiel zu 
programmieren, in dem man sich aus 2 Burgen beschießt, quasi ein 
Ballistiksimulator, ganz einfachst.
Nun wollte ich eine Zufallsvariable für den Wind haben. Dafür habe ich 
mir die UB_RNG_Lib runtergeladen, eingebunden und watt man nich so damit 
macht gemacht. Funktioniert an und für sich auch soweit, jedoch gibt mir 
die Zufallsfunktion nach einem Durchlauf immer 4.2949673E9 zurück.

Die UB_RNG_Lib greift auf die StandardLib von ST zu, um die RNG-Unit 
anzusprechen. In der UB kann man obere und untere Schranke für die 
Zufallszahlen mitgeben, und die lässt die ST_RNG_Lib dann solange 
Zufallszahlen raussuchen, bis ein Ergebnis innerhalb der Schranken 
vorliegt.
Das Ergebnis wird dann per return zurückgegeben. Beim ersten Durchlauf 
klappt das alles wie gesagt problemlos. Beim zweiten aber ist die 
Variable die zurückgegeben wird, bis zum return auf einem "richtigen" 
Wert (also innerhalb der Schranken), aber meine Variable die die 
RNG-Funktion aufgerufen hat, nimmt nicht den zurückgegeben Wert an, 
sondern die oben erwähnten 4.2949673E9.

In der main (siehe Anhanng) initialisiere ich in Zeile 115 den RNG und 
in Zeile 518 ist dann der Aufruf der Funktion.

Falls noch weitere #includes fehlen, um mir helfen zu können, sagt 
einfach Bescheid =)

MfG Chaos

P.S. manchmal schafft er auch zwei oder selten sogar drei Durchläufe, 
bevor er die 4undnochwasMilliarden "zurückgibt", aber nachdem er sie 
zurückgegeben hat, bleibt er hängen

von holger (Gast)


Lesenswert?

> Wind = UB_Rng_makeZufall(0, 200) - 100;

Mal so zum nachdenken:

Wenn UB_Rng_makeZufall(0, 200) einen Wert von 99
zurückgibt und du dann 100 abziehst bekommst du einen
uint32_t Überlauf. Der Wert ist dann 0xFFFFFFFE was deine
4 Milliarden erklärt;)

Mach es so:

Wind = (float)UB_Rng_makeZufall(0, 200) - 100.0;

von J. T. (chaoskind)


Lesenswert?

Ohja klar, jetzt wo du es sagst, fällts mir wie Schuppen von den Augen!
Geändert, und nun klappt es. =) Klar, irgendwie bin ich wohl von nem Int 
statt nem uint ausgegangen

von J. T. (chaoskind)


Lesenswert?

P.S.
Nun hab ich mich vorhin so gefreut das es geht, das ich total vergaß, 
mich zu bedanken ;-), also vielen Dank, das hat mir sehr geholfen, nun 
gehts weiter!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.