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

Thema: Neu in der C-Programmierung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    shedepe
    Gast
    Hey, als erstes. Wenn du fragen zu Code hast poste den Code !
    Dann zu deiner Frage, verwendest du den Debugger oder den Simulator?

    Beim Debugger gibt es einmal die Variante des Einzelschritt der innerhalb der derzeitigen Methode bleibt und einmal die Variante die in eine aufgerufene Methode reinspringt. Die Tastenkombinationen dafür sollten oben im Debugmenü stehen.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.10.2006
    Beiträge
    132
    Hier der Code:

    #include <avr/io.h> // Deklarationen einfügen
    #define Takt 1000000UL // Systemtakt 1MHz intern

    void Warte1ms() ;


    /************************************************** **********
    * Anfang der Hauptfunktion *
    ************************************************** **********/

    int main(void)
    {

    DDRB = 0xFF ; // Port B ist Ausgang
    PORTB = 0 ; // Anfangswert Null

    /*********************************************
    * 5 Takte Low / 5 Takte High gibt Takt / 10 *
    *********************************************/

    while (1) // unendliche Schleife

    {

    Warte1ms() ; // Wartefunktion ca 1ms
    PORTB ++ ; // Portzähler + 1

    }

    }

    void Warte1ms(void)
    {

    for (unsigned int i = Takt/4000ul; i > 0; i--) ;


    }

    Im Einzelschrittmodus wird immer die Stelle "void Warte1ms(void) übersprungen. Der gelbe Balken kommt nie in "for (unsigned int i = Takt/4000ul; i > 0; i--) an.

  3. #3
    shedepe
    Gast
    Wie gesagt, es gibt dabei 2 verschiedene Arten von Einzelschrittmodi. Schau dir das Debugmenü in Atmelstudio an.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Möglicherweise optimiert der Kompiler die Zeile

    for (unsigned int i = Takt/4000ul; i > 0; i--) ;

    einfach weg, weil seiner Meinung nach nichts passiert. Versuch mal:

    for (unsigned volatile nt i = Takt/4000ul; i > 0; i--) ;

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.10.2006
    Beiträge
    132
    Jetzt wird in die Funktion gesprungen, aber ich sehe nicht, dass die Variable i in irgendeiner Weise heruntergezählt wird. Der gelbe Balken verlässt die Funktion wieder nach nur einem Schritt. Beim nächsten Mal steht dann in i wieder der Startwert.<br>Ich würde schon gerne sehen, dass die Variable i heruntergezählt wird bevor die For-Scleife wieder verlassen wird.

  6. #6
    neuer Gast
    Gast
    Gibt es überhaupt einen Inhalt zu void warte 1ms?

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Schreib mal so:
    for (unsigned int i = Takt/4000ul; i > 0; i--)
    {
    asm("nop");
    }

    Dann wird es funktionieren. Ausserdem solltest du das Takt/4000ul vorher machen, sonst wird es bei jedem Durchlauf neu berechnet. Das sind dann etliche Takte mehr.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Zitat Zitat von Hubert.G Beitrag anzeigen
    Schreib mal so:
    Ausserdem solltest du das Takt/4000ul vorher machen, sonst wird es bei jedem Durchlauf neu berechnet. Das sind dann etliche Takte mehr.
    Ein Kompiler versucht alle konstanten Ausdrücke im Vorlauf zu berechnen. D.h. da wird im kompilierten Code nichts berechenet, sondern i wird mit 250 vorgeladen.

Ähnliche Themen

  1. Programmierung
    Von Kene im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 8
    Letzter Beitrag: 02.10.2010, 19:30
  2. programmierung
    Von jonasspieker im Forum Robby RP6
    Antworten: 7
    Letzter Beitrag: 22.06.2010, 13:39
  3. Led Programmierung
    Von cbr600 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 13.10.2007, 14:18
  4. LCD Programmierung?
    Von AndreasHB im Forum Robby CCRP5
    Antworten: 1
    Letzter Beitrag: 01.01.2005, 21:23
  5. [ERLEDIGT] Pic-Programmierung
    Von kickerstar im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 13.09.2004, 14:13

Berechtigungen

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

Solar Speicher und Akkus Tests