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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

[Librairie] Gestionnaire de RAM pour programmation modulaire
Lulu
Avatar de l’utilisateur
Membre
Membre
Messages : 9
Enregistré en : octobre 2016
Localisation : sud est

#1 Message par Lulu » dim. 3 oct. 2021 22:30

Bonjour tout le monde, c'est chouette d'avoir un forum sur les PIC en français ! C'est mon premier post ici. Je programme en uniquement en assembleur depuis quelques années, principalement sur MPLAB IDE 8.92 et uniquement sur les pic 8bits, principalement midrange et uniquement en mode absolu.
Je ne suis pas un expert, mais au fil du temps j'ai pu écrire certains utilitaires à inclure pour simplifier la tâche et surtout pour rendre certaines partie de code modulable et donc facilement réutilisable.
il y a peut-être des bugs, le fait de partager peut en faire apparaitre certains. Merci pour votre indulgence !

Je partage ici un premier module qui sert de base à la conception... d'autres modules !
Il s'agit d'un gestionnaire de mémoire RAM. A quoi ça sert me direz-vous puisque sous MPLAB on peut facilement déclarer nos variables avec CBLOCK/ENDC ? Prenons un exemple pour illustrer le concept:

Imaginons qu'un projet soit composé d'un fichier principal 'main.asm' utilisant ses variables, d'une bibliothèque utilitaire 'lcd.asm' utilisant aussi des variables et une deuxième bibliothèque d'utilitaire 'serial.asm' utilisant encore des variables. Si les variables sont déclarées avec CBLOCK/ENDC leurs adresses sont donc fixées "en dur" et là on se trouve face à un possible problème de collision d'adresse entre les variables distribuées sur 3 fichiers différents... Donc chaque fois qu'on inclu un nouveau module, on doit re-vérifier s'il n'y a pas collision d'adresse. ça peut être vite gonflant si on a beaucoup de module bibliothèque à inclure.
C'est là qu'intervient le gestionnaire de mémoire RAM: à l'aide de macros, on lui demande de déclarer une variable dans la bank de notre choix et c'est lui qui fixe son adresse physique.

Pour que ça marche, le gestionnaire doit d'abord connaître les adresses de début et de fin de la zone de mémoire commune (partagée) et celles de chaque bank. Pour cela, on ouvre le datasheet du pic utilisé et on utilise les macros suivantes:

Déclaration de la zone mémoire commune
AddSharedRamArea startadress, endadress

Déclaration d'une bank
AddRamBank bankid, startadress, endadress

Déclaration de plusieurs banks en même temps
AddRamBanks first_bankid, last_bankid, first_bank_startadress, first_bank_endadress, byte_offset_between_bank

exemple:

Code : Tout sélectionner


    AddSharedRamArea 0x70
, 0x7F        ; ajoute une zone de mémoire commune de l'adresse 0x70 à 0x7F (inclue)
    AddRamBank 0, 0x20, 0x6F        ; ajoute la bank0 de l'
adresse 0x20 à 0x6F
    AddRamBanks 1
, 11, 0xA0, 0xEF, 0x80    ; ajoute les bank1 à bank11, la bank1 commençant à 0xA0 jusque 0xEF
                                                
; et il y a un offset de 0x80 octets entre chaque bank


Maintenant qu'on a informé le gestionnaire de RAM de la configuration de notre PIC, on peut déclarer nos variables avec les macros suivantes:

AddSharedVar varname, bytecount
RamTargetBank bankid
AddVar varname, bytecount

exemple:

Code : Tout sélectionner


    AddSharedVar w_temp
, 1            ; ajoute la variable w_temp de 1 octet dans la mémoire commune
    AddSharedVar status_temp
, 1        ; ajoute la variable status_temp de 1 octet dans la mémoire commune
 RamTargetBank 0                
; désigne la bank dans laquelle se trouveront les variables suivantes
    AddVar compteur
, 1            ; ajoute la variable compteur de 1 octet (donc dans la bank0)
    AddVar buffer, 8            ; ajoute la variable buffer de 8 octets dans la bank0
 RamTargetBank 1                
; désigne la bank1
    AddVar buffer2
, 80            ; buffer2 occupe 80 octets dans la bank1


