- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 14

Thema: eine struct als Parameter an Funktion übergeben...?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast

    eine struct als Parameter an Funktion übergeben...?

    hallo,
    ich habe eine struct

    Code:
    typedef struct  {
       int foo;
       char bas;
    } list;
    
    list mList00;
    
    //  display Funktion
    void  displayMenulist(list mList) {
        Serial.println(mList.foo);
        Serial.println(mList.bas);
    }
    
    //
    und möchte nun mList00 zunächst "by value" an diese display Funktion übergeben

    Code:
    mList00.foo=100;
    mList00.bas=3;
    
    displayMenulist(mList00);  // editiert
    geht aber nicht, ich kriege immer den error
    exit status 1
    variable or field 'displayMenulist' declared void
    wie macht man es richtig?
    Geändert von HaWe (02.12.2018 um 15:41 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    911
    "displayMenulist(list mList00);"

    Muss man da beim Arduino beim Aufruf der Funktion den Typnamen noch mal vor den Argumentewert setzen?
    Warum?

  3. #3
    HaWe
    Gast
    das war ein typo beim nachträglichen editieren,
    nein, beim Aufruf nicht mehr.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    911
    https://www.reddit.com/r/arduino/com...declared_void/

    Kann es sein, dass Deine "list"-Deklaration nicht weit genug oben im Sketch steht und die Prototypen vom Compiler davor eingefügt werden?

  5. #5
    HaWe
    Gast
    hmm... kann ich nicht erkennen, siehst du mehr als ich?

    Hier ist der Testcode:

    Code:
    /*
     *  
     *********** This code is for the ESP8266 ***********
     * 
     ****** ESP_ssd1306_128x64_I2C demo display *********
     *
     *      using ESP_SSD1306 Adafruit library  
     * for a ssd1306 OLED Display  with the ESP8266 board
     *
     *********** This code is for the ESP8266 *********** 
     * 
    */
    
    
    // I2C
    #include <Wire.h>         // Incl I2C comm, but needed for not getting compile error
    #define ESPSDA D2         // defaults
    #define ESPSCL D1         // 
    
    // TFT
    #include <ESP_SSD1306.h>    // Modification of Adafruit_SSD1306 for ESP8266 compatibility
    #include <Adafruit_GFX.h>   // Needs a little change in original Adafruit library (See README.txt file)
    #include <Fonts/FreeSans12pt7b.h>            // 
    #include <Fonts/FreeSansBold12pt7b.h>        // 
    #include <Fonts/FreeSans9pt7b.h>             //
    #include <Fonts/FreeMono12pt7b.h>            //   
    #include <Fonts/FreeMono9pt7b.h>    
    // Pin definitions
    #define OLED_RESET 10  // GPIO10=D12 Pin RESET signal (virtual)
    
    ESP_SSD1306 display(OLED_RESET); // FOR I2C
    
    /*
    #include <ButtonClass.h>
    tButton btnup;
    tButton btnle;
    tButton btnri;
    */
    
    
    
    //----------------------------------------------------------------------------
    // OLED dashboard
    //----------------------------------------------------------------------------
    
    
    byte MAXMODE=12;
    
    void dashboard(byte mode) {  
      if(mode>MAXMODE ) { mode=0; }
    
      display.clearDisplay();
      display.setFont();
    
      
      display.display();
      display.setFont();
    }
    
    //----------------------------------------------------------------------------
    // menu list
    //----------------------------------------------------------------------------
    
    
    char LINELEN = 8;
    char LINENUM = 4;
    
    typedef struct  {
       char line[8][20] = {"line0_67 9012345678" ,"line1_6"      ,"line2_67" ,
                           "line3_6789012345678" ,"line4_6789012345678" ,"line5_6789012345678" ,
                           "line6_6789012345678" ,"line7_6789012345678" };
       char act=0, top=0, btm=top+LINENUM;
       char subl[12]="           ";
    } list;
    
    list mList00;
    
    
    void strcpysubl(char * dest, char * source, char pos) {
       byte l;
       memset(dest,' ',sizeof(dest));
       dest[12]=0;
       strncpy( dest+1, source+pos, LINELEN );   
       if(strlen(source)>(8+pos) )  dest[9] = '~' ; 
       else for( l=strlen(dest); l<=9; l++) dest[l]=' ';    
       dest[10] = '>';
       dest[11] = 0;
    }
    
    
    void  displayMenulist(list mList) {
      int8_t start;
      byte l;
      
      if(mList.act>LINENUM) start=mList.act;
      else start=0;
      
      for(byte i=0+start; i<5+start; i++) { 
        strcpysubl( mList.subl, mList.line[i], 0); 
          
          if(i==mList.act) { 
            //display.setTextColor(BLACK, WHITE);
            mList.subl[0]='>';
          }
          //else display.setTextColor(WHITE);
          l=10 + i*13;
          display.setCursor( 0, l);  display.print(mList.subl);
          Serial.println(mList.subl);
          display.display();
      } 
    
    }  
                     
      
                         
    
    void setup(void)
    {
    	// Start Serial
    
    	Serial.begin(115200);
            delay(2000); // wait for Serial()
      
    	// Start Wire (SDA, SCL)
    	Wire.begin(ESPSDA,ESPSCL);  // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    
      // SSD1306 Init  
      display.begin(SSD1306_SWITCHCAPVCC);  // Switch OLED
      display.setRotation(2);  
      display.clearDisplay();  // Clear the buffer.
    
      // text display tests
      display.setTextSize(1);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("Hello, world!");  
      display.display();
    
      delay(1000);
      display.clearDisplay(); 
      display.display();
    
      for(byte i=0; i<8; i++) { Serial.println(mList00.line[i]); }
      
      Serial.print("act="); Serial.println((byte)mList00.act);
    
      display.setFont(&FreeMono9pt7b); // h=13.10pt
      displayMenulist(mList00);
         
      delay(2000);
      
    }
    
    
    void loop() {
         
    }
    Geändert von HaWe (02.12.2018 um 16:36 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.674
    Blog-Einträge
    1
    Vom Prinzip scheints richtig zu sein.

    Für das ABER, habe ich das hier gefunden. Dort gibt es dasselbe Problem mit "variable or field '......' declared void"und auch eine Lösung dafür: https://forum.arduino.cc/index.php?topic=381325.0

    MfG

Ähnliche Themen

  1. Array an Funktion übergeben
    Von jok3r im Forum Arduino -Plattform
    Antworten: 7
    Letzter Beitrag: 02.04.2014, 22:19
  2. Array an Funktion übergeben
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 02.05.2013, 21:23
  3. PORTx per Parameter an Funktion übergeben
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 06.01.2012, 07:31
  4. Register an Funktion übergeben
    Von EDatabaseError im Forum C - Programmierung (GCC u.a.)
    Antworten: 15
    Letzter Beitrag: 02.11.2008, 14:10
  5. Referenzen, Parameter für TWI-Funktion
    Von Minifriese im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 11.01.2008, 20:54

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress