Instruction Cache disable auf ARM Cortex-M7 (Teensy 4.0)

OP #6133022
Ich möchte auf dem Teensy 4.0 Board ein Programm laufen lassen mit dem 
man den Einfluss des Instruction-Cache sehen kann. Dazu habe ich mein 
Programm in FLASHMEM gepackt un den Cache disabled. Die Cache diable 
Routine habe ich von core_cm7.h (CMSIS). Jetzt sollte man meinen dass 
die Schleife langsamer läuft als mit Cache. Seltsamerweise hängt das 
empfindlich vom Rest des Programmes ab. Schltet man die angegebene Zeile 
ein oder aus geht auch das caching an oder aus. Was mache ich falsch? 
Wie schaltet man den Cache richtig aus?
1
#define led 13
2

3
void SCB_DisableICache (void){
4
    asm("dsb");
5
    asm("isb");
6
    SCB_CCR &= ~(uint32_t)SCB_CCR_IC  ;  /* disable I-Cache */
7
    SCB_CACHE_ICIALLU = 0UL;             /* invalidate I-Cache */
8
    asm("dsb");
9
    asm("isb");
10
}
11

12
double xx ;
13

14
FLASHMEM void setup() {
15
  pinMode(led, OUTPUT);
16
  Serial.begin(115200);  
17
  while(!Serial){} ;
18
  Serial.print("Hello ARTICLEteensy40disableIcacheDemo1forumPost...\n"); 
19
  Serial.printf("setup=%08XH\n",setup) ;
20
  SCB_DisableICache();   
21
  
22
  // if the following line is deleted a loop cycle needs 130ns, 
23
  // if this line is enabled a loop needs 6.6ns
24
  Serial.printf("SCB_CCR & SCB_CCR_IC)=%08XH\n", SCB_CCR & SCB_CCR_IC ) ; 
25
  
26
  Serial.printf("wait 5 secs...") ; delay(5000) ;
27
  while(1){
28
    xx=0.0 ; 
29
    for(int k=0 ; k<20 ; k++){
30
      CORE_PIN13_PORTSET = CORE_PIN13_BITMASK; // here-1
31
      xx=xx+ 1.0 ;
32
      CORE_PIN13_PORTCLEAR = CORE_PIN13_BITMASK; // here-2
33
      }
34
    Serial.printf("x=%15.10f\n",xx) ;
35
    delay(50) ;
36
    }
37
  }
38
        
39
void loop(){
40
  }
Lies mal das RM: Der Prozessor hat auch z.B. im FlexSPI einen (kleinen) 
Cache.

Könnte für die Schleife oben knapp reichen - und dann kommt es u.U. auf 
Alignments an, ob da nochmal was gelesen werden muss oder nicht.

Abschalten kann man nur den Cache im Cortex-M7 Core.

Ansonsten stellt sich mir spontan die Frage, in welchem Flash oder RAM 
der Code läuft. Das ist bei dem nicht mehr egal. FLASHMEM  impliziert 
FLASH, was o.g. Cache hat.
Gast
> Versuch mal, den Code im RAM laufenzulassen.

> Flash ist vergleichsweise langsam (und hat deswegen wie schon gesagt
> eigene Cache- bzw. Prefetch-Logik).
> Ich weiß nicht, wie es beim Teensy ist, aber z.B. beim LPC43xx mit 204
> MHz braucht das RAM keine Waitstates, Flash dagegen 9.

Ja, aber:
Bei ARMen die beim Flash nur 1-3 Waitstates brauchen und intensiven
Gebrauch vom RAM beim Zugriff auf Daten machen, kann es passieren
das der Code vom Flash trotzdem schneller laeuft!
Da steht sich dann der RAM quasi selber im Weg weil die Zugriffe
serialisiert werden muessen.

Manche DSP haben DARAM (Dual-Access-RAM) und koennen zwei oder mehr
Zugriffe innerhalb eines Zyklus. Bei 300 MHz Clock resultieren da
dann knackige Zugriffszeiten von 1.5 ns...
Auweia schrieb:
> Bei ARMen die beim Flash nur 1-3 Waitstates brauchen und intensiven
> Gebrauch vom RAM beim Zugriff auf Daten machen, kann es passieren
> das der Code vom Flash trotzdem schneller laeuft!

Der i.MX im Teensy 4.0 hat mehr als einen internen RAM Block - aber nur 
externen Flash, der dementsprechend lange Zugriffszeit hat. Daher läuft 
Code aus dem internen RAM deutlich schneller solange der Cache nicht im 
Spiel ist.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.