-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Fragen zu Programmtimings; Dauer von Codezeilen berechnen

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161

    Fragen zu Programmtimings; Dauer von Codezeilen berechnen

    Anzeige

    Hallo zusammen,

    eine Frage:

    Wo kann ich Informationen finden über das berechnen der Dauer von Bascom- codezeilen?

    Konkret:

    Ich möchte wissen wie lange in meinem Code und bei einer bestimmten Quarzfrequenz die einzelnen Abläufe dauern.

    Ich habe ein perfekt funktionierendes Programm mit dem Ich Impulse eines Flügelrades zähle. Da ich nur die Anzahl brauche erfolgt keine Auswertung der Zeit zwischen den einzelnen Flanken wie bei einer Geschwindigkeismessung.

    Danach werden einige Berechnungen angestellt und das ganze über RS232 ausgegeben.

    Jetzt seht eine größere Implementierung an. Ich muss zusätzlich von einem Fremdgerät die RS232 Daten abfragen und in meinen Bytearray einbauen. Nun habe ich Bedenken, das das Zeitfenster zwischen den einzelnen Impulsen nicht mehr ausreicht um das alles abzuarbeiten. Ich darf KEINEN Impuls verlieren.

    Gibts irgendwo eine Übersicht wo ich "If - Then Schleifen, Print "irgendwas" eine Inkey()-Abfrage usw. nach der benötigten Dauer berechnen kann?

    Danke und Gruß
    Markus

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    wüsste ich nicht, aber du kannst einige der funktionen ja aus den librarys berechnen, die timings für die asm-befehle stehen ja im datenblatt des jeweiligen prozessors...

    EDIT: if-then iss keine schleife, sondern nen block, also if-then-block ^^

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    17.10.2004
    Ort
    Berlin
    Beiträge
    21
    Ich habe bei einem ähnlichen Problem zu Beginn der betreffenden Routine einen Ausgang gesetzt und am Ende wieder zurück. Mit dem Scope dann die Laufzeit ausmessen.
    Wer aus den Assembler Befehlen die Laufzeit ermitteln kann, kann auch gleich in Assembler programmieren!

    Reinhard

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    17.10.2004
    Ort
    Berlin
    Beiträge
    21
    Ich habe bei einem ähnlichen Problem zu Beginn der betreffenden Routine einen Ausgang gesetzt und am Ende wieder zurück. Mit dem Scope dann die Laufzeit ausmessen.
    Wer aus den Assembler Befehlen die Laufzeit ermitteln kann, kann auch gleich in Assembler programmieren!

    Reinhard

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    1. es braucht auch nochmal zeit nen ausgang zu setzen (1 zyklus jeweils)
    2. ehm... du musst dich dafür nicht mit den befehlen auskennen, das iss sturen nachschlagen, und du wirst wohl auch keine lexika auswendig können oder? er muss einfach nur gucken, z.b. wie viele sbi's sind da drin, dann schauter nach wie lang ein sbi braucht (1 zyklus) und dann multiplitziert er das mit der zahl, die er bei der zählung der sbi's rausbekommen hat... das iss alles, und das iss sicher
    3. kannst du den doppelpost noch grad löschen bidde? thx ^^

    außerdem hört sich die zusatzimplementierung ziemlich leicht an, man kann viiiiiiiiel schlimmeres mit Bascom machen, ohne dasses den ganzen prozessortakt benötigt... das iss recht einfach, was du da bisher hast ^^

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    @Reinhard,

    auf die Idee bin ich noch gar nicht gekommen. Mal sehen ich werde das versuchen.


    Aber ist es nicht möglich die Zeit zu bestimmen die Bascom für gewisse Routinen braucht?

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    siehe oben bei mir... das funktioniert sicher ^^

    aber bau erstmal dein programm, ich bin mir recht sicher, dass du damit nicht annähernd die kapazitäten des avr's ausschöpfst ^^

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    Hi X-Ryder,

    richtig es ist nich schwer, nur habe ich bedenken das ich bei dem Hochzählen des Flügelrades Impulse "verliere". Est so: Der Impuls löst einen Int aus. Im Int wird eine Variable hochgezählt.

    Meine Nutzdaten werden im Rythmus (nicht permanent) übertragen. Den Rythmus gibt mir der Timer vor. Alle 0,25 Sek. löst der Timer aus und es wird in Sub "Datensenden" gesprungen.

    Dazwischen muss ich die RS232 vom Fremdgerät auslesen. Hier muss erst die Baud Rate umgestellt werden und 40 Ascii Zeichen eingelesen werden. In einen Array verpacken und nur bestimmte Zeichen aus dem Array wiederum in mein Datenarry packen und ab die Post.

    Ansich leicht aber das Timing? Wie gesagt ich muss sicher sein das ich keinen Impuls verliere.

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Manche Sachen lassen sich schlecht vorhersagen, selbst wenn man den COde kennt. Wenn bei der RS232-Routine zB gwewartet wird, bis der Sender frei ist und das nächste Zeichen gesendet werden kann, ist diese Zeit nicht genau vorhersehbar. Und auch bei den If-Abfragen ist die Ausführungsdauer unterschiedlich, je nach Ergebnis...

    In welcher Größenordnung liegt denn die maximale Impulsrate? Wie zählst du? externer Interrupt? Besser wäre, die Impulse direkt an einen Timer/Couter zu hängen, dann ist der Zählvorgang vollkommen unabhängig vom Rest des Programms...

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    Hi uwegw,

    also max. impulsrate ca. 10.000 I/min, über den Impuls wird der Int0 (externer) ausgelöst - Spung ins Sub"Int0" hier werden genau drei Variablen jeweils hochgezählt.

    Frage zur Unabhängikeit: Wer hat eigentlich die Prio der externe Int0 oder der Timerinerrupt?
    Was ich meine: Wenn im Int0 zufälligerweise der Timer auslöst, unterbircht der Timer oder nicht? Andersrum genauso unterbricht der Int0 den Timer?

    Gruß
    Markus

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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