- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 30

Thema: Programm ablauf langsam

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    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

  2. #2
    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.

  3. #3
    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

  4. #4
    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.

  5. #5
    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

  6. #6
    HaWe
    Gast
    ja, liest du denn nicht was ich schreibe?
    Natürlich musst du es in uint32_t ändern,
    dann sollst du es testen,
    und ob es dann schneller geht, wirst du sehen!
    Wenn nicht, liegt es an was anderem, aber alle Zeit-Variablen (milles, micros) sind bei Arduino IMMER Integer-Werte!

    Und dann formatiere bitte endlich deinen Code in Code-Tags um, man kann bei dem Durcheinander ja wirklich kaum was erkennen!

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Zitat Zitat von HaWe Beitrag anzeigen
    ja, liest du denn nicht was ich schreibe?
    Lies bitte meinen Post von 19:08 Uhr. Da steht die Ursache.

    vG

    fredyxx

    - - - Aktualisiert - - -

    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    Hallo fredyxx,

    1970? Was für einen Computer hast du da programmiert?

    MfG Peter(TOO)
    Wie der hieß, weiß ich nicht mehr, aber er füllte noch ganze Säle und die besseren nur noch große Schränke.

    Danach kam sehr sporadisch verschiedenes andere.

    Kannst du auf diese Frage nicht mit einem einfachen JA oder Nein antworten?

    "Wenn ich das richtig verstehe, sollte ich also M2_microsalt und Schrittdauer als unsigned long definieren?? Geht das dann schneller?"

    vG

    fredyxx

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo fredyxx,
    Zitat Zitat von fredyxx Beitrag anzeigen
    Wie der hieß, weiß ich nicht mehr, aber er füllte noch ganze Säle und die besseren nur noch große Schränke.
    Ab 1972 habe ich auf einem Wang 2200 gespielt.
    Ab 1976 musste ich dann beruflich µP-Systeme entwickeln und programmieren.
    Zitat Zitat von fredyxx Beitrag anzeigen
    "Wenn ich das richtig verstehe, sollte ich also M2_microsalt und Schrittdauer als unsigned long definieren?? Geht das dann schneller?"
    Mit Integer werden die entsprechenden Rechenoperationen etwa 100x schneller.
    Also ein paar µs anstatt ein paar 100µs.
    Wie viel das auf dein ganzes Programm ausmacht, weiss ich so auch nicht.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo fredyxx,
    Zitat Zitat von fredyxx Beitrag anzeigen
    Das musste ich auch schon von ca. 46 Jahren erfahren.
    1970? Was für einen Computer hast du da programmiert?

    Grundsätzlich hat aber der Programmierspiel etwas mit Erfahrung zu tun und nur ganz wenig mit der verwendeten Sprache.
    Insofern spielt es keine Rolle, dass dies dein erstes Projekt auf einem Arduino ist

    Zitat Zitat von fredyxx Beitrag anzeigen
    Wenn ich das richtig verstehe, sollte ich also M2_microsalt und Schrittdauer als unsigned long definieren?? Geht das dann schneller?
    Früher konnten 8-Bit CPUs gerade mal zwei 8-Bit Werte addieren oder subtrahieren, grössere Werte musste man in einem Unterprogramm mit den 8-Bit Befehlen zusammensetzen.
    Multiplikation und Division waren nur mit einem Unterprogramm möglich.
    Später wurde dann auch die Multiplikation (8x8 Bit mit 16-Bit Resultat) und Division (16/8 Bit) als Befehl umgesetzt.
    Heute können viele 8-Biter auch mit 16-Bit direkt rechnen.
    Entsprechendes gilt für 16-Biter, nus das sie grundsätzlich mit 16-Bit am Stück rechnen könne und meistens auch teilweise mit 32-Bit

    Floating Point (FP) ist da etwas komplizierter. Das einfache Format besteht aus 32-Bit welches aus Mantisse, Exponent und Vorzeichen zusammengesetzt ist. Das andere Standardformat hat 64-Bit und ein gebräuchliches internes Zwischenformat hat 80-Bit.
    Bei den Grundrechenarten müssen Mantisse, Exponent und Vorzeichen getrennt verarbeitet und die Mantisse meist noch entsprechend geschoben (normalisiert) werden. Zuerst muss man die Teile aber auspacken.
    Ergibt also eine Menge an Unterprogrammen.

    Manche CPUs haben deshalb eine FPU, welche die FP-Operationen berechnet und meist auch noch ein paar Integer-Operationen beherrscht.
    Der 8087, das war die zusätzlich FPU beim 8086, benötiget mehr Transistoren als der 8086, obwohl die ganze Speicher-Zugrifflogik vom 8086 ausgeführt wurde. Der 8086 bestand aus etwa 29'000 Transistoren, der 8087 aus etwa 40'000. Bei Intel ist die FPU erst seit dem 80386 mit auf dem CPU-Chip.
    µC haben meistens keine FPU, da verwendet man die Transistoren lieber für die Peripherie.

    FPU-Operationen benötigen meist ein paar Takte mehr als die entsprechenden Integer-Operationen.

    Muss man die FPU per Software emulieren, ist man mindestens etwa 100x langsamer als die FPU.

    Wenn man keine FPU hat, sollte man FP möglichst meiden, zudem kann man sich damit auch die ganze FP-Bibliothek sparen. OK, ist heute nicht mehr so wichtig, aber als man nur 4 oder 8 KByte ROM hatte, machten 1-2 KByte für die FP-Unterstützung einen grossen Unterschied.
    Neben der eigentlichen FP-Bibliothek sind dann auch printf() und scanf() entsprechend grösser.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Ä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
  •  

Solar Speicher und Akkus Tests