Forum: Mikrocontroller und Digitale Elektronik STM32 probleme mit SysTick / VectorTable


von Philipp (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich versuch gerade eine LED im interval von 1s mit hilfe des SysTick 
Interrupt blinken zu lassen. Leider leuchtet die LED dauerhaft und ich 
weis nicht warum. Allerdings bin ich auch noch totaler Anfänger, hab 
heute Nachmittag überhaupt zum ersten mal ein funktionstüchtiges 
Programm mit eigenem Linker Script kompiliert. Wäre nett, wenn mal 
jemand über mein Projekt drüber schauen könnte. Ist auch nicht viel. ^_^

von Philipp (Gast)


Lesenswert?

ist niemandem etwas aufgefallen?

von (prx) A. K. (prx)


Lesenswert?

Erstens ist eine halbe Stunde bischen knapp, zumal du grad in einer 
wenig frequentieren Zeit liegst.

Zweitens sind (nicht nur) mir RARs zu umständlich.

von holger (Gast)


Lesenswert?

>Erstens ist eine halbe Stunde bischen knapp,

24 Stunden und 30 Minuten;)

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Schaue das Systick-Demo von ST an, das sind doch eigentlich nur eine 
Hand voll Zeile für deren Initialisierung.

von David R. (blackbird92)


Lesenswert?

Mir sind schonmal 2 wichtige Sachen aufgefallen:

> 1. SysTick_Config(72000000/1000);
für 1ms Interrupts

> 2. extern volatile unsigned int g_uiSysTickCounter;
Voltatile, weil diese Variable von der Hardware verändert wird, und 
deshalb immer wieder neu aus dem RAM nachgeladen werden muss.
Stichwort "Speicherklassen-Spezifizierer".

Zwecks linker Skript kann Ich nichts sagen. Ich benutze "Atollic True 
Studio STM32 light" . Da braucht man sich nicht darum kümmern.

mfg

von Philipp (Gast)


Lesenswert?

Erstmal danke für die Tips.
Es läuft jetzt.
Scheinbar sind 72000000 zu viel für die Initialisierung des SysTick.
Ich hätte mich wohl nach einer ruhe pause noch mal ran setzen soll, 
statt euch gleich zu belästigen ^_^'

@A.K.
was wäre denn besser gewesen?
Hätte ich den kompletten Code hier rein kopieren sollen, oder bevorzugt 
ihr einfach ein anderes Archivformat?

von Philipp (Gast)


Lesenswert?

@David R.
Oh, das mit volatile is 'n guter Tipp.
das vergesse ich immer wieder ^_^'
Danke!

von Lutz (Gast)


Lesenswert?

Philipp schrieb:
> was wäre denn besser gewesen?
> Hätte ich den kompletten Code hier rein kopieren sollen, oder bevorzugt
> ihr einfach ein anderes Archivformat?

Kommt drauf an, was alles in Deinem rar drin ist :-)

