STM32 Zufallzahl einfach erzeugen

Gast #7270526
Lesenswert?

Hallo,

ich habe eine Frage an euch.
Seit kurzem programmiere ich einen µC mit STM32.
Jetzt habe ich eine Aufgabe, wo ich eine Zufallszahl zwischen 0 und 10 
erzeugen soll und beim erreichen des Wertes eine LED zum leuchten 
bringen soll.

Nun meine Frage, wie kann ich ganz einfach eine Zufallszahl erzeugen in 
STM32. In Visual Studio ging das super einfach mit:
1
srand(time(NULL));
2
random = (rand() % (10 - 5 + 1) + 5);

Wie kann ich das ganz einfach in STM32 machen?

Danke im Voraus.
Gast #7270606
Lesenswert?

helpme91 schrieb:
> Nun meine Frage, wie kann ich ganz einfach eine Zufallszahl erzeugen in
> STM32.

Ob das ganz einfach geht, hängt sehr davon ab, wie gut deine Zufallszahl 
sein muss. Am einfachsten geht es, wenn du einen Zähler immer von 1 bis 
9 und dann wieder von 1 los laufen lässt. Dann bekommst du alle Zahlen 
die zwischen 0 und 10 liegen. Den Auslesezeitpunkt kannst du dann mit 
einem Taster festlegen. Um nur eine Zufallszahl zu erzeugen, ist das der 
geringste Aufwand. Bei ausreichend hoher Taktfrequenz für den Zähler 
bekommst du über die zeitliche Variabilität des Tastendrucks bezogen auf 
den Programmstart/Reset eine gute Zufallszahl. Früher hat man soetwas 
als Lötübung mit einem HW-Zähler aufgebaut und als elektronischen Würfel 
verdrahtet.
(Firma: egal) #7270617
Lesenswert?

helpme91 schrieb:
> In Visual Studio ging das super einfach mit:

Das hat mit VS oder STM32 erstmal garnichst zu tun. rand() ist eine 
Funktion der Standardbibliothek von c/c++ und sollte sollte auch in 
deinem Framework verfügbar sein.
- https://en.cppreference.com/w/cpp/numeric/random/rand

Viel interessanter ist die Qualität der Zufallszahlen. Da kann die von 
den anderen vorgeschlagene Hardwaregestützte Variante durchaus besser 
sein. Kann aber auch gut sein das dein Framework für rand() diese 
sowieso im Hintergrund nutzt...
Gast #7271202
Lesenswert?

Wenn das genauso wie in VS funktioniert, dann mache ich das wieder so.
Nur ich bräuchte ein paar header dateien, die mein Compiler nicht 
findet.
Siehe Bild_1.

Jetzt habe ich in den Einstellungen den Pfad hinzugefügt, trotzdem 
funktioniert es nicht.
Ich bekomme nach dem build folgende Meldung:

Siehe Bild_2
Angehängte Dateien:
Gast #7271215
Lesenswert?

Wenn die Qualität der Zufallszahlen egal ist kann man es genau so machen 
wie die MSVC Runtime, das sieht in etwa so aus (vereinfacht um das 
Prinzip zu verstehen):
1
#define RAND_MAX 0x7fff
2

3
static unsigned int random_seed = 0;
4

5
void srand(unsigned int seed)
6
{
7
    random_seed = seed;
8
}
9

10
int rand(void)
11
{
12
    random_seed = random_seed * 214013 + 2531011;
13
    return (random_seed >> 16) & RAND_MAX;
14
}
#7271237
Lesenswert?

helpme91 schrieb:
> Wenn das genauso wie in VS funktioniert, dann mache ich das wieder so.
> Nur ich bräuchte ein paar header dateien, die mein Compiler nicht
> findet.
> Siehe Bild_1.
>
> Jetzt habe ich in den Einstellungen den Pfad hinzugefügt, trotzdem
> funktioniert es nicht.
> Ich bekomme nach dem build folgende Meldung:
>
> Siehe Bild_2

Du hast ein ganz anderes Problem.

Dir fehlen offenbar sämtliche Grundlagen im Umgang mit der ST-HAL.

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