Messung der Taktzykluszahl auf Kortex m7

8

Ich habe die Taktzykluszahl auf dem Cortex m4 gemessen und möchte das nun auf dem Cortex m7 tun. Die Platine, die ich verwende, ist STM32F746ZG.

Für die m4 hat alles funktioniert mit:

%Vor%

Das Problem ist, dass das DWT_CTRL-Register nicht geändert wird, wenn ich auf dem m7 laufe und 0x40000000 bleibe, anstatt auf 0x40000001 zu wechseln, so dass die Zykluszahl immer Null ist. Von dem, was ich in anderen Posts gelesen habe, scheint es, als ob Sie das FP_LAR-Register auf 0xC5ACCE55 setzen müssen, um DWT_CTRL zu ändern.

Ich habe diese Definitionen hinzugefügt (habe beide FP_LAR_PTR Adressen unten versucht):

%Vor%

und diese Funktion:

%Vor%

Wenn ich den unkommentierten Ausdruck anrufe, bekomme ich 0xC5ACCE55, aber wenn ich es nach der Rückkehr der Funktion drucke, bekomme ich 0x00000000 und ich habe keine Ahnung warum. Bin ich auf dem richtigen Weg oder ist das völlig falsch?

Edit: Ich denke es wäre auch gut zu erwähnen, dass ich ohne den extra Code in der Funktion versucht habe und nur versucht habe, das LAR-Register zu ändern.

BR Gustav

    
G. Johnsson 13.07.2016, 15:24
quelle

2 Antworten

2

Wenn ich mir die Dokumente nochmal anschaue, bin ich jetzt unglaublich verdächtig auf einen Tippfehler oder Kopierfehler in der ARM TRM. 0xe0000fb0 wird als Adresse von ITM_LAR, DWT_LAR und FP_LSR (und äquivalent für * _LSR) angegeben. Da alle anderen ITM-Register auf Seite 0xe0000000 sind, sieht es sehr ähnlich aus, als ob derjenige, der für diesen Teil der Cortex-M7-Dokumentation verantwortlich war, die Cortex-M4-Registerdefinitionen und die neue LAR und LSR hinzugefügt hat auf die ITM-Seite und kopierte sie dann auf die DWT- und FPB-Seiten, wobei die Namen aktualisiert und die Adressen aktualisiert wurden.

Ich wette bei meinem Abendessen, dass Sie unwissentlich ITM_LAR (oder die echte FP_LAR) entsperren, und DWT_LAR ist tatsächlich bei 0xe000 1 fb0.

EDIT von dwelch

Jemand schuldet jemandem ein Abendessen.

%Vor%

Ausgabe

%Vor%

Die Tabelle in der TRM ist lustig und wie die andere Dokumentation zeigt, fügen Sie die 0xFB0 und 0xFB4 zur Basis, der Rest der DWT für die Cortex-M7 ist 0xE0001xxx und in der Tat scheint es, dass die LAR und LSR gegessen werden 0xE0001FB0 und 0xE0001FB4.

    
Notlikethat 13.07.2016, 19:59
quelle
1

Ich rate davon ab, eigene Registerdefinitionen zu erstellen, wenn diese als Teil des CMSIS definiert sind. Dazu müssen sowohl die Dokumentation als auch Ihre Interpretation korrekt sein. In diesem Fall scheint die Dokumentation tatsächlich falsch zu sein, aber die CMSIS-Header sind korrekt. Es ist viel einfacher, die CMSIS-Header automatisch zu validieren, als zu überprüfen, ob die Dokumentation korrekt ist. Daher würde ich dem CMSIS jedes Mal vertrauen.

Ich bin mir nicht sicher, auf welches Register FP_LAR sich beziehen könnte, aber Ihre Adresszuweisung bezieht sich auf ITM_LAR , aber es scheint wahrscheinlicher, dass Sie DWT_LAR gemeint haben, was Cortex-M4 fehlt.

Trotz meiner Empfehlung, darauf zu vertrauen, lässt CMSIS 4.00 keine Masken für DWT_LSR / SWT_LAR zu, aber ich glaube, dass sie mit den entsprechenden ITM-Masken identisch sind.

Beachten Sie auch, dass das LAR ein schreibgeschütztes Register ist - jeder Versuch, es zu lesen, ist bedeutungslos.

Ihr Code mit CMSIS wäre:

%Vor%     
Clifford 14.07.2016 08:26
quelle

Tags und Links