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 ---
- 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 ---
MPASM
Bonjour à tous,
Je m'en doutais bien, mais,
où ai-je buggé ?
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é ?
MPASM
Bonjour Tempx-x,
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
Je suis sûr que personne n'en doute, mais de là à s'y restreindre,
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
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,
MPASM
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 . 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
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.
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 :
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 :
La fenêtre de compte rendu d'assemblage dit :
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
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.
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 . 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.
MPASM
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
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 ;-)
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.
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
MPASM
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
Merci du post en tous cas
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
Merci du post en tous cas
MPASM
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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 ?
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 ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
MPASM
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
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)
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)
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 42 invités