Teil 2: SRC-Download und Listing im Heft unterschiedlich

ARM fuer Einsteiger

Teil 2: SRC-Download und Listing im Heft unterschiedlich

Postby ge1ge » Wed Feb 25, 2015 5:56 pm

Ich finde es nicht gut, wenn die Heftbeschreibung und die dazugehörigen Downloads nicht gleich sind.

Ich habe entsprechend [7] die Software: 140512-11.zip heruntergeladen. Die Datei main.c und das Listing 1 stimmen aber nicht überein.

Das Listing scheint ein verbesserte Version zu sein, da hier mit #define die Pins definiert wurden. Die fehlt in main.c.

Auch wäre es schön, wenn die main.c eine kurze Beschreibung mit Version enthalten würde.

Ich habe auch nicht verstanden, warum bei der Namensgebung für "struct port_config config_port_pin; "
eine unterschiedliche Reihenfolge der Namen genommen wurde:
Aus meiner Sicht besser wäre
port_config
port_config_pin

und nicht config_port_pin

Ein gutes Beispiel im Listing ist, dass man am Anfang mit define die grüne LED am PIN_PB00 definiert

Dies wurde aber nicht fortgesetzt, da die gelbe und rote LED im Programm mit nichtssagenden Nummern definiert und geschaltet wird.
"port_group_set_output_level(&PORTB, 6, 6)"

Auch ist in der englischen Ausgabe die Schriftgröße im Listing 1 besser gewählt, damit der Kommentar rechts neben dem Befehl stehen.
Last edited by ge1ge on Wed Feb 25, 2015 7:57 pm, edited 1 time in total.
ge1ge
 
Posts: 11
Joined: Fri Jan 30, 2015 8:54 pm

Re: Teil 2: SRC-Download und Listing im Heft unterschiedlich

Postby slagromo » Wed Feb 25, 2015 6:39 pm

Hallo ge1ge,

ge1ge wrote:Ich finde es nicht gut, wenn die Heftbeschreibung und die dazugehörigen Downloads nicht gleich sind.

Ich habe die SW entsprechend [7] die Software: 140512-11.zip heruntergeladen. Die Datei main.c und das Listing 1 stimmen aber nicht überein.

Das Listing scheint ein verbesserte Version zu sein, da hier mit #define die pins definiert wurden. Die fehlt in main.c.

Auch wäre es schön, wenn die main.c eine kurze Beschreibung mit Version enthalten würde.


Stimmt, danke - es wurde der falsche Download online gestellt. Es wird vermutlich nächste Woche geändert. Im Anhang ist die richtige Datei.


ge1ge wrote:Ich habe auch nicht verstanden, warum bei der Namensgebung für "struct port_config config_port_pin; "
unterschiedliche Reihenfolge der namen genommen wurde:
Also z.B:
port_config
port_config_pin


Das Ziel des Kurses ist, dass sich die Leser selbst nach jeder Ausgabe weiter mit der Atmel-Dokumentation vertiefen können. Und da diese "umgekehrte" Schreibweise beim Erzeugen von Strukturen in den Manuals von Atmel üblich ist, wurde diese auch hier übernommen. Außerdem sind die beiden Namen meiner Meinung nach so klar zu unterscheiden.

ge1ge wrote:Des weiteren ist es z.B. schön, dass man am Anfang mit define die grüne LED definiert.

Aber die gelbe und rote LED im Programm mit nichtssagenden Nummern definiert und geschaltet wird.
"port_group_set_output_level(&PORTB, 6, 6)"


Wie im Artikel auch steht, ist das Ziel das Zeigen möglich vieler Befehle. Deswegen wurde für die gelbe und die rote LED die Funktion zur Konfiguration der betroffenen Pins als Gruppe genommen (dieser Gruppen-Befehl ist für größere Projekte sehr vorteilhaft). Die für Sie "nichtssagenden Nummern" wurden auf der Seite 13 der deutschen Ausgabe links unten im Text erklärt. Wenn die Erklärung im Artikel für Sie nicht zufriedenstellend beziehungsweise unverständlich ist, finden Sie im Dokument vom Link [4] nochmals eine Erklärung dieser Gruppen-Funktion.

ge1ge wrote:Auch ist in der englischen Ausgabe die Schriftgröße im Listing 1 besser gewählt, damit der Kommentar rechts neben dem Befehl steht.


Wie meinen Sie das? In der englischer Ausgabe haben die Kommentare oft eine ganze Zeile für sich. In der deutschen habe ich es dagegen ändern lassen, da ich die Kommentare immer rechts neben dem Befehl stehen haben wollte.


Ich hoffe, dass meine Antworten für Sie zufriedenstellend waren und wünsche Ihnen weiterhin viel Spaß mit dem SAM D20,

Viacheslav Gromov
Last edited by slagromo on Wed Mar 04, 2015 7:43 pm, edited 3 times in total.
slagromo
 
Posts: 21
Joined: Tue Dec 30, 2014 10:13 am

Re: Teil 2: SRC-Download und Listing im Heft unterschiedlich

Postby ge1ge » Wed Feb 25, 2015 9:00 pm

Danke für die schnelle Reaktion.

Da ich von der HW-Seite komme wollte ich mehr lernen, wie man Programme schreibt, die leicht lesbar sind.
Und da ist halt "port_group_set_output_level(&PORTB, 6, 6)" ohne ihre Beschreibung im Text schwer zu verstehen.

Ich verstehe schon, dass sie möglichst viel Befehle zeigen wollen.
Ich hätte halt gern gesehen, wie man diese Gruppen mit define am Anfang gut definieren/beschreiben kann.

Das haben Sie ja mit der LEDG auch versucht.

Bei der Namensgebung ging es mir halt um eine schneller Erfassung und eventuel auch Sortierung. Und das geht halt einfacher, wenn die Namen gleich beginnen.

Stimmt, beim deutschen Listing ist der Befehl und der Kommentar in einer Zeile.

Ich habe mir die deutsche und englische Version ausgedruckt, da manchmal Übersetzungsfehler verwirren können.

z.B. ist das Programm in der deutschen Ausgabe im Text als "The second Project" beschrieben, obwohl ja "The second program" gemeint war.

In einem anderen Thread haben Sie ja auf das Terminalprogramm hingewiesen.
Im Artikel selbst verwendeten Sie aber das HTERM.
Und jetzt habe ich auch das geladene Terminalprogramm im Studio gefunden. Unter "View/Terminal Window" findet man es.

Für das UART-Program habe ich mir die main.c vom download auf der Elektorseite 140512-11.zip geholt. Aber beim Kompilieren bekomme ich eine große Fehlerliste im main.c und usart.h.

z.B:
Message 4
expected 'uint8_t *' but argument is of type 'uint8_t (*)[11]'
C:\Users\uid02093\Documents\Atmel Studio\6.2\Elektor_Program_1_UART\Elektor_Program_1_UART\src\ASF\sam0\drivers\sercom\usart\usart.h
line 944 column 18

Error 5
implicit declaration of function 'strcmp' [-Werror=implicit-function-declaration]
C:\Users\uid02093\Documents\Atmel Studio\6.2\Elektor_Program_1_UART\Elektor_Program_1_UART\src\main.c
line 95 column 4

Muß ich da noch andere Dateien laden?

Ich weiß nur nicht, wie ich hier im Forum Bilder oder Dateien von der Fehlermeldung einstellen kann, wenn ich keine eigene Homepage habe

!!!!!
Ah, jetzt sehe ich es erst, die main.c vom Elektor-download ist anders und noch fehlerhaft.
z.B. wird "void configure_port_pins(void)" nicht vorher deklariert.

Aber auch mit ihrer Version hier bekomme ich noch 5 Fehlermeldungen:

error 5 (ist jetzt 1) ist geblieben hier:
if (strcmp((uint8_t *)string1, (uint8_t *)string2) == 0) //If UART received "greenLED 1", put the green LED on
ge1ge
 
Posts: 11
Joined: Fri Jan 30, 2015 8:54 pm

Re: Teil 2: SRC-Download und Listing im Heft unterschiedlich

Postby ag » Thu Feb 26, 2015 8:02 am

Hallo ge1ge,

!!!!!
Ah, jetzt sehe ich es erst, die main.c vom Elektor-download ist anders und noch fehlerhaft.
z.B. wird "void configure_port_pins(void)" nicht vorher deklariert.

Aber auch mit ihrer Version hier bekomme ich noch 5 Fehlermeldungen:

error 5 (ist jetzt 1) ist geblieben hier:
if (strcmp((uint8_t *)string1, (uint8_t *)string2) == 0) //If UART received "greenLED 1", put the green LED on


Es scheint als hattest du den Fehler irgendwie selbst eingebaut. In meine Download erscheint die Zeile so:

Code: Select all
      if (strcmp(string1, string2) == 0)                     //If UART received "greenLED 1", put the green LED on


Und bei mir compiliert die unveränderte Oringinaldatei main.c ohne fehlermeldung.

Viele Grüße,
Ag
ag
 
Posts: 529
Joined: Thu Jan 02, 2014 10:37 am

Re: Teil 2: SRC-Download und Listing im Heft unterschiedlich

Postby ge1ge » Thu Feb 26, 2015 1:21 pm

Komisch

Ich habe jetzt extra nur aus deinem 140512-11.zip hier die main.c geöffnet, um möglich Änderungen auszuschließen.
Aber der Fehler ist in der Datei!

ab Zeile 38
Code: Select all
struct usart_module usart_instance;                   //generate a variable of the usart_module struct