Am besten ist es immer, ein minimalst mögliches noch das Problem habende 
Beispiel herbeizuschrumpfen. Wenn es dann nur noch ein paar Zeilen sind, 
kann man es sehr schön als Quelltext formatiert (siehe 
http://www.mikrocontroller.net/articles/Formatierung_im_Forum) direkt in 
den Post schreiben. Bei etwas längeren Sachen als normale Anlage. Bei 
Archiven wird dann ganz eklig; da hat jeder was anderes auf seinem 
Rechner mit seiner Architektur.

von ... (Gast)


Lesenswert?

Lutz schrieb:
> Bei Archiven wird dann ganz eklig; da hat jeder was anderes
> auf seinem Rechner mit seiner Architektur.

Das stimmt zwar, aber mit .zip kommt so ziemlich jeder klar.

von holger (Gast)


Lesenswert?

>Das stimmt zwar, aber mit .zip kommt so ziemlich jeder klar.

Wenn man den Explorer benutzt vieleicht. Es gibt genügend
Tools die den Explorer ersetzen und mit RAR, ZIP, TGZ, BZ
, LHA oder sonst was überhaupt keine Probleme haben.

Freecommander, Totalcommander. Doppelklick auf das Archiv
und schon kann man da reinsehen wie in jedes normale
Verzeichnis. Entpacken geht schlicht über "kopieren".

von ... (Gast)


Lesenswert?

Schön, daß Du Du Deine Festplatte mit allen Möglichen Tools zugemüllt 
hast.
Fakt ist aber, das weder jedes Tool jedes Archiveformat öffnen kann, 
noch das jedes Tool auf jedem Betriebssystem zur Verfügung steht. Und 
.zip ist nun mal mehr oder weniger der kleinste gemeinsame Nenner.

von (prx) A. K. (prx)


Lesenswert?

Philipp schrieb:

> Hätte ich den kompletten Code hier rein kopieren sollen, oder bevorzugt
> ihr einfach ein anderes Archivformat?

ZIP kann jeder. RAR nicht. Natürlich kann man dafür irgendwelchen Kram 
installieren - aber jeder der das nicht getan hat ist ein potentieller 
Helfer weniger. Soll heissen: Nicht ich habe ein Problem damit, dass 
ich mit RAR mehr Aufwand habe als ich meist zu investieren bereit bin. 
Eher du.

von holger (Gast)


Lesenswert?

>Schön, daß Du Du Deine Festplatte mit allen Möglichen Tools zugemüllt
>hast.

Nö, nur eins. Totalcommander. Packt fast alles aus und ein.
Ist so ein nettes Tool ala Norton Commander. Kann aber noch
unendlich viel mehr.

>Fakt ist aber, das weder jedes Tool jedes Archiveformat öffnen kann,
>noch das jedes Tool auf jedem Betriebssystem zur Verfügung steht. Und
>.zip ist nun mal mehr oder weniger der kleinste gemeinsame Nenner.

Lächerlich. Sagt mal in was für einer beschränkten Welt
lebt ihr eigentlich? Wenn ich was im Internet finde das nicht
ZIP ist, und ich unbedingt wissen will was da drin ist, soll
ich dann erstmal den Ersteller des Archivs kontaktieren und
darum bitten mir bitteschön ein ZIP zu schicken?

Wie schön das ich nicht so engstirnig bin wie einige hier.
Ich habe nähmlich keine Lust zu warten.

Ihr habt sie echt nicht alle;)

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Philipp schrieb:
> Leider leuchtet die LED dauerhaft und ich weis nicht warum.

Nachdem ich schier unbeschreibliche Mühen auf mich genommen habe, das
Archiv zu entpacken, kann ich als Fehlerursache nur schließen: Das
Übliche -- volatile vergessen.
1
while(1)
2
{
3
  if(g_uiSysTickCounter == 0)
4
    GPIOB->BSRR = GPIO_Pin_5;
5
  else
6
    GPIOB->BRR = GPIO_Pin_5;
7
}
Der Compiler kann nicht erkennen, dass g_uiSysTickCounter jemals
seinen Wert ändert und wird einen der beiden Zweige verwerfen.

> Allerdings bin ich auch noch totaler Anfänger

C Buch besorgen, oder vom Chef eine Weiterbildungsmaßnahme bezahlen 
lassen.

Gruß
Marcus

von Philipp (Gast)


Lesenswert?

> Nachdem ich schier unbeschreibliche Mühen auf mich genommen habe, das
> Archiv zu entpacken, kann ich als Fehlerursache nur schließen: Das
> Übliche -- volatile vergessen.

Nee, das war nicht der Fehler hat auch ohne funktioniert... aber 
natürlich ist man mit volatile auf der sicheren Seite.
Wie ich weiter oben schon geschrieben habe, ist die Initialisierung 
immer fehlgeschlagen.

is rar wirklich so exotisch? o.o

> C Buch besorgen, oder vom Chef eine Weiterbildungsmaßnahme bezahlen
> lassen.

C ist für mich eigentlich kein Problem...Ich Programmiere schon seit 
Jahren in C++, nur bei Mikrocontrollern bin ich noch recht neu.
Und als Lehrling zum EGS im zweiten Jahr bezahlt mir mein Chef bestimmt 
keinen Lehrgang in dem Bereich T_T

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Philipp schrieb:
>> Nachdem ich schier unbeschreibliche Mühen auf mich genommen habe, das
>> Archiv zu entpacken, kann ich als Fehlerursache nur schließen: Das
>> Übliche -- volatile vergessen.
>
> Nee, das war nicht der Fehler hat auch ohne funktioniert... aber
> natürlich ist man mit volatile auf der sicheren Seite.
> Wie ich weiter oben schon geschrieben habe, ist die Initialisierung
> immer fehlgeschlagen.

Den Beitrag muss ich in der Menge der Flames übersehen haben... Dass das 
ohne volatile funktioniert haben soll muss allerdings auf geringe 
Optimierung zurückzuführen sein.

> is rar wirklich so exotisch? o.o

So ziemlich jedes vernünftige Packprogramm kann heutzutage damit 
umgehen. Vermutlich hätte ich Ironie-Tags verwenden sollen...

Gruß
Marcus

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.