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 ---
Modérateur : mazertoc
pic-as
Un dernier avant de partir, et effectivement il faut lire la doc . . .
PSECT ram_bk3,abs,space=1,class=bank3
ou
PSECT ram_x,abs,space=1,class=common
nom du psect (label ?), on met ce qu'on veut sauf des mots réservés
abs pour adressage absolu, il faut donc indiquer la première adresse du psect immédiatement derrière
space=1 pour indiquer qu'il s'agit de ram
class=bank3/common pour indiquer quelle bank est concerné
PSECT ram_bk3,abs,space=1,class=bank3
ou
PSECT ram_x,abs,space=1,class=common
nom du psect (label ?), on met ce qu'on veut sauf des mots réservés
abs pour adressage absolu, il faut donc indiquer la première adresse du psect immédiatement derrière
space=1 pour indiquer qu'il s'agit de ram
class=bank3/common pour indiquer quelle bank est concerné
pic-as
Maintenant, si on veut écrire dans la ram dans différentes sections du programme (ou simplement dans différents endroits) suffit-il de ne pas déclarer l'adressage absolu avec le flag abs ?
Exemple :
=> les octets 0 et 1 de la bank3 sont affectés aux variables 0 et 1
. . .
suite du programme avec un psect pour le code
. . .
plus loin
Les octets 2 et 3 sont-ils alors affectés (automatiquement) à var2 et var3 ?
Si non, comment faire ?
Exemple :
Code : Tout sélectionner
PSECT ram_bk3,space=1,class=bank3
var0: DS 1
var1: DS 1=> les octets 0 et 1 de la bank3 sont affectés aux variables 0 et 1
. . .
suite du programme avec un psect pour le code
. . .
plus loin
Code : Tout sélectionner
PSECT ram_bk3,space=1,class=bank3
var2: DS 1
var3: DS 1Les octets 2 et 3 sont-ils alors affectés (automatiquement) à var2 et var3 ?
Si non, comment faire ?
pic-as
Code : Tout sélectionner
PSECT fhe,abs,class=code,space=0,delta=2,size=128h
ORG 03f80Est-ce que cela va réserver la flash haute endurance ?
Ou bien faut-il limiter les autres psect (avec du code) pour qu'ils n'y empiètent pas ?
Là je suis benêt . . .
Bonne soirée.
pic-as
Pour le dernier point je doute.
On n'y trouvera pas de opcode à ces adresses, le programme qui va y lire/écrire se trouve ailleurs.
On peut considérer que les accès à cette zone mémoire relèvent d'un mécanisme interne au pic considéré.
Donc ne pas faire de psect la concernant . . . ?
On n'y trouvera pas de opcode à ces adresses, le programme qui va y lire/écrire se trouve ailleurs.
On peut considérer que les accès à cette zone mémoire relèvent d'un mécanisme interne au pic considéré.
Donc ne pas faire de psect la concernant . . . ?
pic-as
Pour le dernier point je n'ai pas d'avis, ne connaissant pas ce pic, ils deviennent de plus en plus complexes ces pics.
Pour les variables la réponse est oui, elles remplissent une section data dans l'ordre d'apparition en scène. Pourquoi tu n'utilises pas les sections prédéfinies ? D'ailleurs dans mes rares programmes je vois que je mets juste "psect code" pour le code (hors section reset), pour utiliser la section prédéfinie de code.
Dans le programme de départ tu as mis "psect CODE", il a dû considérer que c'était une nouvelle section car case sensitive (A VERIFIER) et elle ne lui a pas plu.
Pour voir le contenu des variables dans MPLABX ASM, il faut les déclarer en global, merci ChatGPT.
Pour les variables la réponse est oui, elles remplissent une section data dans l'ordre d'apparition en scène. Pourquoi tu n'utilises pas les sections prédéfinies ? D'ailleurs dans mes rares programmes je vois que je mets juste "psect code" pour le code (hors section reset), pour utiliser la section prédéfinie de code.
Dans le programme de départ tu as mis "psect CODE", il a dû considérer que c'était une nouvelle section car case sensitive (A VERIFIER) et elle ne lui a pas plu.
Pour voir le contenu des variables dans MPLABX ASM, il faut les déclarer en global, merci ChatGPT.
Code : Tout sélectionner
// 16F1719
#include <xc.inc>
; PSECT ram_bk3,space=1,class=bank3
PSECT udata_bank3
global var0,var1
var0: DS 1
var1: DS 1
PSECT resetVec,abs,class=CODE,space=SPACE_CODE,delta=2
resetVec:
goto test_0
PSECT code
test_0:
movlw 10
; PSECT ram_bk3,space=1,class=bank3
PSECT udata_bank3
global var2,var3
var2: DS 1
var3: DS 1
PSECT code
test_1:
movlw 11
end
pic-as
pic-as
pic-as
pic-as
Retour à la RAM . . .
PSECT udata_bank3,abs,space=1,class=BANK3
ORG 01a0h
De ce que je comprend, et pour ce PSECT
le ORG qui suit est inutile si toutes les définitions associées à la bank3 sont écrites ici ?
Et pour la banque commune
PSECT udata_shr,abs,space=1,class=COMMON
ORG 070h
le ORG est également inutile ?
PSECT udata_bank3,abs,space=1,class=BANK3
ORG 01a0h
De ce que je comprend, et pour ce PSECT
Devices that have a banked data space do not use different space values to identify each bank. A
full address that includes the bank number is used for objects in this space. So, each location can be
uniquely identified. For example, a device with a bank size of 0x80 bytes will use address 0 to 0x7F
to represent objects in bank 0, and then addresses 0x80 to 0xFF to represent objects in bank 1, etc.
le ORG qui suit est inutile si toutes les définitions associées à la bank3 sont écrites ici ?
Et pour la banque commune
PSECT udata_shr,abs,space=1,class=COMMON
ORG 070h
le ORG est également inutile ?
pic-as
Si maintenant on veut créer 1 variable bit dans 1 octet
et des variables octet
PSECT udata_shr,abs,bit,space=1,class=COMMON
etat_0: ds 1
PSECT udata_shr,abs,space=1,class=COMMON
ORG 071h
cmpt_0 ds 1
cmpt_1 ds 1
etat_0 sera représenté par le bit 0 de l'octet à l'adresse 070h
cmpt_0 sera représenté par l'octet en 071h et ainsi de suite pour les suivants
J'ai bon ?
et des variables octet
PSECT udata_shr,abs,bit,space=1,class=COMMON
etat_0: ds 1
PSECT udata_shr,abs,space=1,class=COMMON
ORG 071h
cmpt_0 ds 1
cmpt_1 ds 1
etat_0 sera représenté par le bit 0 de l'octet à l'adresse 070h
cmpt_0 sera représenté par l'octet en 071h et ainsi de suite pour les suivants
J'ai bon ?
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 10 invités


