Guten Abend, ich arbeite mich gerade in den SAMD21J18 ein, der sich auch auf dem xplained pro Board von Microchip findet. Ich nutze das neueste ATMEL/MC-Studio und habe ein paar Beispielprojekte angelegt. Meine Frage ist folgende: Ich kann egal in welchem Projekt und egal, ob mit oder ohne ASF an den wenigsten Prograsmmstellen Breakpoints setzen, oder zuimindest werden die beim Programmstart inaktiv. Ich finde kein Muster, warum ein paar BP funktioniereen und die anderen nicht. Ich habe einige Erfahrung mit dem ATXMEGA, dort gibt diesen Effekt nur, wenn der Optimizer den Codeteil wegoptimiert hat. Man kann in dem Fall aber den Optimizer testweise ausschalten, dann klappt der BP wieder. Beim SAM gehts auch ohne Optimizer nicht. Was mache ich falsch ? Ich hätte noch die Möglichkeit auf den JTAG ICE3 auszuweichen, falls es am Debugger liegt. Danke für Eure Tips, Gruß Thomas
Thomas M. schrieb: > Ich habe einige Erfahrung mit dem ATXMEGA, dort gibt diesen Effekt nur, > wenn der Optimizer den Codeteil wegoptimiert hat. Man kann in dem Fall > aber den Optimizer testweise ausschalten, dann klappt der BP wieder. Ja, das wäre jetzt auch meine erste Idee gewesen. Also du compilierst im "Debug" und im Toolchain Menü hast du die Optimization auf "None (-O0)" gestellt? Um welche Stellen handelt es sich, gGibt es da auch welche in einem Bsp.-Projekt?
Code-Beispiel: in der "main-task" kann ich überhaupt keinen Breakpoint setzen Gruß Thomas
1 | static void main_task(void *params) |
2 | {
|
3 | static uint16_t counter=0; |
4 | |
5 | for(;;){ |
6 | |
7 | if(!counter %1) |
8 | port_pin_set_output_level(LED_0_PIN, LED_0_INACTIVE); |
9 | else
|
10 | port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE); |
11 | |
12 | counter++; |
13 | vTaskDelay(100 ); |
14 | }
|
15 | }
|
16 | |
17 | int main(void) |
18 | {
|
19 | system_init(); |
20 | config_led(); |
21 | |
22 | xTaskCreate(main_task, |
23 | (const char *)"Main", |
24 | TASK_EXAMPLE_STACK_SIZE, |
25 | NULL, |
26 | (TASK_EXAMPLE_STACK_PRIORITY + 2), |
27 | NULL); |
28 | |
29 | |
30 | vTaskStartScheduler(); |
31 | |
32 | while (true) { |
33 | }
|
34 | }
|
Sehe ich das richtig, dass du FreeRTOS verwendest? Das hättest du direkt am Anfang sagen können. Bin mir zwar nicht ganz sicher, aber ich denke du musst dem FreeRTOS mitteilen, dass es nach dem compilieren auch Debug-fähig ist. Evtl. suchst du mal nach "FreeRTOS Debug" oder so. Könnte mir gut vorstellen, dass es entweder ein #define gibt oder vllt. ist es auch ein compiler flag.
Sorry, hätte ich erwähnen müssen ! Aber ein Debug Flag scheint es nicht zu geben, aber ich habe eins der Beispielprojekte aus dem Studio geladen, nennt sich OLED_POR_EXAMPLE. Damit funktionert das Debugging einigermassen, so wie erwartet. Also hängt es mit der Codeerzeugung zusammen oder mit den Projektsettings. Ich geh' der Sache weiter nach, Gruß Thomas
In welches Icon wechselt der Breakpoint, wenn er nicht erreichbar ist? Mach mal nen Screenshot. (Rot ausgefüllt wird er ja dann wohl nicht mehr sein) edit: Habe grad kein SAM Board zur Hand, ich teste es morgen früh mal selbst.
:
Bearbeitet durch User
Die Breakpoints verschwinden schlichtweg komplett ! Und wenn man den Debug-Modus verläßt werden sie wieder angezeigt. Gruß Thomas
Thomas M. schrieb: > Die Breakpoints verschwinden schlichtweg komplett ! OK, das ist merkwürdig. Ich dachte die wechseln von diesem roten Punkt zu einem roten Kreis (nicht erreichbarer Breakpoint). Sowas habe ich noch nie gesehen.
:
Bearbeitet durch User
Ich war auch ziemlich überrascht, die Darstellung mit rotem Kreis kenne ich vom ATXMEGA, wenn der Code nicht ausgeführt wird... (nicht ausgeführt werden kann )
:
Bearbeitet durch User
Du sagtest ja, dass "OLED_POR_EXAMPLE" funktioniert irgendwie... Hast du mir auch ein Bsp-Projekt, welches diese "Fehler" immer produziert?
Ja genau das, was ich gepostet habe, bei dem gehts nie. Gruß Thomas PS: ich muss noch die Projekteinstellungen resp. Compiler/Linkerflags vergleichen
:
Bearbeitet durch User
Hey, also dein Bsp. konnte ich auf die schnelle nicht compilieren. Mir ist aber folgendes aufgefallen: Ich habe mal ein FreeRTOS Bsp. für mein SAM4E compiliert und einen Breakpoint gesetzt (in einem #ifdef für einen anderen µC). Bild: debug_vor_start.png Nach dem Start verschwand mein Breakpoint, weil er dort natürlich nicht möglich ist, aber mein AtmelStudio verschiebt ihn einfach an die nächste mögliche Stelle. Bild: debug_nach_start.png Alles sehr seltsam bei dir. Wird die Funktion denn überhaupt ausgeführt? Also blinkt deine LED?
Erstmal danke, dass du Zeit und Mühe für mein Problem investierst ! Ich habe nochmals ein komplett neues Projekt angelegt, um der Sache weiter auf den Grund zu gehen: Neues ASF-Projekt mit xplained pro Board, zuerst ohne FREERTOS mit Primitivbeispiel unten: Interessant: Projekt wird angelegt mit "-O1" damit kann man nur den gezeignet BP setzen, der wird auch erreicht Mit der DebugExperience Option kann man überall BP setzen, die werden aber bis auf 2 beim Debug Start gelöscht ( wirklich weg ! ), sind dann aber wieder da nach Stop Debugging. Ohne Optimizer klappt bei dem Beispiel alles wie es soll. Die LED blinkt bei jedem Optimizer immer ! Nächster Schritt: ich binde das FreeRTOS ein und schau mir das an. Gruß Thomas
1 | #include <asf.h> |
2 | #include <delay.h> |
3 | int main (void) |
4 | {
|
5 | system_init(); |
6 | delay_init(); |
7 | static uint8_t Blink =0; |
8 | /* Insert application code here, after the board has been initialized. */
|
9 | |
10 | /* This skeleton code simply sets the LED to the state of the button. */
|
11 | while (1) { |
12 | |
13 | /* Is button pressed? */
|
14 | if (Blink) { |
15 | /* Yes, so turn LED on. */
|
16 | port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE); |
17 | } else { |
18 | /* No, so turn LED off. */
|
19 | port_pin_set_output_level(LED_0_PIN, !LED_0_ACTIVE); |
20 | }
|
21 | |
22 | Blink^=0xff; |
23 | delay_cycles_ms(1000); |
24 | }
|
25 | }
|
:
Bearbeitet durch User
Jetzt auf FreeRTOS umgestellt: geht auch ! ( Optimizer aus ) Also hängt es mit Framework und Compilereinstellungen zusammen !
1 | static void BlinkTask(void *params) |
2 | {
|
3 | static uint8_t Blink=0; |
4 | while(1){ |
5 | |
6 | if (Blink) { |
7 | /* Yes, so turn LED on. */
|
8 | port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE); |
9 | } else { |
10 | /* No, so turn LED off. */
|
11 | port_pin_set_output_level(LED_0_PIN, !LED_0_ACTIVE); |
12 | }
|
13 | |
14 | Blink^=0xff; |
15 | |
16 | vTaskDelay(100); |
17 | |
18 | }
|
19 | |
20 | }
|
21 | |
22 | int main (void) |
23 | {
|
24 | system_init(); |
25 | // delay_init();
|
26 | |
27 | xTaskCreate(BlinkTask, |
28 | (const char *)"BlinkTask", |
29 | configMINIMAL_STACK_SIZE, |
30 | NULL, |
31 | tskIDLE_PRIORITY + 2, |
32 | NULL); |
33 | |
34 | // ..and let FreeRTOS run tasks!
|
35 | vTaskStartScheduler(); |
36 | |
37 | do { |
38 | // Intentionally left empty
|
39 | } while (true); |
40 | |
41 | |
42 | }
|
Noch ein Update: Ich habe ein neues Projekt komplett neu von Scratch erzeugt: Template C++, Board xplained pro , ASF Add-Ons erstmal nur FREERTOS. Damit klappt es jetzt, allerdings muss man alle Optimizer ausschalten. Und zwei Packages löschen: SAMXY und cmsis. Die "hal-Driver" habe ich dabei nicht genutzt. Es gibt noch ein ungelöstes Problem: wenn man versucht, das "IO-Panel" zu nutzen, klappt das nicht: wenn der Debuger startet, wird dieses ausgeblendet ?!? Das muss ja auch noch herauszufinden sein ! Gruß Thomas
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.