Frage zur Variabel Deklarion (Assambler in C)



  • Kann es sein, das die variabel k global deklarien muss??? wenn ich sie in der funktion schreibe kommt fehler...
    wenn ich sie global setzt funzt.. könnte es daran liege das der microkotnroller den speicher von vornerein schon resevieren muss??

    main(....){
    
      func();
    
    }
    
    void func(){
    
      int k=0;
    
    }
    

    der micorcontroller : ARM7TDMI von Analog Devices
    das compiler: Keil uVision 3



  • Eine lokale Variable wird normalerweise erst bei betreten der Funktion auf dem Stack erstellt und bei Verlassen wieder davon entfernt. Außerdem ist sie von außen nicht "sichtbar" (es könnten ja auch mehrere Instanzen dieser Variable vorhanden sein, bei mehrfachaufruf durch rekursion/multithreading...).
    Das ist aber nicht anders als innerhalb von C auch: du kannst nicht auf lokale variablen einer anderen Funktion zugreifen.



  • Problem war so:

    folgendere Code geht nich:

    void main(){
    
     funkt();
    }
    
    void funkt(){
    
     int k=0;
     k++;
    
    }
    

    gleiche code nur mit globaler int definiton geht:

    int k=0;
    void main(){
    
     funkt();
    }
    
    void funkt(){
    
     k++;
    
    }
    

    Jemand ne erklärung?



  • 1. was hat der Code mit assembler zu tun?
    2. Wie lautet den die Compilerfehlermeldung?
    3. Du solltest evtl. mal die funktion funkt vor main deklarieren.



  • das ist ein c compiler für microkontroller...

    Keil uVision 3

    kein PC

    dachte da machen variabeln deklaration nen unterschied.. kenn mich net so aus.. aber wenn du die funktio nvor main prototype'st dann gehts es ??



  • hab nochmal geschaut.. also es müssen variabeln int global defiert sein sonst kennt der compiler die variablen in den funktionen nicht:

    int a,b,c; // <- Müssen Global sein kann das jemand erklären warum???
    
    void funkA();
    void funkB();
    void funkC();
    
    void main(){
    
     funkA();
     funkB();
     funkC();
    
    }:
    
    void funkA(){
      a=5;
    }
    void funkB(){
      b=10;
    }
    void funkC(){
      c=15;
    }
    


  • Das ist richtig.
    Siehe oben, was bluecode schon mal erwähnt hatte...



  • ne ihr habt das falsche verstanden, ich will ja nur in der funktion auf k zugreifen!!!!

    wenn ich schreibe:

    void funk(){
    
     int k=0;
    
      k++;
    }
    

    mekkert der compiler -> varibale k nicht deklariert oder gefunden !!

    schreib ich "int k" global in der datei:

    int k;  //<- global
    
    void Funkt(){
    
      k=0;
      k++;
    
    }
    main(){.....}
    

    dann klappts



  • BorisDieKlinge schrieb:

    schreib ich "int k" global in der datei:

    int k;  //<- global
    
    void Funkt(){
    
      k=0;
      k++;
    
    }
    main(){.....}
    

    dann klappts

    int k;  // Dann spendier diesem Code, der so funktioniert, eine eigene Übersetzungseinheit: funkt.c
            // int k; ist dann nur noch für/in Funkt() sichtbar!
    void Funkt(){
    
      k=0;
      k++;
    
    }
    

    💡



  • alles klar, aber kann das überhaupt sein das man alle variblen global anlegen muss?



  • > alles klar, aber kann das überhaupt sein das man alle variblen global anlegen
    > muss?

    nein, normal kann das irgendwie nicht sein...
    Liegt es vielleicht an Compiler-Einstellungen (was ich mir schwer vorstellen kann, denn das würde der ganzen Philosophie bezüglich der Funktionen widersprechen).
    Gibt es da irgendwelche Parameter, die an den Compiler übergeben werden?



  • Dieser Thread wurde von Moderator/in Nobuo T aus dem Forum Assembler in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten