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
[Librairie] Gestionnaire de RAM pour programmation modulaire
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:
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:
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
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
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
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
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 ?
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
Bonjour LuluTech, et tout le forum,
Bienvenue sur ce forum de Fantas-pic
pour ses macros, si ça continu on va concurrencer mikroC
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 'spécialiste en ASM seras content de voir ta routine.
Tu as apprit ASM comment ?
pour le partage
A+
Bienvenue sur ce forum de Fantas-pic
pour ses macros, si ça continu on va concurrencer mikroC
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 'spécialiste en ASM seras content de voir ta routine.
Tu as apprit ASM comment ?
pour le partage
A+
[Librairie] Gestionnaire de RAM pour programmation modulaire
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 !
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:
En utilisant le RamManager, on ferai:
Le RamManager déclenchera une erreur car on lui a informé auparavant que la bank6 n'a que 80 octets.
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
Temps-x a écrit :Tu trouveras ICI Menu de routines ASM à disposition, à voir si tu veux incorporer ta routine.
Gérard 'spécialiste en ASM seras content de voir ta routine.
Tu as apprit ASM comment ?
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
Bonjour LuluTech, et tout le forum,
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.
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)
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.
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.
A+
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.
A+
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 40 invités