En incluant le gestionnaire en début de notre fichier principal, et si chacune de nos bibliothèques utilisent ces macros, on peut toujours déclarer des variables dans la bank de notre choix sans se soucier de leur adresse physique, le gestionnaire s'occupe de les ranger et il génèrera un message d'erreur en cas de dépassement mémoire.

Je vous joint un zip d'exemple utilisant ce principe et contenant 4 fichiers:
principal.asm : le programme principal à compiler
Random.asm : module de génération de nombre aléatoire qui déclare ses propres variables
RamDefinition.asm : contiend la définition des zones de RAM du pic
RamManager.asm : le gestionnaire de RAM

demo.zip


Le RamManager n'occupe aucun emplacement programme du PIC, il est uniquement écrit avec des directives de compilation.
ça ne révolutionnera rien mais j'espère que ça puisse être utile :-)
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

[Librairie] Gestionnaire de RAM pour programmation modulaire
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#2 Message par satinas » lun. 4 oct. 2021 10:20

Bonjour LuluTech et bienvenue sur ce forum.

Jolies macros, bravo :)
Les programmeurs ASM aiment bien souvent faire leurs propres macros et bibliothèques, et il est toujours bon de les partager. Ayant la mémoire courte, j'ai tendance à en refaire à chaque début de projet, car je prends autant de plaisir à les (re)faire qu'à les utiliser.
Au départ je n'utilisais que EQU ensuite le grand luxe CBLOCK qui incrémente automatiquement l'adresse des variables, donc pas de problème pour les fichiers include. Pour les différentes zones ram, d'après la doc il y a UDATA et UDATA_SHR en mode relocatable, que je n'ai pas pratiqués, ce n'est pas suffisant ?

[Librairie] Gestionnaire de RAM pour programmation modulaire
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#3 Message par Temps-x » lun. 4 oct. 2021 23:46

Bonjour LuluTech, et tout le forum,


Bienvenue sur ce forum de Fantas-pic


Merci ! pour ses macros, si ça continu on va concurrencer mikroC :-D

Il est vrai qu'on on inclue un fichier ASM il y a souvent des variables près déclaré, dans t'elle zone de bank, donc ça peut être enrichissant de voir ta méthode.

Certain personne réunisse leurs variables dans un seule fichier, ce qui permet de ne pas se tromper, pour ma par j'utilise très peu de macro dans un autre fichier, je mets tout dans un seule

Tu trouveras ICI Menu de routines ASM à disposition, à voir si tu veux incorporer ta routine.

Gérard :sifflotte: 'spécialiste en ASM seras content de voir ta routine.

Tu as apprit ASM comment ?

Merci ! pour le partage

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

[Librairie] Gestionnaire de RAM pour programmation modulaire
Lulu
Avatar de l’utilisateur
Membre
Membre
Messages : 9
Enregistré en : octobre 2016
Localisation : sud est

#4 Message par Lulu » mer. 6 oct. 2021 17:44

Bonjour, désolé pour ma réponse tardive, le dernier orage a du faire exploser le relais du coin, plus de téléphone ni d'internet depuis 2 jours !
satinas a écrit :Bonjour LuluTech et bienvenue sur ce forum.
Au départ je n'utilisais que EQU ensuite le grand luxe CBLOCK qui incrémente automatiquement l'adresse des variables, donc pas de problème pour les fichiers include. Pour les différentes zones ram, d'après la doc il y a UDATA et UDATA_SHR en mode relocatable, que je n'ai pas pratiqués, ce n'est pas suffisant ?


En mode relocatable, je pense que c'est suffisant, mais je ne programme qu'en mode absolu, je préfère connaître à quel endroit se trouve le code.
Pour CBLOCK, il ne déclenche aucune erreur de compilation en cas de dépassement de capacité de la bank. Le code suivant se compile sans problème alors que la bank6 concernée (sur un 16F1825) ne fait que 80 octets:

Code : Tout sélectionner

 CBLOCK 0x320
  buffer
: 200    le buffer empiète sur la shared ram et aussi sur les FSR qui suivent !
 ENDC

En utilisant le RamManager, on ferai:

Code : Tout sélectionner


     RamTargetBank 6
    AddVar buffer
