Hallo hallo, ich weiß das kommt evtl. bekannt vor, hat aber nichts mit dem Thread zu tun. Beitrag "Arduino unter Windows stellt sich dumm an" Wie kann eine Bedingung "gleichzeitig" wahr und falsch sein? Ich arbeite zum ersten Mal mit einem richtigen Debugger, sind das so typische Eigenarten? Ich habe mal zwei Screenshots gemacht, dazwischen liegt nur eine Taste F5 es ist also noch derselbe Durchlauf. Er springt aber definitiv beide Zeilen an, wie funktioniert das?
:
Bearbeitet durch User
Alexander schrieb: > Ich habe mal zwei Screenshots gemacht, dazwischen liegt nur eine Taste > F5 es ist also noch derselbe Durchlauf. Er springt aber definitiv beide > Zeilen an, wie funktioniert das? Optimierung?
Alexander schrieb: > Er springt aber definitiv beide Zeilen an, wie funktioniert das? Hast du die Optimierung ausgeschaltet? > wie funktioniert das? Wie sieht der zugehörige Assemblercode aus?
Alexander schrieb: > wie funktioniert das? Wahrscheinlich hast du Optimierung nicht so ausgeschaltet, wie es sich für Debuggen gehört. Er wird nur das Laden des Werts in ein Register nach dem if aufteilen, aber das Abspeichern am Ziel zusammenfassen und macht eben das nach F1..
Rolf M. schrieb: > Optimierung? Denke ich auch. Deaktiviere den Optimizer, damit der generierte Code mut dem Quelltext überein stimmt. Dann funktioniert der Debugger richtig. Als Kompromiss gibt es die Stufe -Og, die nur so weit optimiert, dass der Debugger nicht beeinträchtigt wird. Ich benutze standardmäßig die Stufe -O1, weil der Debugger damit auch noch weitgehend funktioniert und ich mit der selben Stufe in Produktion gehen kann. https://community.st.com/t5/stm32cubeide-mcus/how-do-i-change-code-optimization/td-p/271208
:
Bearbeitet durch User
Optimierung? Wenn das nötig ist für debuggen, wieso macht das die IDE nicht automatisch? Wie schalte ich das aus? Assemblercode, der war gut. Ich bin froh wenn ich den CPP code verstehe.. edit: danke, jetzt lässt es sich nicht mehr starten
1 | ld.exe: LishuiFOC.elf section `.text' will not fit in region `FLASH' |
2 | ld.exe: region `FLASH' overflowed by 9780 bytes |
3 | collect2.exe: error: ld returned 1 exit status |
:
Bearbeitet durch User
Alexander schrieb: > Optimierung? Wenn das nötig ist für debuggen, wieso macht das die IDE > nicht automatisch? Weil du entscheiden musst, ob du Optimierungen haben willst oder nicht. Abgesehen davon hat es gewisse Nachteile, wenn du mit anderen Einstellungen Debugst als die, mit denen dein Programm später laufen soll. > Wie schalte ich das aus? Mit dem dazugehörigen Schalter deiner IDE. Alexander schrieb: > edit: danke, jetzt lässt es sich nicht mehr starten > ld.exe: LishuiFOC.elf section `.text' will not fit in region `FLASH' > ld.exe: region `FLASH' overflowed by 9780 bytes > collect2.exe: error: ld returned 1 exit status Das heißt, durch deine geänderten Einstellungen braucht dein Programm jetzt auf einmal irrsinnig viel Flash.
:
Bearbeitet durch User
Alexander schrieb: > wieso macht das die IDE nicht automatisch? Macht sie normalerweise. > Wie schalte ich das aus? Scrolle nochnal hoch, ich habe dir einen Link zur Anleitung gepostet. > FLASH' overflowed by 9780 bytes Shit happens. Jetzt brauchst du einen Mikrocontroller mit mehr Speicher. Oder probiere die beiden von mir genannten Optionen.
:
Bearbeitet durch User
Steve van de Grens schrieb: > Scrolle nochnal hoch, ich habe dir einen Link zur Anleitung gepostet. hatte sich überschnitten. mit Stufe -Og klappt es. danke.
Steve van de Grens schrieb: > Alexander schrieb: >> wieso macht das die IDE nicht automatisch? > > Macht sie normalerweise. Nein, sicher nicht automatisch. Es wird natürlich die eingestellte Optimierung verwendet.
Ob S. schrieb: > Nein, sicher nicht automatisch. Es wird natürlich die eingestellte > Optimierung verwendet. Die IDE richtet zwei Konfigurationen ein. Eine zum Debuggen und eine für das Release.
Oh, ich sehe gerade, dass er die alte AC6 IDE (System Workbench for STM32) benutzt. Meine Aussage bezog sich auf die Cube IDE. Ich kann mich nicht erinnern, wie viele Konfigurationen die AC6 IDE anlegt.
:
Bearbeitet durch User
Ja, extra Debugging Konfiguration ist vorhanden, in dieser habe ich es auf -Og geändert.
Steve van de Grens schrieb: > Die IDE richtet zwei Konfigurationen ein. Eine zum Debuggen und eine für > das Release. Ja sicher. Aber man muss dann immer noch die passende wählen. Und zwar bewusst, bevor man debuggt. Da geht nix automatisch.
man kann auch einzelne Dateien mit debug übersetzen wenn der Platz im Flash knapp ist, mit dem Eclipse Builder geht das einfach: Properties von der Quelldatei im Kontextmenu auswählen und optimize ändern. Beim Release Build muss man dem Linker evtl. noch sagen das er die Symbole nicht wegschmeißt.
Alexander schrieb: > Wie kann eine Bedingung "gleichzeitig" wahr und falsch sein? Quantenfluktuationen - so ähnlich wie bei Schrödingers Katze. Erst wenn Du in Deine Variable reinschaust entscheidet sich, welcher Ausführungspfad durchlaufen wurde, wenn Du im weiterten Verlauf NIE mehr aus der Zielvariable liest, vielleicht weder der eine noch der andere, denn dann kann das ganze if-Statement weg. ;)
Alexander schrieb: > Wie kann eine Bedingung "gleichzeitig" wahr und falsch sein? Gar nicht. Aber ARM v7-m kennt halt IT Blöcke, das sind kurze (IIRC 4 Instruktionen lange) Blöcke mit bedingter Codeausführung. Dabei sieht der Debugger schlecht ob eine Instruktion im Block jetzt "scharf" ist (Bedigung erfüllt) oder nicht. Das würde man im Disassembly erforschen können. Der Prozessor "führt" die Instuktionen auch soweit aus das man beim Steppen durch den Code auch an den Stellen anhält wo die Bedingung nicht erfüllt ist. Dadurch landet man dann sowohl im if als auch im else Zweig einer (einfachen) Bedingung. Im obigen Beispiel solltest Du im Debugger sehen können das RxState nur in einer der beiden Fälle beschrieben wird.
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.