Patrick schrieb:
> Hallo,
>
> ich bin neu in der Mikrocontroller-Programmierung, deshalb habe ich
> einige grundlegenden Fragen.
> Ich soll in Assembler ein Programm
> schreiben, welches die Suchzeit eines bestimmten Wertes in einem einem
> Array bestimmt.
Ich interessiere mich dafür, in welcher Situation Du konkret bist.
Studierst Du Informatik? Lernst Du einen Beruf? Willst Du das
programmieren als Hobby betreiben?
Das Wörtchen "soll" deutet auf eine Ausbildung hin.
> Zur Verfügung steht mir ein Mikrocontroller mit einem internen Takt von
> 50 MHz. Der Interrupt Timer, mit welchem ich arbeite löst eine
> Unterbrechung alle 30ms aus. Soweit die technischen Daten - aber wie
> kann ich das Ganze realisieren? Bisher bin ich soweit gekommen:
> 1. Interrupt Timer initialisieren - ist klar
> 2. Ich habe den Timer vor und nach einem nop ausgelesen und erhalte eine
> Differenz von 117184
> Was fange ich mit dieser Differenz von 117184 an? Oder anders gefragt:
> was sagt diese Zahl aus? Sind es ms? Oder doch Kartoffeln ;-)?
Was war denn Deine Absicht, als Du die Differenz des Timerstandes bei
Ausführung eines NOPs gebildet hast?
Eine bestimmte Timerdifferenz sagt allein noch nichts aus, solange man
nicht weiß, wie schnell der Timer getaktet wird, auch wenn man weiß,
welche Befehle zwischen dem loslaufen des Timers und dem erneuten
auslesen ausgeführt wurden.
Ausserdem: Der "interne Takt" eines uC muss nicht zwingend auch der
Timertakt sein, oder der mit dem Befehle ausgeführt werden (mal davon
abgesehen, das Befehle meist mehrere Takte benötigen um ausgeführt zu
werden). So etwas musst Du für Dich klarstellen, damit Du mit den
Ergebnissen etwas anfangen kannst.
Und damit wir Deine Gedankengänge beurteilen können, müssten wir auch
wissen, was für eine CPU Du genau verwendest.
Es ist auch nicht ungewöhnlich, dass man den Zusammenhang zwischen
Taktquelle und "internem Takt" irrtümlich falsch beurteilt. Damit wir
das beurteilen können, müsstest Du auch Angaben zu der Takterzeugung
machen.
Die Aufgabenstellung bedeutet meiner Ansicht nach, dass Du die Differenz
zwischen dem Timerzählerstand unmittelbar vor Beginn des Suchvorgangs
und Stand unmittelbar nach dem auffinden des gesuchten Elements
benötigst; aber nicht die Zeit, die zum ausführen eines NOPs benötigt
wird.
Dazu kommt, dass bei längeren Zeiten, der Timer überlaufen wird; das ist
der Grund warum man in Timerinterrupts eine zusätzliche Variable
hochzählt - man erweitert den Zählbereich des Timers.