Cortex-M3: Cycles bei HW-Division

OP #5271962
Lesenswert?
• ▲
▼
Der Cortex M3 hat ja einen Hardware Divisor. Jedoch stellte ich gerade 
fest das die benötigten Taktzyklen im Instruction-Set mit 2 bis 12 
Cycles für UDIV und SDIV angegeben sind.

Wie kann ich am besten, für eine Zeitkritische Anwendung, sicherstellen 
das eine Division eine fest definierten Cycletime nutzt? Mir kommt es 
nicht auf Geschwindigkeit an, sondern auf gleichmäßige Nutzung. Also 
kann er sich auch ruhig die vollen 12 Cycles genehmigen, Hauptsache ich 
kann damit rechnen. Gibt es da einen funktionierenden Workaround für 
solch einen Fall?
Gast #5272010
Lesenswert?
• ▲
▼
Rene K. schrieb:
> Wie kann ich am besten, für eine Zeitkritische Anwendung, sicherstellen
> das eine Division eine fest definierten Cycletime nutzt?

Wie lange so ein Cycle dauert wird doch auch vom aktuellen Zustand des 
Caches abhängen, ist also nicht vorhersehbar.

STM-Starter schrieb:
> Dann weisst du wieviele Cycles es gedauert hat.
> Hab ich mal bei PIC18 gemacht, um die ISR-Laufzeit zu ermitteln.

Der PIC18 wird keinen Cache haben, ein ARM schon.

MfG Klaus
Gast #5272013
Lesenswert?
• ▲
▼
Normalerweise finde ich es doof die Anforderung in Frage zu stellen, 
aber dir ist bewusst dass Controller vom Schlag Cortex m3 noch andere 
Quellen für variierende Ausführungszeiten haben? Cache, waitstates, 
konkurrierende Bus Zugriffe etc.

Wie genau muss es werden?
Muss das durch zyklenzählen passieren?
#5272019
Lesenswert?
• ▲
▼
Rene K. schrieb:
> Wie kann ich am besten, für eine Zeitkritische Anwendung, sicherstellen
> das eine Division eine fest definierten Cycletime nutzt?

Leider gar nicht. Vom Worst case ausgehen, sicherstellen, daß die 
Division wirklich in Hardware ausgeführt wird und nicht über eine 
Library-Funktion und wenn es Dir um Jitter geht: Die Pins in der ISR vor 
der Division setzen.
#5272022
Lesenswert?
• ▲
▼
Klaus schrieb:
> Rene K. schrieb:
>> Wie kann ich am besten, für eine Zeitkritische Anwendung, sicherstellen
>> das eine Division eine fest definierten Cycletime nutzt?
>
> Wie lange so ein Cycle dauert wird doch auch vom aktuellen Zustand des
> Caches abhängen, ist also nicht vorhersehbar.
>
> STM-Starter schrieb:
>> Dann weisst du wieviele Cycles es gedauert hat.
>> Hab ich mal bei PIC18 gemacht, um die ISR-Laufzeit zu ermitteln.
>
> Der PIC18 wird keinen Cache haben, ein ARM schon.
>
> MfG Klaus

Der cortex m3 hat keinen cache.
Wenn es eine garantierte Zeit sein muss, kann man ja die maximale 
Zyklenanzahl annehmen, die Zeit messen (am ehesten mit dem cyccnt, dann 
braucht man keinen eigenen timer) und dann busy wait bis die Zeit um is. 
Wofür brauchst du das?
#5272023
Lesenswert?
• ▲
▼
A. K. schrieb:
>> Wie lange so ein Cycle dauert wird doch auch vom aktuellen Zustand des
>> Caches abhängen, ist also nicht vorhersehbar.
>
> Viele Mikrocontroller mit Cortex M3 verwenden keinen Cache.

Genauer: Der Cortex M3 Core enthält keinen Cache. Wenn ein Cache 
vorhanden ist, dann als Teil des Flash-Systems. Davon wären ISRs im RAM 
nicht betroffen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.