void usart_read_callback(const struct usart_module *const usart_module)
{       
       if (strcmp((uint8_t *)string1, (uint8_t *)string2) == 0)                     //If UART received "greenLED 1", put the green LED on
      {
         port_pin_set_output_level(LEDG, 1);
         usart_write_buffer_job(&usart_instance, (uint8_t *)string5, 5);  //and send OK
      }


Noch ne Frage?
Wie kann man im Editor vom studio 6.2 die Zeilennummern sichtbar schalten?
ge1ge
 
Posts: 11
Joined: Fri Jan 30, 2015 8:54 pm

Re: Teil 2: SRC-Download und Listing im Heft unterschiedlich

Postby ge1ge » Thu Feb 26, 2015 1:50 pm

Hallo,
um jegliches Mißverständnis auszuschliessen, habe ich hierher die ganze Main.c kopiert, die Sie in diesem Thread als Anlage beigefügt haben.
Code: Select all
#include <asf.h>

#define LEDG  PIN_PB00                                     //define the pins
#define SW1   PIN_PB06
#define SW2   PIN_PB07

volatile uint8_t string1[10] = "          ";                         // initialize five strings
volatile uint8_t string2[10] = "greenLED 1";
volatile uint8_t string3[10] = "greenLED 0";
volatile uint8_t string4[10] = "SW1 status";
volatile uint8_t string5[5]  = "OK \n";

void configure_port_pins(void);                                      //prototypes for the functions
void usart_read_callback(const struct usart_module *const usart_module);
void usart_write_callback(const struct usart_module *const usart_module);
void configure_usart(void);
void configure_usart_callbacks(void);


void configure_port_pins(void)                             //setup of the configuration of the pins
{
   struct port_config config_port_pin;                       
   port_get_config_defaults(&config_port_pin);
   
   config_port_pin.direction = PORT_PIN_DIR_OUTPUT;
   port_pin_set_config(LEDG, &config_port_pin);       //PB00 (green LED) as output
   port_group_set_config(&PORTB, 6, &config_port_pin);    //PB01 (yellow LED) and PB02 (red LED) as output
   
   config_port_pin.direction = PORT_PIN_DIR_INPUT;
   config_port_pin.input_pull = PORT_PIN_PULL_DOWN;
   port_pin_set_config(SW1, &config_port_pin);       //PB06 (SW1) as input with pull down
   
   config_port_pin.input_pull = PORT_PIN_PULL_UP;
   port_pin_set_config(SW2, &config_port_pin);       //PB07 (SW2) as input with pull-up   
}


struct usart_module usart_instance;                   //generate a variable of the usart_module struct

void usart_read_callback(const struct usart_module *const usart_module)
{       
       if (strcmp((uint8_t *)string1, (uint8_t *)string2) == 0)                     //If UART received "greenLED 1", put the green LED on
      {
         port_pin_set_output_level(LEDG, 1);
         usart_write_buffer_job(&usart_instance, (uint8_t *)string5, 5);  //and send OK
      }
      if (strcmp((uint8_t *)string1, (uint8_t *)string3) == 0)                     //If UART received "greenLED 0", put the green LED off
      {
         port_pin_set_output_level(LEDG, 0);
         usart_write_buffer_job(&usart_instance, (uint8_t *)string5, 5);  //and send OK
      }
      if (strcmp((uint8_t *)string1, (uint8_t *)string4) == 0)                     //If UART received "SW1 status", send the status of SW1
      {
         if (port_pin_get_input_level(SW1) == 1)
         {
            usart_write_job(&usart_instance, 49);          //write 1        
          }   
         else
         {
            usart_write_job(&usart_instance, 48);          //write 0
         }
      }   
}

void usart_write_callback(const struct usart_module *const usart_module)
{
port_group_toggle_output_level(&PORTB, 6);
}

void configure_usart(void)                            //setup of the configuration of USART
{
   struct usart_config config_usart;
   usart_get_config_defaults(&config_usart);
   
   config_usart.baudrate = 9600;                             //set baudrate
   config_usart.mux_setting = EDBG_CDC_SERCOM_MUX_SETTING;   //set the pins
   config_usart.pinmux_pad0 = EDBG_CDC_SERCOM_PINMUX_PAD0;
   config_usart.pinmux_pad1 = EDBG_CDC_SERCOM_PINMUX_PAD1;
   config_usart.pinmux_pad2 = EDBG_CDC_SERCOM_PINMUX_PAD2;
   config_usart.pinmux_pad3 = EDBG_CDC_SERCOM_PINMUX_PAD3;
   
   while (usart_init(&usart_instance, EDBG_CDC_MODULE, &config_usart) != STATUS_OK){} //configure the SERCOM as USART
   usart_enable(&usart_instance);       
}

void configure_usart_callbacks(void)                                     //register and enable the callback-interrupts                         
{
   usart_register_callback(&usart_instance,
   usart_write_callback, USART_CALLBACK_BUFFER_TRANSMITTED);
   usart_register_callback(&usart_instance,
   usart_read_callback, USART_CALLBACK_BUFFER_RECEIVED);
   usart_enable_callback(&usart_instance, USART_CALLBACK_BUFFER_TRANSMITTED);
   usart_enable_callback(&usart_instance, USART_CALLBACK_BUFFER_RECEIVED);
}

int main (void)
{
   system_init();
   configure_usart();                                             //initialization
   configure_usart_callbacks();                                   //configuration
   configure_port_pins();
   system_interrupt_enable_global();                              //enable global interrupts
       
   while (1) {
       usart_read_buffer_job(&usart_instance, (uint8_t *)string1, sizeof(string1));  // receive 10 characters in string1
    }          
}
ge1ge
 
Posts: 11
Joined: Fri Jan 30, 2015 8:54 pm

Re: Teil 2: SRC-Download und Listing im Heft unterschiedlich

Postby ge1ge » Thu Feb 26, 2015 3:09 pm

@ag, Sie haben recht, bei dem Download 140512-11.zip von der Elektorseite (main.c vom 22.12.14), ist der Aufruf so, wie Sie beschreiben haben:
Code: Select all
   while (1) {
   if (usart_read_buffer_wait(&usart_instance, &string1, 10) == STATUS_OK)   //if the UART received 10 bytes
   {
      if (strcmp(string1, string2) == 0)                     //If UART received "greenLED 1", put the green LED on
      {


Aber, dass er ohne Kompilerfehler gelaufen ist, kann ich nicht glauben, da
Code: Select all
void configure_port_pins(void)                             //setup of the configuration of the pins
{
   struct port_config config_port_pin;


nicht vorher mit folgendem Befehl definiert wurde:
Code: Select all
void configure_port_pins(void);
ge1ge
 
Posts: 11
Joined: Fri Jan 30, 2015 8:54 pm

Re: Teil 2: SRC-Download und Listing im Heft unterschiedlich

Postby slagromo » Thu Feb 26, 2015 3:10 pm

Hallo ge1ge,

ich habe Ihre main-Datei jetzt ausprobiert - es lässt sich bei mir problemlos kompilieren! Warnungen gibt es grundsätzlich im Studio bei solchen Programmen immer, auch bei den Atmel-Beispielen.

Mit freundlichen Grüßen,


Viacheslav Gromov
slagromo
 
Posts: 21
Joined: Tue Dec 30, 2014 10:13 am

Re: Teil 2: SRC-Download und Listing im Heft unterschiedlich

Postby slagromo » Thu Feb 26, 2015 6:52 pm

Hallo ge1ge,

nun habe ich auch die zweite Datei im oben angehängten Ordner gegen die aktualisierte gewechselt. Ich habe einfach damals vergessen, die aktualisierten Programme Elektor für den Download zu senden und gestern nicht drangedacht, das zweite Programm auch noch auszutauschen.


Zurück zum Gruppen-Befehl: In der professionellen Mikrocontrollerentwicklung werden meist solche Gruppen-Funktionen mit Masken verwendet, so kann man auch später leichter mehrere Pins auf einmal manipulieren. Bei AVRs ist es zum Beispiel nicht anders, dort ist z.B. der Befehl DDRB = 0b00010010; zu finden.


Mit freundlichen Grüßen,


Viacheslav Gromov
slagromo
 
Posts: 21
Joined: Tue Dec 30, 2014 10:13 am

Re: Teil 2: SRC-Download und Listing im Heft unterschiedlich

Postby ge1ge » Thu Feb 26, 2015 10:01 pm

@slagromo
Juhu, jetzt geht es.
Wenn ich das main.c speichere und dann kompiliere kommen 8 Warnings und 8 Messages, aber kein Error mehr.
Wenn ich dann nochmals kompiliere gibt es überhaupt keine Fehelrmeldung mehr. Komisch!?

Im Gegensatz zu deinem Bild 14 wird bei mir bei Received Data für die SW1 nicht "01" sondern in kleiner Schrift "\0" angezeigt, egal wie der Zustand von SW1 ist.
Da bei der LED_Antwort "OK \n" erscheint, vermute ich, daß der SW1-Zustand nicht übertragen wird.
Es müßte wahrschein "0 \0" oder "1 \0" kommen

@ag: Ich verstehe nur nicht, warum bei "ag" das fehlerhafte main.c von der Elektorseite gegangen ist.

Schöne Grüße
Gerhard
ge1ge
 
Posts: 11
Joined: Fri Jan 30, 2015 8:54 pm

Next

Return to ARM-COURSE

Who is online

Users browsing this forum: No registered users and 1 guest