Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Commentez, partagez et proposez des Tutos en langage ASM !
MPASM
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#21 Message par JJE » mar. 11 juin 2019 06:56

Bonjour à tous,
venom a écrit :Source du message J'imagine que F6FCO parler de toi JJE

Je m'en doutais bien, mais,
F6FCO a écrit :Source du message Ça y est, trop d'assembleur il a fini par bugger

où ai-je buggé ? :?
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

MPASM
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#22 Message par JJE » mar. 11 juin 2019 07:29

Bonjour Tempx-x,
Temps-x a écrit :Source du message BANKSEL

Merci de ta suggestion, je connais, bien sûr, la "pseudo-instruction BANKSEL" mais ce n'est pas vraiment une directive, c'est plutôt une macro prédéfinie que je préférerais mettre dans un "sous-sujet" Macros.
J' ai d'ailleurs proposé ici une macro CHGBNKX, un peu plus restrictive mais plus économique. Il faut dire que ce sujet n'a pas attiré les foules :sad:

Temps-x a écrit :Source du message Il y a pas photo, c'est quand même plus simple avec un Pic18Fxxxx


Je suis sûr que personne n'en doute, mais de là à s'y restreindre, :sifflotte:
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

MPASM
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#23 Message par JJE » mar. 11 juin 2019 16:16

Boucle while
J'espérais, à la création de ce sujet, pouvoir compléter un post écrit quelques jours au paravent. La bouton qui m'y autorise pendant quelque temps n'apparaît plus, d'où l'ouverture d'un nouveau "sous-sujet". Quelqu'un sait-il comment faire disparaître le précédent sans ennuyer les gentils organisateurs ?

Syntaxe

while expr
.../...
endw

Interprétation par l'assembleur
Les lignes écrites entre le while et le wend sont répétées par l'assembleur tant que l'expression est évaluée à une valeur différente de 0.

Limitations d'utilisation
Le nombre de lignes est limité à 100 et ne peut être répété plus de 256 fois.
Des boucles while peuvent être imbriquées. Le nombre d'imbrication est limité à 8
Une boucle while ne peut être utilisée à l'intérieur d'un CBLOCK :shock: . On se demande pourquoi et c'est dommage.

Exemples d'utilisation

Exemple 1 Sécurisation d'une table
Le code suivant, sans intérêt ici, mais d'usage courant, montre l'usage d'accès à une table
► Afficher le texte

Comme on peut s'en convaincre avec MPLAB SIM , tout se passe bien, tant que la constante attribuée à W est strictement inférieure à 3, ce qui ne se saura qu'à l'exécution. Cependant, le code va gonfler si vous voulez donner un quelconque intérêt à ce programme. Avec un peu de malchance, la partie avant la table va finir par atteindre 0xfd octets. Simulons cette situation grâce à un ORG convenable.
► Afficher le texte

En pistant pas à pas le déroulement du programme, on va constater que le retour du sous-programme ne se déroule pas comme prévu.
Un coup d'œil dans le désassemblé explique la situation très bien documentée chez BigOnOff. Si on ajoute 2 à PCL (qui vaut 0xfe), on obtient 0 (méfaits de l'arithmétique finie).
Pour se protéger de ces problèmes, il suffit de s'assurer que la table tient dans un bloc de 256 octets de page mémoire (d'une adresse 0xxx00 à une adresse 0xxx00+0x0100). Bien sûr il est facile de le faire "à la main". Mais à chaque fois qu'on ajoutera des lignes de code, il sera prudent de vérifier que les tables qui suivent n'en souffrent pas. Autant demander à MPASM de s'occuper de ces basses besognes.
Le code suivant propose une solution :
► Afficher le texte

Il consiste à ajouter autant de nop que nécessaire pour amener l'étiquette table à une adresse multiple de 256. Remarquez que par malchance, le risque de gâcher beaucoup d'espace mémoire programme n'est pas négligeable, surtout avec une grande table, surtout que rien ne vous en avertit sauf d'aller voir le code généré, ce qui n'est pas pratique courante je pense.
Autant s'en prémunir :
► Afficher  le texte

