Hi,
ich habe gerade ein bisschen Schwierigkeiten die Rechengeschwindigkeit
eines SAM4S mit CortexM4 bei 120Mhz einzuschätzen. Dabei habe ich
folgenden Code:
1 | static void delay_ticks(uint32_t ul_dly_ticks)
|
2 | {
|
3 | volatile uint32_t ul_delay_tick = 7000000;
|
4 | while (ul_delay_tick--);
|
5 | }
|
Der so umgesetzt wird:
1 | static void delay_ticks(uint32_t ul_dly_ticks)
|
2 | {
|
3 | 400a60: b082 sub sp, #8
|
4 | volatile uint32_t ul_delay_tick = 7000000;
|
5 | 400a62: f64c 73c0 movw r3, #53184 ; 0xcfc0
|
6 | 400a66: f2c0 036a movt r3, #106 ; 0x6a
|
7 | 400a6a: 9301 str r3, [sp, #4]
|
8 | while (ul_delay_tick--);
|
9 | 400a6c: 9b01 ldr r3, [sp, #4]
|
10 | 400a6e: f103 32ff add.w r2, r3, #4294967295
|
11 | 400a72: 9201 str r2, [sp, #4]
|
12 | 400a74: 2b00 cmp r3, #0
|
13 | 400a76: d1f9 bne.n 400a6c <delay_ticks+0xc>
|
14 |
|
15 | }
|
16 | 400a78: b002 add sp, #8
|
17 | 400a7a: 4770 bx lr
|
Erzeugen tut das ganze ein rund 1ne Sekunde langen Delay. Was mich
wundert ist, dass die Schleife nur 7.000.000 mal durchlaufen wird.
Daher stellt sich mir die Frage was den Prozessor aufhält?
Wird in jedem Takt eine Instruktion beendet (bei 3-stufiger Pipeline)?