diff --git a/2.2/Project.uvoptx b/2.2/Project.uvoptx
index 6487f39..3636512 100644
--- a/2.2/Project.uvoptx
+++ b/2.2/Project.uvoptx
@@ -157,34 +157,18 @@
0
0
- 7
- 1
- 0
+ 0
+ 0
+ 134218136
0
0
0
0
0
- 0
- .\Src\calcul_dft.s
+ 1
+
-
-
-
- 1
- 0
- 19
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- .\Src\calcul_dft.s
-
-
+ 0x08000198
diff --git a/2.2/Src/calcul_dft.s b/2.2/Src/calcul_dft.s
index 8450bd3..a5913bd 100644
--- a/2.2/Src/calcul_dft.s
+++ b/2.2/Src/calcul_dft.s
@@ -37,7 +37,7 @@ deb_somme ldrh r4, [r0, r3, LSL #1] ; r4 = x[i], LSL #1 pour faire
bne deb_somme
mov r0, r7
- pop {r4, r5, r6, r7}¿¿
+ pop {r4, r5, r6, r7}
bx lr
endp
diff --git a/challenge/Project.uvoptx b/challenge/Project.uvoptx
index 6487f39..0a908da 100644
--- a/challenge/Project.uvoptx
+++ b/challenge/Project.uvoptx
@@ -157,34 +157,34 @@
0
0
- 7
- 1
- 0
+ 0
+ 0
+ 134218136
0
0
0
0
0
- 0
- .\Src\calcul_dft.s
+ 1
+
-
+ 0x08000198
1
0
- 19
+ 10
1
- 0
+ 134218152
0
0
0
0
0
- 0
- .\Src\calcul_dft.s
+ 1
+ .\Src\principal.c
-
+ \\CHTI\Src/principal.c\10
@@ -198,7 +198,7 @@
1
0
- 0x08000210
+ 0x0801FF95
0
@@ -208,7 +208,7 @@
0
1
- 0
+ 1
0
0
0
diff --git a/challenge/Src/calcul_dft.s b/challenge/Src/calcul_dft.s
index a5913bd..4769829 100644
--- a/challenge/Src/calcul_dft.s
+++ b/challenge/Src/calcul_dft.s
@@ -2,42 +2,49 @@
AREA moncode, code, readonly
export dft
N equ 64
-
+
+ ; vitesse actuelle : 1726
dft proc
- push {lr, r4, r5, r0} ; empilage de l'adresse de retour
- ldr r2, =TabCos ; on met l'addr de TabCos
- bl cal_comp ; on calcule Re(k) | format : 5.28
- smull r4, r5, r0, r0 ; (r4,r5) = Re(k)² | format : 10.54
-
- pop {r0}
- ldr r2, =TabSin ; on met l'addr de TabSin
- bl cal_comp ; on calcule -Im(k) | format : 5.28
- smlal r4, r5, r0, r0 ; (r4,r5) = Re(k)² + Im(k)² | format : 10.54
-
- mov r0, r5 ; On prend les 32 bits de poids fort pour convertir au format 10.22/3.29 ?
-
- pop {pc, r4, r5} ; dépilage de l'adresse de retour
- endp
-
-
-cal_comp proc ; r0 = x (signal), r1 = k, r2 = sin ou cos
- push {r4, r5, r6, r7}
- mov r3, #0 ; r3 = i
+ ; r0 = x (signal), r1 = k
+ push {lr, r4, r5, r6, r7, r8, r9, r10}
+ ldr r2, =TabCos
+ ldr r3, =TabSin
+
+ mov r4, #0 ; r4 = i
mov r5, #0 ; r5 = ik
- mov r7, #0 ; r7 = 0
+ mov r9, #0 ; r9 = résultat réel
+ mov r10, #0 ; r10 = résultat imaginaire
-deb_somme ldrh r4, [r0, r3, LSL #1] ; r4 = x[i], LSL #1 pour faire ×2 car chaque valeur est sur 2 octets | format 4.12
- ldrsh r6, [r2, r5, LSL #1] ; r6 = cos ou sin [ik%N] | format 1.15
- mla r7, r4, r6, r7 ; r7 += x[i] * cos|sin[ik%n] | format 5.27
+deb_somme ldrh r6, [r0, r4, LSL #1] ; r6 = x[i], LSL #1 pour faire ×2 car chaque valeur est sur 2 octets | format 4.12
+ ldrsh r7, [r2, r5, LSL #1] ; r7 = cos [ik%N] | format 1.15
+ ldrsh r8, [r3, r5, LSL #1] ; r8 = sin [ik%N] | format 1.15
+ mla r9, r6, r7, r9 ; r9 += x[i] * cos[ik%n] | format 5.27
+ mla r10, r6, r8, r10 ; r10 += x[i] * sin[ik%n] | format 5.27
add r5, r1 ; r5 = (i-1)k + k
and r5, #N-1 ; r5 = r5 % 64
- add r3, #1 ; on incrémente i
- cmp r3, #N ;
+ add r4, #1 ; on incrémente i
+ cmp r4, #N ;
bne deb_somme
+
+ ; etat des registres : r0 = x, r1 = k, r9 = Re, r10 = Im, autres libres
+
+ smull r2, r0, r9, r9 ; (r2,r0) = Re(k)² | format : 10.54
- mov r0, r7
- pop {r4, r5, r6, r7}
+ smlal r2, r0, r10, r10 ; (r2,r0) = Re(k)² + Im(k)² | format : 10.54
+
+
+ pop {pc, r4, r5, r6, r7, r8, r9, r10}
+ endp
+
+
+
+
+
+
+
+
+cal_comp proc ; r0 = x (signal), r1 = k, r2 = sin ou cos
bx lr
endp
diff --git a/challenge/Src/principal.c b/challenge/Src/principal.c
index 1a3fa7a..f1de5de 100644
--- a/challenge/Src/principal.c
+++ b/challenge/Src/principal.c
@@ -4,6 +4,8 @@ extern short* TabSig[N];
int resultats[N];
int main(void) {
- resultats[5] = dft(TabSig, 5);
+ for(int i = 1; i < N; ++i){
+ resultats[i] = dft(TabSig, i);
+ }
while(1){}
}