Forum: Mikrocontroller und Digitale Elektronik Segger Embedded Studio und Watch Fenster


von temp (Gast)


Lesenswert?

im mache mal einen neuen Thread auf um diesen hier nicht voll zu müllen:
Beitrag "Re: Keil µVision vs. STM32CubeIDE"

wie gesagt das Watch-Fenster in der IDE kann man sich Live aktualisieren 
lassen und damit Variablen anzeigen und ändern ohne das Programm 
anzuhalten. Das geht aber beim Stm32 z.B. nicht mit Ausdrücken wie:

GPIOA->IDR

da kommt dann ein Fehler: "restrictet memory range"
Dieses Verhalten kann man ändern, in dem man in der Datei:
STM32F103C8_MemoryMap.xml folgende Section einfügt:

<MemorySegment name="System" start="0x40000000" size="0x10000000" />

(ich habe keine Ahnung was das sonst noch für Nebenwirkungen hat).

Leider geht das aber nicht bei der Live-Aktualisierung. Da kommt dann 
der Fehler: GPIOB->IDR Symbol not found. Halte ich das Programm an, 
passt es wieder.

Als nächsten Versuch habe ich GPIOB->IDR in der Registeransicht mit der 
rechten Maustaste und: "add to Watch" ins Watch Fenster eingefügt. 
Unsinniger Weise heißt die Variable dann nicht GPIOB->IDR sondern nur 
noch IDR. Allerdings funktioniert damit auch die Live-Aktualisierung. 
Irgendwie scheint hier noch ein Fehler in der IDE (Version 5.40) zu 
sein.

Falls Till von Segger hier mit liest, bitte mal weitergeben an die 
Entwickler.

von oerks (Gast)


Lesenswert?

Einem Controller "live" zuzusehen mag ja faszinierend sein,
erzeugt aber auch zahlreiche Probleme.

Es gibt z.B. Register die durch das Auslesen rueckgesetzt werden.
Ob der Controller per Code zugreift, oder extern per JTAG
wird dabei nicht unterschieden.

Man sollte sich das also gar nicht erst angewoehnen.

Wenn man nicht umhinkommt, sollte man die Register in
Schattennregister im RAM kopieren, mit denen dann auch
das Programm arbeiten muss.

von temp (Gast)


Lesenswert?

oerks schrieb:
> Einem Controller "live" zuzusehen mag ja faszinierend sein,
> erzeugt aber auch zahlreiche Probleme.

Ja, das weiss ich und wir haben diese Problematik im o.g. Thread auch 
diskutiert. Hier geht es aber nur um die Segger IDE und deren 
Ungereimtheiten.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

oerks schrieb:
> Es gibt z.B. Register die durch das Auslesen rueckgesetzt werden.
> Ob der Controller per Code zugreift, oder extern per JTAG
> wird dabei nicht unterschieden.

Ja das ist schon etwas schade.
Dabei haben die Busse in ARM zB schon Bits für privilegierten und 
unprivilegierten Zugriff.
Da könnt man jetz nochn Bit reinbasteln "mach nix das is nur ein 
Debug(lese)zugriff"

von Bastelmensch (Gast)


Lesenswert?

temp schrieb:
> Falls Till von Segger hier mit liest, bitte mal weitergeben an die Entwickler.

Die Segger IDE ist ja ein umgelabeltes Rowley Crossworks. Du kannst das 
Problem am besten dort im Forum melden, da lesen die direkten Entwickler 
mit:
https://rowley.zendesk.com/hc/en-us/community/topics

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

Bastelmensch schrieb:
> Die Segger IDE ist ja ein umgelabeltes Rowley Crossworks.

Nope, SEGGER Embedded Studio basierte mal auf Rowley CrossWorks aber der 
Support läuft über uns. Wenn man keine Lizenz hat kann man einfach unser 
Forum benutzen, https://forum.segger.com/.

temp schrieb:
> Als nächsten Versuch habe ich GPIOB->IDR in der Registeransicht mit der
> rechten Maustaste und: "add to Watch" ins Watch Fenster eingefügt.
> Unsinniger Weise heißt die Variable dann nicht GPIOB->IDR sondern nur
> noch IDR. Allerdings funktioniert damit auch die Live-Aktualisierung.
> Irgendwie scheint hier noch ein Fehler in der IDE (Version 5.40) zu
> sein.

Wahrscheinlich hast du es genauso gemacht, ansonsten bitte noch einmal 
probieren:

1. Im Register Fenster ein SFR auswählen und dann über das Kontextmenü 
"Add to watch" sagen.
2. Dann ist das SFR im Watch Fenster und auch Live Watch funktioniert.
3. Falls da "restricted memory range" steht ist das im Projekt 
eingeschaltet. Einfach in die Projektoptionen gehen und "Restrict memory 
access" auf "No" stellen. Der Default schützt davor dass kein ungültiger 
Speicher gelesen wird.

> Falls Til von Segger hier mit liest, bitte mal weitergeben an die
> Entwickler.

Das funktioniert schon aber es gibt ein paar Sachen, die so einfach 
nicht vorgesehen sind.
Wenn ich z.B. das Register GPIOG.ODR dem Watch Fenster hinzufüge steht 
da nur ODR. Das hattest du ja auch schon bemerkt. Das ist natürlich 
Blödsinn und wird geändert. Da muss dann GPIOG.ODR oder ähnlich stehen.
Was auch nicht vorgesehen ist den SFR Namen direkt in das Watch Fenster 
zu schreiben. Der Parser müsste dann feststellen dass es keine Variable 
ist und schauen ob es ein passendes SFR gibt. Das habe ich auch als 
Feature Wunsch an die Kollegen weitergegeben.

von temp (Gast)


Lesenswert?

Vielen Dank Til für die Unterstützung, Erklärung und den Versuch ein 
paar Ungereimtheiten auszubügeln!

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.