La fenêtre de compte rendu d'assemblage dit :
► Afficher le texte

Malheureusement, je n'ai pas trouvé de moyen pour afficher le nombre de nop générés qui est pourtant connu. Ce n'est pourtant opportun, sauf pour les puristes, que s'il est important
Ceci ne règle bien sûr pas le problème de PCLATH qui ne rentre pas dans le cadre de ce post.
Exemple 2 cadrage de données
Il n'est pas rare qu'il soit commode qu'une variable soit à une position stratégique dans l'espace mémoire, par exemple à une frontière de puissance de 2. les lignes suivantes forcent la variable V1 à être à une adresse multiple de 8
► Afficher  le texte

Ceci permettra par exemple pour jongler entre V2 et V3 de se contenter d'agir sur le bit 2 de FSR.
Remarquer que MPASM n'autorise pas à écrire ces lignes dans le CBLOCK.
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

MPASM
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#24 Message par Claudius » mar. 11 juin 2019 19:17

Bonjour JJE et à tous,

C'est tout à ton honneur, JJE, de te lancer dans une documentation détaillée et en français de MPASM mais s'agissant de ta remarque
"... surtout que rien ne vous en avertit sauf d'aller voir le code généré, ce qui n'est pas pratique courante je pense."

Je dirais au contraire, car c'est la 1st chose que je fais en éditant ce qui s'appelle le listing à l'image de uM-FPU-V3.1.16f628a.lst généré en // du HEX à flasher dans le PIC ... projet sur lequel je travaille actuellement suite au fil de discussion Utilisation du coprocesseur flottant Micromega uM-FPU

Maintenant, pour rien te (et vous ;-) cacher, je simule en totalité le programme avant le flashage du PIC au moyen de GPSim qui n'évolue plus ou presque plus (cf. également Piklab qui s'appuie dessus) et sur lequel j'ai pris la main avec notamment la simulation totale ou partielle des périphériques interfacés par le PIC. De plus, cette simulation est complétée grâce à l'utilisation de l'analyseur logique GTKWave, ce qui permet d'arriver à mes fins sans trop de surprises sur les chronogrammes à respecter par rapport aux datasheets et en entrées/sorties du PIC

NB: J'utilise la chaîne GPUtils sous Linux avec notamment GPAsm très proche de MPASM; cette chaîne de production est disponible également sous Windows ;-)
Modifié en dernier par Claudius le mar. 11 juin 2019 19:48, modifié 1 fois.

MPASM
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#25 Message par JJE » mar. 11 juin 2019 19:48

Bonsoir Claudius,

Peut-être est-ce que je me trompe, mais je reste persuadé que "ce n'est pas pratique courante" :-) , même si ce serait souhaitable.

Je me suis mis dans ces Pics, par loisir et il est vrai que je me suis contenté des outils qui se présentaient facilement, sans chercher plus avant. Je n'étais même pas sur un forum jusqu'à relativement récemment.
Les outils dont tu parles ont l'air assez musclés, je ne sais pas si je ferais le pas. Il vient un moment où les nouveautés font un peu peur :cry:

Merci du post en tous cas
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

MPASM
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#26 Message par F6FCO » mar. 11 juin 2019 23:01

Bonsoir à tous les deux,
Juste une petite aparté pour ne pas pourrir le tuto de JJE mais çà me turlupine:
Claudius, comme le dit JJE çà à l'air un peu complexe à mettre en oeuvre mais tu nous mets l'eau à la bouche avec ta chaîne de programmation, j'ai été voir Piklab mais il ne semble pas prendre en compte le PICKit3. Je me trompe ?

Capture.JPG


Capture1.JPG
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

MPASM
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#27 Message par Claudius » mer. 12 juin 2019 14:52

Bonjour F6FCO et à tout le forum,

Effectivement, Piklab qui s'appuie sur GPSim ne supporte pas le Pickit 3 ainsi que les derniers PICs...

Maintenant, le HEX simulé et généré peut être flashé indépendamment de la chaîne de production voire au moyen d'un autre programmateur puisque ce fichier est du type HEX (Intel)


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 16 invités