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 le langage C !

Modérateur : Jérémy

Broken breakpoint (résolu)
pucpood
Membre
Membre
Messages : 20
Âge : 52
Enregistré en : septembre 2023
Localisation : 01960

#1 Message par pucpood » lun. 3 févr. 2025 08:50

Bonjour à tous,

Je suis bloqué dans mon dev par un problème inattendu. Le symptôme : "Broken Breakpoint".
Le point d'arrêt que j'ai placé dans mon code passe à l'état "broken" quand je lance le debug.
Quelques lignes avant c'est bon, quelques lignes après c'est bon aussi.
Si je m'arrête avant et que je fais du pas à pas, le code en question semble être totalement ignoré.
Si je lance une exécution en mode "production", le code semble être ignoré également.

Une idée sur ce qui pourrait rendre une partie du code inopérante ?

Merci.
Modifié en dernier par pucpood le ven. 7 févr. 2025 08:17, modifié 1 fois.

Broken breakpoint
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3050
Âge : 74
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » lun. 3 févr. 2025 09:24

bonjour,

Hors context de debugging :
un oubli de parentheses dans l'appel d'une fonction
=> pas d'erreur de compil. , pas de blocage du programme ,
mais NON execution de la fonction appelée

il faudrait verifier dans le resultat de compilation asm ou lst
le contenu de la partie bloquante et des registres MCU utilisés...aussi par debug
Aide toi, le ciel ou FantasPic t'aidera

Broken breakpoint
pucpood
Membre
Membre
Messages : 20
Âge : 52
Enregistré en : septembre 2023
Localisation : 01960

#3 Message par pucpood » lun. 3 févr. 2025 14:26

Merci de ta réponse rapide @paulfjujo.

Je crois avoir mis le doigt là où ça fait mal, un truc tout bête :

Code : Tout sélectionner

if( BTRxFrame[2] == 0xFF )

où BTRxFrame est un tableau de char.

Bien qu'il y eu bien 0xFF dans BTRxFrame[2], il devait être considéré à -1 en tant que type signé et le '0xFF' à 255, donc différent. Du coup, il n'entrait pas dans le 'if'.
Un cast (unsigned char) a arrangé le problème. Toutefois, je vais re-balayer toutes les utilisations de ce tableau car il n'a pas de raison d'être signé.

En espérant que ça pourra servir à quelqu'un.

Broken breakpoint
ohayo91
Membre
Membre
Messages : 2
Enregistré en : janvier 2025

#4 Message par ohayo91 » lun. 3 févr. 2025 17:09

Bonjour,
Une petite astuce toute simple pour les points d'arrêts.
Il suffit d'ajouter dans le code la pseudo instruction C "NOP();" ou "Nop();" suivant le compilateur XC utilisé.
Cette pseudo instruction est compilée comme un NOP assembleur
a+

Broken breakpoint
pucpood
Membre
Membre
Messages : 20
Âge : 52
Enregistré en : septembre 2023
Localisation : 01960

#5 Message par pucpood » ven. 7 févr. 2025 08:16

ohayo91 a écrit :Bonjour,
Une petite astuce toute simple pour les points d'arrêts.
Il suffit d'ajouter dans le code la pseudo instruction C "NOP();" ou "Nop();" suivant le compilateur XC utilisé.
Cette pseudo instruction est compilée comme un NOP assembleur
a+


Exact, j'en fais un usage immodéré, c'est bien utile quand-il y a des petits décalage entre le PC et l'affichage (ça m'arrive souvent malgré les "Clean & rebuild"). 2 ou 3 Nop() avant l'endroit voulu, le point d'arrêt sur le 1er Nop et on est sûr de ne pas dépasser !


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités