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.
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.
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.
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"
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.