200

Le RamManager déclenchera une erreur car on lui a informé auparavant que la bank6 n'a que 80 octets.

[Librairie] Gestionnaire de RAM pour programmation modulaire
Lulu
Avatar de l’utilisateur
Membre
Membre
Messages : 9
Enregistré en : octobre 2016
Localisation : sud est

#5 Message par Lulu » mer. 6 oct. 2021 17:54

Temps-x a écrit :Tu trouveras ICI Menu de routines ASM à disposition, à voir si tu veux incorporer ta routine.

Gérard :sifflotte: 'spécialiste en ASM seras content de voir ta routine.

Tu as apprit ASM comment ?

Merci ! pour le partage

==> A+

Bonsoir Temps-X, j'ai vu que tu participes beaucoup et nombreux sont tes posts ici, merci à toi ! Tu m'as fait connaitre Jens File Editor que je ne connaissait pas et aussi ta méthode de coder sans MPLAB IDE, je la garde sous le coude ! Merci pour tes partages, j'adore ton post sur comment jouer de la musique sur le PIC, bravo !
J'ai appris l'ASM sur les PIC grâce au cours de Bigonoff que j'ai trouvé super, je ne connaissait pas les micro-controlleur avant ça (il y a une petite dizaine d'année maintenant). Je connaissait l'assembleur du Z80 et un peu du 6809 mais j'ai oublié depuis !
Bonne soirée à vous tous

[Librairie] Gestionnaire de RAM pour programmation modulaire
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2596
Enregistré en : juillet 2016
Localisation : Terre

#6 Message par Temps-x » jeu. 7 oct. 2021 01:07

Bonjour LuluTech, et tout le forum,

Lulutech a écrit :Source du message Bonsoir Temps-X, j'ai vu que tu participes beaucoup et nombreux sont tes posts ici

Ben ouais, tout est en Français, on peut dire merci au créateur du forum, qui en autre est Jérémy

C'est pour cela que je participe le plus que possible pour que vive le forum, de plus tu trouveras des gens très sympathique ici.

Lulutech a écrit :Source du message Tu m'as fait connaitre Jens File Editor que je ne connaissait pas

Quand on pense qu'il fait seulement 1 Mo en taille c'est assez impressionnant, de plus, pas de prise de tête pour compiler un programme, suffit d'appuyer sur le bouton, si il y a des erreurs le compilateur te le signaleras, après suffit de regarder dans le fichier xxxxxx.ERR ou tout seras indiqué, il y a encore beaucoup à dire dessus (le mieux c'est de l'essayer)

Lulutech a écrit :Source du message j'adore ton post sur comment jouer de la musique sur le PIC, bravo !

Je pense que cela pourras t’intéresser vu que tu fais des spectacles de marionnettes/automates, de plus cette méthode est très simple à mettre en oeuvre, il faut juste que ton pic est l'option NCO, après suffit de télécharger le programme Rtttl qui est ICI (mise à jour le Mercredi 5 octobre 2021) puis convertir la musique qui en norme Rtttl vers la norme NCO (c'est le programme qui le fait), j'ai tout expliqué ICI

Tu pourras trouver près de 11104 fichier d'extrait de musique en norme Rtttl téléchargeable ICI

Cette norme NCO nous à été communiqué par paulfjujo c'est lui qui nous l'a fait connaitre.

Lulutech a écrit :Source du message J'ai appris l'ASM sur les PIC grâce au cours de Bigonoff que j'ai trouvé super,

Je suis comme toi, j'ai tout appris de lui, on lui doit beaucoup, alors imagine ma joie quand j'ai vu qu'il était inscrit sur le forum, même si c'est juste pour nous dire bonjours, ça fait plaisir de le savoir ici. :wink:

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

[Librairie] Gestionnaire de RAM pour programmation modulaire
Pikachu
Débutant
Débutant
Messages : 60
Enregistré en : septembre 2016

#7 Message par Pikachu » sam. 9 oct. 2021 11:04

Bonjour LuluTech et toute la compagnie,

Merci pour ce partage
J'ai toujours quelque chose a apprendre :wink:
Bonne journée


Retourner vers « Langage ASM »

Qui est en ligne

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