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

ASM et C ou plutot C et ASM
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#1 Message par Claudius » dim. 10 avr. 2016 15:51

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 instructioni 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

ASM et C ou plutot C et ASM
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#2 Message par Guest » dim. 10 avr. 2016 18:14

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 instructioni définie en C est accédée en assembleur par _i ;-))
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.
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
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");
merci mais tu penses bien, que cela j'ai déjà fait ,c'est pas le problème, le problème c'est le CONSTANTES ;)
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
c'est pas de INT ;) on est loin des 65535

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
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#3 Message par Claudius » dim. 10 avr. 2016 18:58

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 ;-)

ASM et C ou plutot C et ASM
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#4 Message par Guest » dim. 10 avr. 2016 19:10

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:
erreur.png


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