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
ASM et C ou plutot C et ASM
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour,
Les noms des variables entre le C et l'assembleur même au sein d'un même fichier ne sont pas les mêmes (un bon exemple est Connaitre le temps d’exécution d'une instruction où i définie en C est accédée en assembleur par _i )
Par expérience les noms des variables accessibles depuis l'assembleur et définies en C doivent être préfixées par '_'
maï, je t'invite donc à essayer: asm("MOVLW _cons");
NB: Restera peut-être un problème de taille car par défaut en C, les constantes numériques sont des int qui risquent de ne pas "rentrer" présentement dans le registre W qui est, sauf erreur de ma part, codé sur 8 bits
Les noms des variables entre le C et l'assembleur même au sein d'un même fichier ne sont pas les mêmes (un bon exemple est Connaitre le temps d’exécution d'une instruction où i définie en C est accédée en assembleur par _i )
Par expérience les noms des variables accessibles depuis l'assembleur et définies en C doivent être préfixées par '_'
maï, je t'invite donc à essayer: asm("MOVLW _cons");
NB: Restera peut-être un problème de taille car par défaut en C, les constantes numériques sont des int qui risquent de ne pas "rentrer" présentement dans le registre W qui est, sauf erreur de ma part, codé sur 8 bits
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
ASM et C ou plutot C et ASM
j'ai un problème avec les constantes pas avec les variables et si je ne me trompe ici c'est le résultat d'une decompli rien a voir.Claudius a écrit :
Les noms des variables entre le C et l'assembleur même au sein d'un même fichier ne sont pas les mêmes (un bon exemple est Connaitre le temps d’exécution d'une instruction où i définie en C est accédée en assembleur par _i )
Les variables restent les même, c'est pour le compli. Exemple en ASM l'appel d'un spg en biblio objet ce fait, du style _ClavierX4 pourtant le spg est bien déclaré clavierx4 et on est en ASM
merci mais tu penses bien, que cela j'ai déjà fait ,c'est pas le problème, le problème c'est le CONSTANTESPar expérience les noms des variables accessibles depuis l'assembleur et définies en C doivent être préfixées par '_'
maï, je t'invite donc à essayer: asm("MOVLW _cons");
NB: Restera peut-être un problème de taille car par défaut en C, les constantes numériques sont des int qui risquent de ne pas "rentrer" présentement dans le registre W qui est, sauf erreur de ma part, codé sur 8 bits
tu es sur ? regarde le résultat chargement d'une constant sur un char.il suffit que la constant fasse moins de 256 et sa rentre
Code : Tout sélectionner
#define QUARTZ 20
Code : Tout sélectionner
! CodeX= QUARTZ;
0xD6: MOVLW 0x14
0xD7: BCF STATUS, 0x5
0xD8: BCF STATUS, 0x6
0xD9: MOVWF 0x27
0xDA: MOVF 0x27, W
0xDB: MOVWF CodeX
Les constantes NON pas de FORMAT et c'est la le risque
tient ici
Code : Tout sélectionner
#define _XTAL_FREQ 20000000
tient resultat avec QUARTZ 300
Code : Tout sélectionner
#define QUARTZ 300
Code : Tout sélectionner
! int Tempo;
! CodeX= QUARTZ;
0xD6: MOVLW 0x2C
0xD7: BCF STATUS, 0x5
0xD8: BCF STATUS, 0x6
0xD9: MOVWF 0x27
0xDA: MOVF 0x27, W
0xDB: MOVWF CodeX
la c'est tout FAUX
je sais aussi qu'il faut manipuler les constants avec prudence mais la n'est pas la question
Je suis toujours sous 16F donc gestion des banques
A+
Modifié en dernier par Anonymous le dim. 10 avr. 2016 19:00, modifié 1 fois.
ASM et C ou plutot C et ASM
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Tu as entièrement raison maï sur tous les points (je fatigue )
Maintenant, je crois avoir compris: Les constantes définies en C ne sont en fait que des "pseudo" qui seront remplacées par leur valeur lors de leurs utilisations en C et resteront donc inconnues depuis l'assembleur car comme tu le dis, ce ne sont pas des variables...
Pour éviter une redéfinition (Constante C et Constante Asm), une solution consisterait à créer une variable type const (qui devrait se mettre en zone programme mais peut être lourd pour y accéder suivant le PIC) ou non const qui mangera une zone en RAM facilement accessible et acceptable si de la réserve en zone RAM
Maintenant, je crois avoir compris: Les constantes définies en C ne sont en fait que des "pseudo" qui seront remplacées par leur valeur lors de leurs utilisations en C et resteront donc inconnues depuis l'assembleur car comme tu le dis, ce ne sont pas des variables...
Pour éviter une redéfinition (Constante C et Constante Asm), une solution consisterait à créer une variable type const (qui devrait se mettre en zone programme mais peut être lourd pour y accéder suivant le PIC) ou non const qui mangera une zone en RAM facilement accessible et acceptable si de la réserve en zone RAM
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
ASM et C ou plutot C et ASM
oui ca aussi j'ai essayé je me suis dit il prend asm("MOVLW _MAVAR"); super je vais déclarer une variable en Constante mais j'ai ca:
dur dur et je suis sur que cela ce fais, deja vu des marco le résultat pas la macro
A+
dur dur et je suis sur que cela ce fais, deja vu des marco le résultat pas la macro
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 49 invités