[Programmation] Pile pointe n'importe où dû au nombre de sous programmes
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Pile pointe n'importe où dû au nombre de sous programmes



  1. #1
    damien8024

    Pile pointe n'importe où dû au nombre de sous programmes


    ------

    Bonjour à tous,

    Je viens demander votre aide car je sèche sur mon problème !

    Je réalise un programme assez lourd sur un pic16f877 et en assembleur qui gère entre autre un afficheur LCD 128x64. Oui je sais, je suis démodé mais je me mettrai au goût du jour plus tard !

    Ce programme utilise pas mal de macros et sous programme...
    Mon problème est que lorsque j'ajoute un appel de sous-programme en plus à partir d'un certain nombre déjà appelés et fermés, la pile pointe n'importe où. En effet ca part sur des instructions qui ne sont pas la suite logique du programme. Je rentre même dans des sous programmes jamais appelés !
    Par contre si j'ajoute des instructions classiques, aucun problème.
    (Il n'y a jamais plus de 4 imbrications de sous-programmes. Donc ce n'est pas dû à ça.)

    Je précise que d'après MBlab (visible dans le Dashboard), j'utilise que la moitié de ma mémoire programme du pic.

    Ce n'est pas lié à mon sous-programme supplémentaire non plus, car lorsque j'essaie d'en appeler un ancien à la place, ça plante aussi.

    Voilà ci-joint un bout de mon code au cas où...

    Code:
    CarA	    macro   octetaff,adrcarH,adrcarB
    		call	LectCarA
    		movf	AdrCarxH,w
    		movwf	adrcarH		; copier adresse haute de la ligne n°1 caractère à afficher dans AdrCarHx 
    		movf	AdrCarxB,w
    		movwf	adrcarB		; copier adresse basse de la ligne n°1 caractère à afficher dans AdrCarHx 
    		movf	OctCarx,w
    		movwf	octetaff	; copier octet de la ligne n°1 du caractère dans octet à afficher	
    		BANK0
    	    endm
    LectCarA
    	BANK3
    	movlw	0x00
    	movwf	eepaH		; adresse haute de la ligne n°1 caractère
    	movwf	AdrCarxH	; copier adresse haute dans AdrCarxH
    	movlw	0x00
    	movwf	eepaB		; adresse basse de la ligne n°1 du caractère
    	movwf	AdrCarxB	; copier adresse basse dans AdrCarxB
    	call	LectEep		; lire ligne n°1 du caractère
    	movwf	OctCarx		; octet de la ligne n°1 du caractère dans octet à afficher
    	return	    
    
    
    ;*****************************************************************************
    ;                      PROGRAMME PRINCIPAL                                   *
    ;*****************************************************************************	
    start
    	
    
    	
    	nop
    	
    ;	AdrPixel   0x80,0x80	    ; écran 1
    ;	call	VAPOSSIMO	
    ;	AdrPixel   0x90,0x80
    ;	call	Modemanuel	
    ;	AdrPixel   0x98,0x80
    ;	call	Recettes	
    ;	AdrPixel   0x80,0x88
    ;	call	Outils	
    ;	AdrPixel   0x90,0x88
    ;	call	Maintenance
    	
    	AdrPixel   0x80,0x80
    	CarA   OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarB   OctCar2,AdrCar2H,AdrCar2B
    	CarC   OctCar3,AdrCar3H,AdrCar3B
    	CarD   OctCar4,AdrCar4H,AdrCar4B
    	CarE   OctCar5,AdrCar5H,AdrCar5B
    	CarF   OctCar6,AdrCar6H,AdrCar6B
    	CarG   OctCar7,AdrCar7H,AdrCar7B
    	CarH   OctCar8,AdrCar8H,AdrCar8B
    	call	AffCar
    	
    	AdrPixel   0x80,0x83
    	CarI   OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarJ   OctCar2,AdrCar2H,AdrCar2B
    	CarK   OctCar3,AdrCar3H,AdrCar3B
    	CarL   OctCar4,AdrCar4H,AdrCar4B
    	CarM   OctCar5,AdrCar5H,AdrCar5B
    	CarN   OctCar6,AdrCar6H,AdrCar6B
    	CarO   OctCar7,AdrCar7H,AdrCar7B
    	CarP   OctCar8,AdrCar8H,AdrCar8B	
    	call	AffCar
    	
    	AdrPixel   0x80,0x86
    	CarQ   OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarR   OctCar2,AdrCar2H,AdrCar2B
    	CarS   OctCar3,AdrCar3H,AdrCar3B
    	CarT   OctCar4,AdrCar4H,AdrCar4B
    	CarU   OctCar5,AdrCar5H,AdrCar5B
    	call	AffCar
    	
    	AdrPixel   0x88,0x80
    	CarV   OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarW   OctCar2,AdrCar2H,AdrCar2B
    	CarX   OctCar3,AdrCar3H,AdrCar3B
    	CarY   OctCar4,AdrCar4H,AdrCar4B
    	CarZ   OctCar5,AdrCar5H,AdrCar5B
    	CarESP OctCar6,AdrCar6H,AdrCar6B
    	CarESP OctCar7,AdrCar7H,AdrCar7B
    	CarESP OctCar8,AdrCar8H,AdrCar8B
    	call	AffCar
    	
    	AdrPixel   0x88,0x83
    	CarESP  OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarESP  OctCar2,AdrCar2H,AdrCar2B
    	CarESP  OctCar3,AdrCar3H,AdrCar3B
    	CarESP  OctCar4,AdrCar4H,AdrCar4B
    	CarESP  OctCar5,AdrCar5H,AdrCar5B
    	CarESP  OctCar6,AdrCar6H,AdrCar6B
    	CarESP  OctCar7,AdrCar7H,AdrCar7B
    	CarESP  OctCar8,AdrCar8H,AdrCar8B	
    	call	AffCar
    	
    	AdrPixel   0x88,0x86
    	CarESP  OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarESP  OctCar2,AdrCar2H,AdrCar2B
    	CarESP  OctCar3,AdrCar3H,AdrCar3B
    	CarESP  OctCar4,AdrCar4H,AdrCar4B
    	CarESP  OctCar5,AdrCar5H,AdrCar5B
    	call	AffCar
    	
    	AdrPixel   0x90,0x80
    	Cara	OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	Carb	OctCar2,AdrCar2H,AdrCar2B
    	Carc	OctCar3,AdrCar3H,AdrCar3B
    	Card	OctCar4,AdrCar4H,AdrCar4B
    	Care	OctCar5,AdrCar5H,AdrCar5B
    	Carf	OctCar6,AdrCar6H,AdrCar6B
    	Carg	OctCar7,AdrCar7H,AdrCar7B
    	Carh	OctCar8,AdrCar8H,AdrCar8B
    	call	AffCar
    	
    	AdrPixel   0x90,0x83
    	Cari	OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	Carj	OctCar2,AdrCar2H,AdrCar2B
    	Cark	OctCar3,AdrCar3H,AdrCar3B
    	Carl	OctCar4,AdrCar4H,AdrCar4B
    	Carm	OctCar5,AdrCar5H,AdrCar5B
    	Carn	OctCar6,AdrCar6H,AdrCar6B
    	Caro	OctCar7,AdrCar7H,AdrCar7B
    	Carp	OctCar8,AdrCar8H,AdrCar8B	
    	call	AffCar
    	
    	AdrPixel   0x90,0x86
    	Carq	OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	Carr	OctCar2,AdrCar2H,AdrCar2B
    	Cars	OctCar3,AdrCar3H,AdrCar3B
    	Cart	OctCar4,AdrCar4H,AdrCar4B
    	CarA	OctCar5,AdrCar5H,AdrCar5B
    	call	AffCar
    	
    	AdrPixel   0x98,0x80
    	CarA	OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarA	OctCar2,AdrCar2H,AdrCar2B
    	CarA	OctCar3,AdrCar3H,AdrCar3B
    	CarA	OctCar4,AdrCar4H,AdrCar4B
    	CarA	OctCar5,AdrCar5H,AdrCar5B
    	CarESP	OctCar6,AdrCar6H,AdrCar6B
    	CarESP	OctCar7,AdrCar7H,AdrCar7B
    	CarESP	OctCar8,AdrCar8H,AdrCar8B
    	call	AffCar
    	
    	AdrPixel   0x98,0x83
    	CarESP  OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarESP  OctCar2,AdrCar2H,AdrCar2B
    	CarESP  OctCar3,AdrCar3H,AdrCar3B
    	CarESP  OctCar4,AdrCar4H,AdrCar4B
    	CarESP  OctCar5,AdrCar5H,AdrCar5B
    	CarESP  OctCar6,AdrCar6H,AdrCar6B
    	CarESP  OctCar7,AdrCar7H,AdrCar7B
    	CarESP  OctCar8,AdrCar8H,AdrCar8B	
    	call	AffCar
    	
    	AdrPixel   0x98,0x86
    	CarESP  OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarESP  OctCar2,AdrCar2H,AdrCar2B
    	CarESP  OctCar3,AdrCar3H,AdrCar3B
    	CarESP  OctCar4,AdrCar4H,AdrCar4B
    	CarESP  OctCar5,AdrCar5H,AdrCar5B
    	call	AffCar
    	
    	AdrPixel   0x80,0x88
    	CarA	OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarA	OctCar2,AdrCar2H,AdrCar2B
    	CarA	OctCar3,AdrCar3H,AdrCar3B
    	CarA	OctCar4,AdrCar4H,AdrCar4B
    	CarA	OctCar5,AdrCar5H,AdrCar5B
    	CarA	OctCar6,AdrCar6H,AdrCar6B
    	CarA	OctCar7,AdrCar7H,AdrCar7B
    	CarA	OctCar8,AdrCar8H,AdrCar8B
    	call	AffCar
    	
    	AdrPixel   0x80,0x8B
    	CarA	OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarA	OctCar2,AdrCar2H,AdrCar2B
    	CarESP  OctCar3,AdrCar3H,AdrCar3B
    	CarESP  OctCar4,AdrCar4H,AdrCar4B
    	CarESP  OctCar5,AdrCar5H,AdrCar5B
    	CarESP  OctCar6,AdrCar6H,AdrCar6B
    	CarESP  OctCar7,AdrCar7H,AdrCar7B
    	CarESP  OctCar8,AdrCar8H,AdrCar8B	
    	call	AffCar
    	
    	AdrPixel   0x80,0x8E
    	CarESP  OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarESP  OctCar2,AdrCar2H,AdrCar2B
    	CarESP  OctCar3,AdrCar3H,AdrCar3B
    	CarESP  OctCar4,AdrCar4H,AdrCar4B
    	CarESP  OctCar5,AdrCar5H,AdrCar5B
    	call	AffCar
    	
    	AdrPixel   0x88,0x88
    	CarA	OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarA	OctCar2,AdrCar2H,AdrCar2B
    	CarA	OctCar3,AdrCar3H,AdrCar3B
    	CarA	OctCar4,AdrCar4H,AdrCar4B
    	CarA	OctCar5,AdrCar5H,AdrCar5B
    	CarA	OctCar6,AdrCar6H,AdrCar6B
    	CarA	OctCar7,AdrCar7H,AdrCar7B
    	CarA	OctCar8,AdrCar8H,AdrCar8B
    	call	AffCar
    	
    	AdrPixel   0x88,0x8B
    	CarA	OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarA	OctCar2,AdrCar2H,AdrCar2B
    	CarA  OctCar3,AdrCar3H,AdrCar3B
    	CarA  OctCar4,AdrCar4H,AdrCar4B
    	CarA  OctCar5,AdrCar5H,AdrCar5B
    	CarA  OctCar6,AdrCar6H,AdrCar6B
    	CarA  OctCar7,AdrCar7H,AdrCar7B
    	CarA  OctCar8,AdrCar8H,AdrCar8B	
    	call	AffCar
    	
    	AdrPixel   0x88,0x8E
    	CarA  OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarA  OctCar2,AdrCar2H,AdrCar2B
    	CarA  OctCar3,AdrCar3H,AdrCar3B
    	CarA  OctCar4,AdrCar4H,AdrCar4B
    	CarA  OctCar5,AdrCar5H,AdrCar5B
    	call	AffCar
    	
    	AdrPixel   0x90,0x88
    	CarA	OctCar1,AdrCar1H,AdrCar1B	; Octet de la ligne 1 du caractère dans OctCar1 et adresse caratère dans haute et basse AdrCar
    	CarA	OctCar2,AdrCar2H,AdrCar2B
    	CarA	OctCar3,AdrCar3H,AdrCar3B
    	CarA	OctCar4,AdrCar4H,AdrCar4B
    	CarA	OctCar5,AdrCar5H,AdrCar5B
    	CarESP	OctCar6,AdrCar6H,AdrCar6B
    	CarESP	OctCar7,AdrCar7H,AdrCar7B
    	CarESP	OctCar8,AdrCar8H,AdrCar8B	
    	call	AffCar
    	
    
    	
    	goto	start
    Dans le programme principale, j'affiche tous les caractères par le biais d'une macro pour chaque caractère qui apelle un sous-programme pour chaque caractère.
    Mais arrivé à la lettre t, ça plante. C'est pour ça que j'affiche que des A par la suite. Et si j'enlève mon sous-programme qui va lire le caractère t dans l'eeprom, là ça refonctionne.
    Il ne veut plus d'un sous programme supplémentaire... Je précise que même si il se touve dans le code mais jamais appelé, ça plante aussi. Il faut que je l'efface carrémént.

    Voilà, c'est dur à expliquer et de ce fait, dur à comprendre, mais merci de votre aide ou au moins des pistes de recherche...

    -----
    Dernière modification par gienas ; 27/01/2022 à 19h40. Motif: Refermé la balise code

  2. #2
    paulfjujo

    Re : Pile pointe n'importe où dû au nombre de sous programmes

    bonsoir,

    afficheur graphique ?

    Table de codage de caratere ?

    tu devrais regarder ce que donne le resultat de la compilation fichier *.lst (listing)

    ne pas oublier qu'une macro est dupliquée autant de fois qu'elle est utilisée ....
    un sous programme ,lui n'est appelé qu'une fois
    je pense que ton programme est tres mal organisé !
    en tout cas tres lourd à digérer rien qu'en lecture ..
    Dernière modification par paulfjujo ; 27/01/2022 à 19h16.

  3. #3
    damien8024

    Re : Pile pointe n'importe où dû au nombre de sous programmes

    Il est organisé pour gagner en place et en lisibilité mais je n'ai mis qu'un bout du code. Donc difficile à comprendre.

    Il va lire des caractères 5x7 programmés en eeprom pour les traiter de manière à les afficher sans me soucier de l'organisation sur l'afficheur.

    Si mes macros utilisent chacune un sous-programme, c'est justement pour aller chercher cette lettre dans l'eeprom et ne pas écrire les adresses à chaque fois pour la même lettre.
    Par contre je suis obligé d'utiliser des macros car la même lettre peut être affiché à plusieurs endroits sur l'afficheur. Donc les adresses des pixels changent tout le temps.

    J'utilise autant de sous-programmes pour essayer d'optimiser un peu justement.

  4. #4
    doudou911

    Re : Pile pointe n'importe où dû au nombre de sous programmes

    Bonjour,

    +1 sur la lecture et l'organisation.

    si le Pb arrive quand tu ajoutes un call , c'est surement un Pb de pile , elle ne fait que 8 niveaux, et n'y a t'il pas une interruption qui vient en rajouter un niveau.

  5. A voir en vidéo sur Futura
  6. #5
    damien8024

    Re : Pile pointe n'importe où dû au nombre de sous programmes

    Je voulais mettre le code en entier mais le forum détecte une activité suspecte donc impossible d'envoyer le message.
    Là c'est sûr que c'est pas lisible du coup pour vous.

    Non pas d'interruptions allumées et je ne dépasse pas 4 niveaux en appel de sous-programmes...

  7. #6
    damien8024

    Re : Pile pointe n'importe où dû au nombre de sous programmes

    Je pense comprendre...

    C'est la première fois que j'écris un programme aussi lourd et je viens de me rappeler que la mémoire programme est divisée en plusieurs pages.
    Je n'ai pas du tout gérer ça du coup !

    Je vais corriger tout ça et croiser les doigts...

Discussions similaires

  1. Sous-programmes [Algorithme]
    Par invite588a8b70 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 27/05/2015, 13h50
  2. Est ce que en peut écrire n’importe quel nombre entier n sous forme factoriel?
    Par extrazlove dans le forum Mathématiques du supérieur
    Réponses: 12
    Dernier message: 25/04/2013, 11h44
  3. Charger des programmes sous XP
    Par Bearny dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 02/10/2012, 18h17
  4. N'importe quel nombre dans Pi?
    Par invitef47010ed dans le forum Mathématiques du supérieur
    Réponses: 11
    Dernier message: 12/10/2006, 06h53
  5. Ma souris pointe n'importe où
    Par invite17d6adbf dans le forum Matériel - Hardware
    Réponses: 7
    Dernier message: 10/01/2006, 20h42
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...