Hallo,
ich steige gerade in die Welt der Cortex-M4 ein und habe mir dazu das
Discovery Kit mit dem STM32F429ZI geholt. Als IDE habe ich mir jetzt für
den Anfang den Keil uVision5 geholt. Nun bin ich dabei mir ein paar
Beispielprogramme anzuschauen. Nur hänge ich an folgendem Code für die
Geschwindigkeit des Systick.
1
SystemCoreClockUpdate();/* Get Core Clock Frequency */
Get Core Clock ist mir klar und auch SysTick 1 msec habe ich mir
angeschaut und verstanden, nur die while(1) ist mir unklar. Die Funktion
SysTick_Config gibt bei Erfolg eine 0 und bei einem Fehler eine 1
zurück. Wenn das Einstellen nun schief geht springt er in die
Whileschleife aber wie kommt er da wieder raus ? Es kann doch nicht
sein, dass bei einem Fehler der uC sich aufängt und einen Hardwarereset
braucht ?
Gruß Michael
Michael Bauer schrieb:> Wenn das Einstellen nun schief geht springt er in die> Whileschleife aber wie kommt er da wieder raus ?
Er soll dort nicht herauskommen, sondern verfolgbar machen, wo der
Fehler passiert ist. Man könnte auch im Debugger einen Breakpoint
setzen.
Sukzessive Approximation schrieb:> Er probiert an der Stelle solange den SysTick einzustellen bis es> geklappt hat. Ist doch sofort ersichtlich
Dann putz deine Brille und schaus dir noch einmal an. ;-)))
Sukzessive Approximation schrieb:> Er probiert an der Stelle solange den SysTick einzustellen bis es> geklappt hat.
Nein, es probiert es nur ein einziges Mal. Schlägt das fehl, tritt er
auf der Stelle. Oder was macht "while (1) ;" deiner Meinung nach?
Ich nix Troll, sondern wach. ;-)))
Das sind nur Beispielprogramme, die muessen nicht vollstaendig sein oder
etwas sinnvolles tun. An der Stelle des "while(1)" kann man eine eigene
Fehlerbehndlungsroutine setzen.
Ok, vielen dank für die Infos.
Hab mir jetzt ein kleines Programm gebastelt, dass einfasch nur einen
Pin auf 1 setzen soll. Das Programm funktioniert nur wenn ich in
uVision5 in dem Debug mode bin und dort auf Run klicke. Wenn ich nicht
im Debugmode bin und das Programm auf den uC lade tut sich an dem Pin
nichts...Ich weis es ist nicht leicht mit so wenig angaben eine guten
Rat zu geben, aber vielleicht hatte jemand schonmal ein ähnliches
Problem.
Ich hatte ein Beispielprogramm, da wurde nach Initialisierung des
Systick wurde alle 1 ms eine Funktion (siehe BSP_Background()
)aufgerufen.
/**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
// OS_TimeMS ++;
BSP_Background();
}
Michael Bauer schrieb:> Die Funktion> SysTick_Config gibt bei Erfolg eine 0 und bei einem Fehler eine 1> zurück.
1 or 0 == true or false?
Meiner Meinung nach ist es eine Unsitte aus Lochkartenzeiten,
logische Werte beim Programmieren mit 0 oder 1 zu bezeichnen.
Ich nutze nur noch true oder false, da kann der Compiler tun, was er
will.
Ich denke mir das Programm soll, wenn der SysTick richtig konfiguriert
ist,
in einer Endlosschleife laufen, die nichts macht, sonst soll das
Programm sich beenden.
Durch einen Interrupt das SysTick wird der SysTick_Handler
aufgerufen. Dort kann die Funktion aufgerufen werden, die jede 1 ms
ausgeführt werden soll.