[THOMSON] ARDDRIVE

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Carl, Papy.G, fneck

hlide
Messages : 828
Enregistré le : 29 nov. 2017 10:23

Re: [THOMSON] ARDDRIVE

Message par hlide » 16 avr. 2019 13:56

Voici ce que ça me donne en assembleur AVR :
Arddrive-1.png
Arddrive-1.png (144.19 Kio) Vu 59 fois
Je vois que ce n'est pas optimal :
1) autant le ".loop: sbic PINB, PINB0; rjmp .loop" me paraît bien, autant le ".loop: in __tmp_reg__,SPSR; sbrs __tmp_reg__,SPIF; rjmp .loop" me paraît abusif puisque l'on devrait pouvoir le faire avec ".loop: sbis SPSR, SPIF; rjmp .loop" (ou alors SPSR à une valeur trop grande à encoder dans SBIS).
2) AVR a les instructions SBI et CBI mais elles ne sont pas utilisées ici : "in r25,SPSR; andi r25,lo8(~(1<<SPIF)); out SPSR,r25" au lieu de "cbi SPSR,SPIF" tout simplement.
3) rajouté l'instruction CLI pour ne pas être perturbé par les interruptions comme les timers.

En imaginant qu'il n'y ait pas de watchdog, on peut tout simplement boucler à l'infini dans *loop* pour un peu moins d'instructions :
Arddrive-2.png
Arddrive-2.png (203.1 Kio) Vu 59 fois
Et là je rajoute les macros SBIS, SBIC,SBI et CBI pour optimiser les points 1) et 2) :
Arddrive-3.png
Arddrive-3.png (201.34 Kio) Vu 52 fois
Peut-on faire mieux, je me demande...
Modifié en dernier par hlide le 16 avr. 2019 14:41, modifié 3 fois.

hlide
Messages : 828
Enregistré le : 29 nov. 2017 10:23

Re: [THOMSON] ARDDRIVE

Message par hlide » 16 avr. 2019 14:36

Bon malheureusement, les macros ne fonctionneront pas et il y a une explication sur le pourquoi le SPSR n'en profite pas : sa valeur en tant que registre est supérieure à 31 et ne peut donc pas entrer dans les instructions CBI et SBIS. CQFD.

Au final gcc se débrouille pas trop mal.

Répondre