Hallo zusammen! Ich beschäftige mich gerade mit der Programmierung eines XC167CI. Um den Programmablauf besser planen zu können würde ich jetzt gerne wissen, wie viel Zeit meine Interrupts für ihre Ausführung benötigen. Ich kann mir auch den Assembler-Code in meinem Debugger ansehen, weiß allerdings nicht, wie lange der Mikrocontroller für die einzelnen Befehle benötigt. Leider habe ich auch im Netz bisher keine Antwort auf diese Frage gefunden. Wenn also jemand weiß wo ich eine Liste der Assembler-Befehle und deren Laufzeiten finden kann, würde ich mich sehr freuen. MfG Ben
Bei einem Takt von 0Hz hat jeder Befehl die Länge von Unendlich.
Danke für die Lehrstunde "Mathematik für Anfänger"! Der XC167CI läuft mit 20MHz. Aber das sollte eigentlich egal sein für die Beantwortung der Frage, da ich mich mehr für die Anzahl der Taktzyklen interessiere. Ben
Sorry, aber deine Frage beantwortet das Datenblatt. Das sind zwar 2x1000 Seiten, aber die solltest du schon vorliegen haben(in Papierform!), wenn du dich mit solch hochgezüchteten MCUs abgibst.
Die Hanbücher zu dem µC habe ich vorliegen (441 und 442 Seiten). Vielleicht stelle ich mich etwas zu dumm an, aber das einzige was ich darin finde ist eine "Instruction Set Summary" ohne Angabe der Taktzyklen, die für die Abarbeitung nötig sind. Ich kann und möchte niemanden dazu zwingen sich mit meinen Problemen ausseinander zu setzten. Allerdings war es eine ernstgemeinte Frage, bei der ich hänge. Kommt ja wohl auch mal bei den Profis vor, zu denen ich sicher nicht gehöre. Ich freue mich über jede Antwort, die dazu gedacht ist mir weiter zu helfen.
Wenn mich nicht alles täuscht, dann müsste der Controller eine Instruction-Pipeline besitzen, somit ist eine genaue Angabe der Ausführungszeit nicht zu machen, da diese dann von diversen Umständen abhängig ist.
Hallo Carsten, danke erstmal für den Hinweis. Ja so eine Instruction-Pipeline besitzt der XC167 wohl. Gibt es denn eventuell eine Möglichkeit den worst-case Abzuschätzen? Es muß doch eine möglichkeit geben, im Vorfeld entscheiden zu können, ob sich Interrupts eventuell behindern können. Ben
Hier mal ein worst-case-Scenario: Du hast einen Befehl, der auf den Speicher zugreift. Ein Interrupt wird angefordert, der Befehl muss aber noch beendet werden. Greift aber z.B. ein DMA-Controller (hat der XC sowas?) auf den Speicher zu, so kann es einige Taktzyklen dauern, bis der Befehl fertig ausgeführt wird. -> Keine pauschale Abschätzung möglich Du kannst wirklich nur sagen in welchem Bereich diese Zeit ist, kann aber relativ groß sein.
Also ich bin mir ziemlich sicher, dass bei der Anforderung der bisher genutzten Interrupts kein anderer Befehl auf den Speicher zugreift. Somit sollte das Problem mit einem verzögerten Beginn der Interruptroutinen nicht auftauchen (hoffentlich). In meinem Programm laufen drei zu einander verschobene Timer. Durch diese Timer werden reihum alle 30µs ein Overflow-Interrupt ausgelöst. Das klappt auch soweit ganz gut. Nun möchte ich aber einen weiteren regelmäßig auftretenden Interrupt haben und weiss nicht, an welche Stelle (zeitlich) ich ihn am besten setze bzw. ob da überhaupt noch platz für ihn ist.
Hallo Lambertz, ich hab während meines E-Technik Studiums mal ne Arbeit geschrieben in der ich die Performance des XC167CI mit nem anderen 16-Bit µC vergleichen musste. Aufgrund der Instruction-Pipeline ist ne reine Berechnung nicht möglich gewesen. Deshalb hab ich mir nen Logik-Analyser genommen und die Signallaufzeiten anhand eines Toggelnden Ports aufgenommen. Wenn nen hochauflösenden Analyser hast, kannst damit ziemlich genau die Laufzeiten dokumentieren. Bei mir hats sehr gut geklappt. Hoffe das hilft Dir weiter. Gruß Horni
>Nun möchte ich aber einen weiteren
regelmäßig auftretenden Interrupt haben und weiss nicht, an welche
Stelle (zeitlich) ich ihn am besten setze bzw. ob da überhaupt noch
platz für ihn ist.
Die meisten Befehle dauern einen Maschinentakt(nicht Quarztakt, wegen
interner PLL).
Sieh' dir mal im Datenblatt die Interruptstruktur der XC-Serie an.
Etwas genialeres gibt es nicht(16Prioritäten, 4Gruppen). Deine drei
Timer mit 30µsec sind für den Controller eine 'Müde' Angelegenheit.
Die Vogängerversion, mit dem C166V1-Core wurde zur Motorregelung in
einigen 12-Zyl.Formel1-Motoren eingesetzt.
Auf Grund des Pipelineffektes sind vorausschauende Ausführungszeiten
nicht möglich. Auch sind Softwaremäßige Zeitschleifen ungenau. Sowas
macht man denn mit den Hardware-Timern.
Marillion
Geh mal bei Infineon auf die HomePage, suchen nach "instruction set manual" => PDF Downloaden und anschauen kapitel 7 Instruction state times dort steht alles drin Zusammengefasst : Sprünge,Aufrufen von Fkt,Rücksprünge, Move Registerindirekt auf Speicher,TRAPS => 4Takte Multiplikationen => 10 Takte Divisonen => 20 Takte alles andere => 2 Takte Gruss
@Horny welche MC hast Du verglichen? Gibt es Deine Arbeit (oder Teile davon) online zu lesen? Ich interessiere mich speziel für Vergleiche von Infineon 16-Bit, M16C, M32C und hcs12 MC. Danke für eine Antwort.
Danke für Eure Hilfe! Damit ist mir doch schon sehr geholfen. Ben
@schalter Tut mir leid für die verspätete Antwort. Ich hab den XC167CI mit einem MC9S12 von Motorola verglichen. Online gibts davon nix. Aber wenn Dich das interessiert, kann ich Dir gern die Arbeit zukommen lassen. Allerdings lediglich für private Zwecke.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.