Forum: Mikrocontroller und Digitale Elektronik mit SAMD21 xplained board debuggen


von Thomas M. (tom_holzwurm)


Lesenswert?

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

von Adam P. (adamap)


Lesenswert?

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?

von Thomas M. (tom_holzwurm)


Lesenswert?

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
}

von Adam P. (adamap)


Lesenswert?

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.

von Thomas M. (tom_holzwurm)


Lesenswert?

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

von Adam P. (adamap)


Lesenswert?

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
von Thomas M. (tom_holzwurm)


Lesenswert?

Die Breakpoints verschwinden schlichtweg komplett !
Und wenn man den Debug-Modus verläßt werden sie wieder angezeigt.
Gruß Thomas

von Adam P. (adamap)


Lesenswert?

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
von Thomas M. (tom_holzwurm)


Lesenswert?

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
von Adam P. (adamap)


Lesenswert?

Du sagtest ja, dass "OLED_POR_EXAMPLE" funktioniert irgendwie...
Hast du mir auch ein Bsp-Projekt, welches diese "Fehler" immer 
produziert?

von Thomas M. (tom_holzwurm)


Lesenswert?

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
von Adam P. (adamap)


Angehängte Dateien:

Lesenswert?

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?

von Thomas M. (tom_holzwurm)



Lesenswert?

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
von Thomas M. (tom_holzwurm)


Lesenswert?

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
}

von Thomas M. (tom_holzwurm)


Lesenswert?

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
Noch kein Account? Hier anmelden.