
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Stefan. > ...dass es schwieriger ist, die Zyklen von einem Kompilat als von einem per Hand geschriebenen Assembler Code zu berechen. Falsch. Um herauszufinden, wieviel Zeit ein bestimmter Befehl benötigt, reicht es aus, diesen innerhalb einer Schleife mehrfach auszuführen, die dabei benötigte Zeit von dem Zeitbedarf der reinen Scheife (also ohne Befehl) zu subtrahieren und das Ergebnis durch die Anzahl Schleifendurchgänge zu teilen. Das klappt normalerweise immer, egal ob Kompilat oder interpretierte Programmausführung. Nur bei automatischen Optimierungen oder dazwischenfunkenden Interrupts, die sich nicht abschalten lassen, könnte es Probleme geben. Das folgende Programm ist geeignet, um den Port abzufragen und die Zeit eines High-Pulses zu messen. (Hinweis: Hier wird ein Ausgang abgefragt, damit dieser in jedem Fall auf low liegt und die Schleifen nicht unterbrochen werden.) Es wird eine Referenzzeit gemessen. Im späteren Programm kann durch (a*256+b)/65536*Referenzzeit die verstrichene Zeit errechnet werden. Dabei macht man einen kleinen Fehler, da der letzte Schleifendurchlauf immer etwas weniger Zeit benötig, aber das kann man entweder vernachlässigen oder nur eine Schleife mit Word-Variable benutzen. DEFINE a BYTE DEFINE b BYTE DEFINE t1 WORD DEFINE t2 WORD DEFINE ausgang PORT[16] ausgang=0 WAIT ausgang=0 t1=TIMER FOR a=0 TO 255 FOR b=0 TO 255 IF ausgang THEN exit NEXT b NEXT a #exit t2=TIMER PRINT t2-t1; > Dadurch wird die Sache doch total kompliziert, oder täusche ich mich da? Genau, Du täuscht Dich. Ich habe nur deshalb auf das ROM-Listing verwiesen, weil Du behauptet hast, es wäre unmöglich, den Zeitbedarf von Betriebssystemroutinen auf den Takt genau anzugeben. Für die Programmerstellung mittels CCBAS2MC benötigt man das nicht. Aber wer Spaß an sowas hat kann Teile des Betriebssystems mit einem Simulator wie ZAP durchsimulieren. Der zählt die verstrichenen Taktzyklen mit. Dietmar Meine Homepage: http://ccintern.dharlos.de |
| Antwort schreiben |