mit SAMD21 xplained board debuggen

#6992708
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
#6992819
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?
#6992911
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
}
#6993130
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.
#6993174
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
#6993683
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?
Angehängte Dateien:
#6994142
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
}
#6994213
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
}
#7007197
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren