- Labornetzteil AliExpress         
Ergebnis 1 bis 3 von 3

Thema: Mischung von Assembler und C

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Hallo White_Fox, ersteinmal Danke für die Rückmeldung, ich hab das grade mal probiert.

    const LED_COUNT = 4; // hier meckert der Compiler mit einem Warning, das wäre ja nicht so schlimm
    const int LED_COUNT = 4; // so ist der Warning weg. Aber es ist jetzt quasi eine initialisierte Variable.

    TLed LedArray[LED_COUNT]; // damit ist dieses Konstrukt nicht mehr gültig. "variable length array not supported"

    Eine Konstante muss ja irgendwie im Speicher abgelegt werden.
    Das kann der Compiler vermutlich selbst enscheiden ob er das im RAM oder im Codebereich macht ??
    Wenn ich const benutze habe ich anscheinend immer eine "Instanz" im RAM und benötige Speicherplatz,
    deshalb meckert der Compiler auch wenn ich die Typangabe weglasse, da er nicht weis wieviel Speicher er benötigt,
    somit reserviert er einen "int".

    Wie dem auch sei, ein Array benötigt einen "festen" Wert für die Größenangabe.
    Dieser feste Wert kann anscheinend nur eine Zahl bzw. ein #define sein ? (meine Vermutung)

    Ein #define kennt dann aber der Assembler nicht mehr, wie Du schon schriebst, ist das für den Preprozessor.

    Ich weis nicht ob man das irgendwie "übergreifend" declarieren kann.

    - - - Aktualisiert - - -
    --------------------------------------------

    Guten Morgen, es hat mir keine Ruhe gelassen

    Ich habe das Problem jetzt so gelöst:
    Es gibt eine Variable in der die Grösse des Led Arrays gespeichert wird.
    Diese wird vom Compiler selbst eingetragen

    Code:
    typedef struct 
    {
      U8 green;
      U8 red;  
      U8 blue; 
    } TLed;    
    
    #define LED_COUNT 4         // Anzahl der anzusteuernden RGB Leds 
    
    TLed LedArray[LED_COUNT];   // gesamtes Datenarray der Ledkette 
    
    // hier NEU: damit ich mit dem Assembler auf die Anazahl Bytes im LedArray zugreifen kann.
    unsigned char ArraySize = sizeof(LedArray);  // die Groesse des Arrays in Bytes
    Auf diese Weise kann ich nun mit

    asm("movf _ArraySize,W");

    auf die Anzahl der Bytes des LedArrays zugreifen.
    Nun brauche ich nur noch an einer Stelle, nämlich den Wert LED_COUNT ändern und die Assemblerfunktion macht es dann auch gleich richtig.
    Geändert von Siro (18.09.2020 um 08:17 Uhr) Grund: nun geht das

Ähnliche Themen

  1. RP6 und Assembler
    Von ThomasD im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 1
    Letzter Beitrag: 18.04.2010, 20:29
  2. assembler
    Von m1cha im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 29.01.2008, 12:27
  3. if in Assembler???
    Von XDavidX im Forum PIC Controller
    Antworten: 7
    Letzter Beitrag: 29.01.2006, 10:56
  4. Assembler und I2C ?
    Von ProgDom im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 20.07.2005, 13:46
  5. Assembler ADW ???
    Von ProgDom im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 11.07.2005, 19:59

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress