Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: CCBASIC-Programm in Maschinensprache umwandeln Kategorie: Verschiedenes (von Dietmar, Homepage - 19.01.2005 21:53)
 Als Antwort auf Re: CCBASIC-Programm in Maschinensprache umwandeln von Stefan Tappertzhofen - 19.01.2005 19:40

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

Bisherige Antworten:

Re: CCBASIC-Programm in Maschinensprache umwandeln (von Stefan Tappertzhofen - 20.01.2005 9:45)
    Re: CCBASIC-Programm in Maschinensprache umwandeln (von Michael - 25.01.2005 9:45)