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

Thema: Programm ablauf langsam

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Ok, jetzt kann man es beurteilen und es sieht so grottig aus, wie erwartet.

    Ich habe nach erstem Drübersehen einen Verdacht:

    Dieses "float microsalt" sieht verdächtig aus. Der Rückgabewert von micros() ist nicht float, sondern unsigned long. Bei allen diesen Berechnungen treten auf jeden Fall Fehler auf, da float nicht so viele gültige Stellen hat.

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Zitat Zitat von Mxt Beitrag anzeigen
    Ok, jetzt kann man es beurteilen und es sieht so grottig aus, wie erwartet.

    Ich habe nach erstem Drübersehen einen Verdacht:

    Dieses "float microsalt" sieht verdächtig aus. Der Rückgabewert von micros() ist nicht float, sondern unsigned long. Bei allen diesen Berechnungen treten auf jeden Fall Fehler auf, da float nicht so viele gültige Stellen hat.

    Ist grottig ein Kompliment? Kann mich aber nicht erschüttern, da dies mein erstes Projekt mit dem Arduino ist.

    Das mit dem "unsigned long" kann ich ja ändern, ist aber vermutlich nicht die Ursache, weil genau diese UP's auch von dem Programmteil verwendet werden, mit dem die Motore schnell laufen, den ich aber durch das Abspecken weg gelassen habe.

    vG

    fredyxx

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Den Motoren ists auch völlig egal, wie der Code aussieht. Die laufen auch mit hässlichem. In deinem Falle nur halt langsam.

    Nur wenn sich das jemand ansehen soll, ist das Aussehen nicht egal. Schon die Verwendung von Quote-Tags statt Code-Tags zeigt, dass das Aussehen egal ist.

  4. #4
    HaWe
    Gast
    ich glaube, mxt will dir damit den versteckten Tipp geben, dass du doch bitte deinen Code in Code-Tags posten möchtest...

    ändere doch mal bitte dein float in uint32_t und teste es, und dann korrigiere und formatiere deinen Code anschließend um, und dann berichte, ob es mit uint32_t schneller läuft oder nicht

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Ich sehe beim drüberschauen zumindest keine irgendwie blockierenden Konstrukte. Besonders effizient ist das goto Herumgehüpfe auf dem kleinen 8-Bit Prozessor sicher nicht. Kann er vielleicht nicht schneller ?

    Ansonsten hätte ich die Zeilen
    Code:
    Schrittdauer = int(...
    oder
    Code:
    if (dir == 0 && (micros() - ...
    im Verdacht.

    Float-Operationen auf 8-Bittern sind schnarchlangsam.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Zitat Zitat von HaWe Beitrag anzeigen
    und formatiere deinen Code anschließend um
    was heißt das?

    - - - Aktualisiert - - -

    Hallo,
    >>>>>>>>>>>>>> eine große ENTSCHULDIGUNG, dass ich euch belässtigt habe <<<<<<<<<<<<<<<<<<<<<

    Die Ursache ist total primitiv!

    Ich habe in den Aufrufen von Mx_drive dauernd statt der Geschwindigkeit die Anzahl der Umdrehungen verändert und die Geschwindigkeit stand eben auf klein.

    M1_drive(22, 24, 26, 28, M1_n, M1_v, M1_dir)

    Ich denke, ich brauche mal eine Pause!!!!!

    Trotzdem noch die Fragen:
    was bedeutet uint32_t und
    was ist damit gemeint: "Quote-Tags statt Code-Tags" ?

    vG

    fredyxx

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Siehst du, Computer machen immer genau das, was man sagt. Das ist das Problem beim Programmieren.

    Zu uint32_t:

    Typen wie int, long usw. sind auf unterschiedlichen Prozessoren unterschiedlich groß, haben also unterschiedlich viele Bits, z.B. int bei einem 8 Bit-Arduino 16 Bits, bei einem 32-Bit Arduino 32 Bit.

    Darum gibt es in C und C++ Datentypen, die garantierte Größen haben.
    http://en.cppreference.com/w/cpp/types/integer
    Damit sind Programme besser auf andere Rechner übertragbar.

    Tags:
    Du zitierst deine Code
    richtig wäre aber
    Code:
    auf "Erweitert" klicken und das # Symbol nehmen
    Dann bleiben auch die Einrückungen stehen.

    - - - Aktualisiert - - -

    Ach ja, weiterhin macht eine Zeile wie
    Code:
    else if (dir == 1 && (micros() - M2_microsalt) > Schrittdauer) {
    nicht das, was du glaubst.

    Erstmal wird micros() - M2_microsalt berechnet. micros() liefert unsigned long, das wird in float umgewandelt und dann M2_microsalt abgezogen.

    Dann muss Schrittdauer von unsigned int nach float umgewandelt werden, damit es verglichen werden kann.

    Die ganze Zeile dauert wahrscheinlich etliche Mikrosekunden, weil der 8-Bit Prozessor die 32 Bit Werte nur in Häppchen verarbeiten kann.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Zitat Zitat von Mxt Beitrag anzeigen
    Siehst du, Computer machen immer genau das, was man sagt. Das ist das Problem beim Programmieren.
    Das musste ich auch schon von ca. 46 Jahren erfahren.


    Zitat Zitat von Mxt Beitrag anzeigen
    Ach ja, weiterhin macht eine Zeile wie
    Code:
    else if (dir == 1 && (micros() - M2_microsalt) > Schrittdauer) {
    nicht das, was du glaubst.

    Erstmal wird micros() - M2_microsalt berechnet. micros() liefert unsigned long, das wird in float umgewandelt und dann M2_microsalt abgezogen.

    Dann muss Schrittdauer von unsigned int nach float umgewandelt werden, damit es verglichen werden kann.

    Die ganze Zeile dauert wahrscheinlich etliche Mikrosekunden, weil der 8-Bit Prozessor die 32 Bit Werte nur in Häppchen verarbeiten kann.
    Danke für den Tipp.
    Wenn ich das richtig verstehe, sollte ich also M2_microsalt und Schrittdauer als unsigned long definieren?? Geht das dann schneller?

    vG

    fredyxx

Ähnliche Themen

  1. UART, zeitlicher Ablauf Subprogramme
    Von mollyman im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.06.2013, 17:10
  2. Programm-Ablauf wird nicht eingehalten.
    Von RobbyMartin im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 11.06.2011, 15:39
  3. Programm zu langsam?
    Von Hübi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 05.03.2009, 17:03
  4. Ablauf von Programmen generell
    Von The Man im Forum Assembler-Programmierung
    Antworten: 2
    Letzter Beitrag: 18.08.2007, 14:21
  5. Ablauf der IRSs mit SIGNAL
    Von weijr im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 03.12.2006, 21:47

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress