Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

prise en compte / utilisation compteur dans code en assembleur




  1. #1
    erwannomar

    prise en compte / utilisation compteur dans code en assembleur

    Bonjour,

    Actuellement je suis en train de modifier un code en assembleur et je suis bloqué sur l'execution de fonctions. En effet je souhaite faire executer une première fonction pendant un temps donné, puis par la suite executer une seconde fonction pendant un autre temps donné.
    Le problème rencontré actuellement est que j'arrive bien à executer la première fonction, mais pour la seconde je n'arrive à rien. J'ai l'impression que le compteur n'est pas pris en compte.

    Voici le code testé et qui ne fonctionne qu'à moitié :

    Code:
    main
            call	init_Tx                       ; appel de la fonction d'initialisation Tx
            movlw	.50000                       ; chargement de la valeur 50000 dans f
            movwf	coun_d                      ; ecriture de la valeur dans f dans la variable coun_d (soit 50000)
            call	Tx_transfer                ; appel de la fonction suivant le nombre de cycles défini dans coun_d
            decfsz	coun_d,f                     ; décrémente f, passe le goto $-2 si coun_d = 0
            goto	$-2h
            call	 init_Rx                       ; appel de la fonction d'initialisation Rx
            movlw	.30000                       ; chargement de la valeur 30000 dans f
            movwf	coun_e                      ; ecriture de la valeur dans f dans la variable coun_e (soit 30000)        
            call	RX_receive                    
            decfsz	coun_e,f                     ; décrémente f, passe le goto $-2 si coun_e = 0
            goto	$-2h
            goto	main                          ; renvoi main
    Y at-il quelqu'un qui aurait une idée ou une explication de pourquoi cela ne fonctionne pas ? Est-ce qu'il est possible qu'il existe une commande qui inhibe ce compteur coun_e dans la fonction Rx_receive ?
    Merci pour votre aide.

    -----


  2. Publicité
  3. #2
    erwannomar

    Re : prise en compte / utilisation compteur dans code en assembleur

    A noter qu'à la fin de la fonction "init_Tx" j'ai bien un "return" et à la fin de la fonction "init_Rx" j'ai bien un "return".
    Les fonctions Tx_transfer et RX_receive ont aussi un "return" à la fin.

  4. #3
    PA5CAL

    Re : prise en compte / utilisation compteur dans code en assembleur

    Bonjour

    Il faut vérifier que le compteur utilité pour la boucle n'est pas modifié par la routine appelée, volontairement ou accidentellement.


  5. #4
    erwannomar

    Re : prise en compte / utilisation compteur dans code en assembleur

    Bonjour, merci pour la réponse,

    par exemple si dans la routine il apparait :

    Code:
    clrf      coun_c
    est-ce que cela peut impacter le compteur nommé : coun_e ?

    Merci.

  6. #5
    erwannomar

    Re : prise en compte / utilisation compteur dans code en assembleur

    en relisant tout le code je me pose aussi une question sur le bout de code suivant :

    Code:
    fonction movlw    .48         
            movwf    coun
            call     synhro
            movf     rg_tmp,f     
            skpnz               
            return            
            btfsc    rg_tmp,0       
            setc        
            btfss    rg_tmp,0  
            clrc  
            rrf      byte_5,f  
            rrf      byte_4,f
            rrf      byte_3,f
            rrf      byte_2,f
            rrf      byte_1,f
            rrf      byte_0,f
            decfsz   coun,f
            goto     $-0Fh
    A quoi correspond le $-0Fh du goto ? cela renvoie ou ? le "h" veut dire hexa ? du coup renvoie à "-16" ?

    Merci.

  7. A voir en vidéo sur Futura
  8. #6
    PA5CAL

    Re : prise en compte / utilisation compteur dans code en assembleur

    Citation Envoyé par erwannomar Voir le message
    par exemple si dans la routine il apparait :

    Code:
    clrf      coun_c
    est-ce que cela peut impacter le compteur nommé : coun_e ?
    Tout dépend si les valers coun_c et coun_e sont égales, et correspondent de ce fait à la même adresse dans le fichier de registres. Cela peut notamment être le cas si l'on utilise EQU, ou bien des CBLOCK spécifiant une valeur de départ.

  9. #7
    PA5CAL

    Re : prise en compte / utilisation compteur dans code en assembleur

    Citation Envoyé par erwannomar Voir le message
    A quoi correspond le $-0Fh du goto ? cela renvoie ou ? le "h" veut dire hexa ? du coup renvoie à "-16" ?
    "$-0Fh" signifie "addresse de la prochaine instruction moins 16"

    Mais pour une valeur donnée, l'instruction d'arrivée dépend de la place occupée en mémoire par chacune des instructions entre elle et le goto, et peut donc varier d'une plateforme à l'autre.

    Par exemple, "goto $+2" saute l'instruction suivante sur PIC16F, mais l'exécute sur PIC18F.

    Il est donc préférable d'éviter cette notation, même si on la retrouve généralement dans les programmes désassemblés.
    Dernière modification par PA5CAL ; 24/09/2014 à 10h18.

  10. Publicité
  11. #8
    erwannomar

    Re : prise en compte / utilisation compteur dans code en assembleur

    les valeurs des compteurs sont différentes, mais cela ne change rien.

    est-il possible de faire un : goto $-1h pendant par exemple 1000 itérations
    est-il possible de passer par autre chose que par le compteur tel qu'il existe dans mon code ?

    Merci.

  12. #9
    DAUDET78

    Re : prise en compte / utilisation compteur dans code en assembleur

    Citation Envoyé par erwannomar Voir le message
    goto $-1h
    D'expérience ... n'utilise pas le $ ,mais une étiquette. Laisse l'assembleur faire le calcul !
    Code:
    Toto 
    ........
           Goto Toto
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  13. #10
    RISC

    Re : prise en compte / utilisation compteur dans code en assembleur

    Salut,
    On ne sait pas quel PIC tu utilises...C'est vrai qu'il n'y en a que plus de mille différents ;=)
    Ce qui est sur c'est que tu vas avoir de gros problèmes si tu ne gère pas les banques...
    Je te recommande au plus haut point, puisque tu as choisi l'assembleur c'est de lire le cours de Bigonoff.
    Utilises systématiquement les macros pour accéder aux variables comme "banksel variable" avant de faire une opération sur une variable...
    a+
    Ma marotte ? les microcontrôleurs ;=)

  14. #11
    PA5CAL

    Re : prise en compte / utilisation compteur dans code en assembleur

    Sur les plateformes où cela a un sens, "goto $-1h" exécute une boucle infinie. On ne peut en sortir que sur interruption. Il faudrait alors laisser le soin à un timer matériel préalablement programmé le soin de déclencher cette interruption au moment souhaité.

    Sinon, les deux seuls moyens de faire logiciellement 1000 itérations sont :
    - l'emploi d'une variable (registre ou mémoire) décomptant depuis 1000 ou comptant jusqu'à 1000,
    - la répétition du code 1000 fois de suite dans le source du programme.



    Hormis la question des banques que RISC vient de rappeler, il est possible que le contenu du compteur soit écrasé sans que tu t'en rendes compte (les bugs ne sont pas toujours évidents à trouver).

    Il est aussi possible qu'un problème de gestion de pile ou interruption matérielle mal traitée mette fin à ta routine avant qu'elle se termine.
    Dernière modification par PA5CAL ; 24/09/2014 à 12h24.

  15. #12
    erwannomar

    Re : prise en compte / utilisation compteur dans code en assembleur

    merci pour vos réponses,

    du coup est-il possible de faire:

    "execute fonctionX 2000 fois"
    "retour au debut du programme principal"

    ==> je pense effectivement que oui, mais avec l'utilisation du compteur...

    Merci pour vos réponses.

  16. #13
    erwannomar

    Re : prise en compte / utilisation compteur dans code en assembleur

    pour finir cette discussion, j'ai fait une bidouille en appelant des milliers de fois cette fonction, c'est vraiment pourri comme solution, mais pour l'instant je n'ai pas trouvé mieux, au moins cela fonctionne.
    je prendrais le temps de regarder le programme de plus prés par la suite...

    Merci à tous.

  17. #14
    RISC

    Re : prise en compte / utilisation compteur dans code en assembleur

    Salut
    Citation Envoyé par erwannomar Voir le message
    pour finir cette discussion, j'ai fait une bidouille en appelant des milliers de fois cette fonction, c'est vraiment pourri comme solution, mais pour l'instant je n'ai pas trouvé mieux, au moins cela fonctionne.
    je prendrais le temps de regarder le programme de plus prés par la suite...
    C'est tombé en marche....

    Malheureusement, bientôt le même programme va peut-être bientôt montrer des erreurs.
    Il faut utiliser uniquement des lignes de code que tu écris ou que tu comprends sans quoi tu vas passer beaucoup de temps à tourner en rond.

    a+
    Ma marotte ? les microcontrôleurs ;=)

Discussions similaires

  1. Réponses: 18
    Dernier message: 22/11/2013, 08h27
  2. Prise en compte des kWh (PCS) dans un bilan thermique
    Par dudule40 dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 10
    Dernier message: 01/08/2012, 13h14
  3. A propos un code assembleur
    Par sahar91 dans le forum Électronique
    Réponses: 0
    Dernier message: 19/02/2012, 23h19
  4. code assembleur sur isis
    Par simoha dans le forum Électronique
    Réponses: 1
    Dernier message: 04/07/2011, 03h53
  5. [PIC] Utiliser des routines assembleur dans le code C
    Par pseudoblogeus dans le forum Électronique
    Réponses: 4
    Dernier message: 29/12/2008, 23h29