- Akku Tests und Balkonkraftwerk Speicher         
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 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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    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?

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    Hallo fredyxx,

    Mit Integer werden die entsprechenden Rechenoperationen etwa 100x schneller.

    MfG Peter(TOO)
    Hallo Peter,

    zusammen mit dem Post von Mxt 19:27 ist mir nun nicht klar wie die Varablen M2_microsalt und Schrittdauer in so einem Befehl definiert sein sollten, damit er am schnellsten abgearbeitet wird.

    Als int, float, unsigned long oder uint32_t?

    "else if (dir == 1 && (micros() - M2_microsalt) > Schrittdauer) "

    Bitte möglichst eine konkrete Antwort.

    M2_microsalt als .....
    Schrittdauer als .....

    Die Ergebnisse von Schrittdauer liegen schon in einem Bereich von einigen 100 Mikrosekunden. Die Getriebe-Schrittmotore machen 4096 Schritte pro Umdrehung.

    vG

    fredyxx
    Geändert von fredyxx (28.08.2016 um 23:22 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo fredyxx,
    Zitat Zitat von fredyxx Beitrag anzeigen
    zusammen mit dem Post von Mxt 19:27 ist mir nun nicht klar wie die Varablen M2_microsalt und Schrittdauer in so einem Befehl definiert sein sollten, damit er am schnellsten abgearbeitet wird.

    Als int, float, unsigned long oder uint32_t?

    "else if (dir == 1 && (micros() - M2_microsalt) > Schrittdauer) "

    Bitte möglichst eine konkrete Antwort.

    M2_microsalt als .....
    Schrittdauer als .....

    Die Ergebnisse von Schrittdauer liegen schon in einem Bereich von einigen 100 Mikrosekunden. Die Getriebe-Schrittmotore machen 4096 Schritte pro Umdrehung.
    Möglichst klein

    float und double sind PF-Werte, und können, ohne FPU, nur durch eine Bibliothek bearbeitet werden.

    char, int und long hängen von der Implementierung, bzw. CPU ab. auf 8-Bitern ist int meistens 16-Bit lang und auf 16-Bitern 32-Bit.

    K&R definierte mal:
    Garantiert ist nur, dass char <= int <= long ist.
    Ein char darf also auch 48-bit belegen.

    Es gab/gibt auch CPUs mit anderen Wortbreiten z.B. 9, 12, 18, 36 und 48 Bit waren sehr verbreitet und entsprechend sind da die Bit-Breiten der C-Datentypen.

    Weil es Programme gibt, welche nur bei bestimmten Bit-Breiten funktionieren, hat man die uintxx_t Typen eingeführt. Ein unsigned 8-Bit-Wert kann nur Werte zwischen 0...255, ein 16-Bit 0...65'335 und 32-Bit 0...4'294'967'295 annehmen. Grössere Werte führen zu einem Überlauf und falschen Ergebnissen!
    uint8_t, uint16_t, uint32_t usw. haben, unabhängig von der Implementierung, garantierte Bit-Breiten.

    Welche Variante die kleinste ist, welche du nehmen kannst, hängt also davon ab, welchen Wertebereich die Variable aufnehmen können muss.
    Ich bin jetzt zu faul dies in deinem Programm nachzusehen.

    Eine 8-Bit CPU kann einen 8-Bit Werte mit einem einzigen Maschinenbefehl verarbeiten, 16-Bit Operationen benötigen oft schon mehrere Befehle. Das hängt vom Befehlssatz der CPU ab und wie man 8-Bit CPU definiert!

    Der Arduino MEGA hat einen ATmega1280 als CPU und diese kann nur 8-Bit direkt verarbeiten.


    Die reale Welt ist halt nun nicht binär und lässt sich nicht mit Ja und Nein beantworten.

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

  5. #5
    HaWe
    Gast
    millis() und micros() Funktionswerte sind in Arduino-C++ libs immer (!) als unsigned long definiert, stattdessen kann man auch uint32_t verwenden ( das ist auf dem Mega genau das gleiche, man erkennt diesen plattform-unabhängigen expliziten Datentyp nur besser beim Programmieren ). Wie mxt schon schrieb, ist float viel zu ungenau, und es führt höchstens zu Rechenfehlern und zu unnötigen Typecasting-Rechenoperationen. Aber intern wird doch bei millis() und micros() eh in 32bit Integer gerechnet, also warum abweichen? Das führt höchstens zu Rechenfehlern u/o zeitaufwändigen, unnötigen Umrechnungen.

    Im Übrigen ist Arduino Sketch nicht C, sondern es benutzt C++, und das wäre ein ganz entscheidender Unterschied , wie einmal ein Arduino Entwickler schrieb (Paul Stoffregen, IIRC) denn es hat viele Eigenheiten, die nicht 100% C++ standard- und lib-kompatibel sind. Daher sollte man sich möglichst an die Arduino-Definitionen halten, wie sie in der Referenz veröffentlicht wurden (die aber auch manchmal fehlerhaft sind, wie in Github-Diskussionen nachzulesen ist).
    Allgemeine C-Hinweise zu K+R oder gnu C oder was auch immer helfen bei Arduino Sketch also definitiv nicht weiter!
    Geändert von HaWe (29.08.2016 um 09:43 Uhr)

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Ihr wisst sehr viel,

    aber klarer wird es mir dadurch nicht.

    Daher noch mal:

    "else if (dir == 1 && (micros() - M2_microsalt) > Schrittdauer) "

    Bitte möglichst eine konkrete Antwort.

    M2_microsalt als .....
    Schrittdauer als .....

    die Schrittdauer, das habe ich vorher was falsche angegeben, hat eine Größenordnung von 400 us bis 20ms

    vG

    fredyxx

  7. #7
    HaWe
    Gast
    ich schrieb doch ( mehrfach ):
    millis() und micros() Funktionswerte sind in Arduino-C++ libs immer (!) als unsigned long definiert, stattdessen kann man auch uint32_t verwenden

    also mach alles, was solche Werte zwischenspeichert und damit rechnet, ebenfalls zu unsigned long , stattdessen kann man auch hier uint32_t verwenden.

Ähnliche Themen

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

Berechtigungen

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

Solar Speicher und Akkus Tests