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){} }