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 en BASIC et PASCAL !

Modérateur : Gérard

Combien de if avant plantage?
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#21 Message par HULK28 » ven. 13 janv. 2017 13:37

Je m'explique:
L'imbrication des if ne pose problème que si les tests successifs provoquent la création de variables temporaires multiples (calculs intermédiaires par exemple) à chaque fois la pile va être sollicitée et si la taille de ces variables grandi trop la pile va crasher si elle n'est pas vider à temps.

if(toto > titi) etc ne pose aucun problème.

if(toto > titi+4) il y a création d'une variable temporaire du fait de l'addition.

if(.....)
{
if(....)
{
if(toto > titi) tata=1024/5; // il y a création d'une variable temporaire tata et avec un flottant ça va vite dans une petite pile.
.....

selon le PIC l'imbrication multiple de ce type peut poser rapidement un problème.

Comme je n'ai pas encore regardé le code de Gérard, comme je l'ai dit, ce n'est donc qu'une supposition.
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

Combien de if avant plantage?
Gérard
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 804
Âge : 60
Enregistré en : septembre 2015
Localisation : Alsace

#22 Message par Gérard » ven. 13 janv. 2017 18:20

Je ne savais pas que les variables temporaires agissaient sur la pile. On en apprend tous les jours.
Le 11 / 07 / 2017, j'ai commandé une Ford Mustang.
Le 31 / 08 / 2017, j'ai eu la Mustang, un régal.

Combien de if avant plantage?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#23 Message par Guest » ven. 13 janv. 2017 18:30

c''est quoi cette histoire de variable qui va dans la pile. Je serai curieux de voir sur un 16 F avec sa boucle sur 8 bits, comment cela se passe.
Les push et pop c'est sur du 16 bits, pas trop abordé sur FANTASPIC sinon ma pomme, on est très loin des fondamentaux LA

Combien de if avant plantage?
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#24 Message par HULK28 » ven. 13 janv. 2017 19:38

Une variable globale (ou permanente) est déclarée en début de programme.
Elle est valide pendant toute la durée d'exécution du programme et fait l'objet d'une réservation mémoire permanente en RAM.
Sa portée est accessible à tout le programme.

Une variable locale (ou temporaire) est déclarée à l’intérieur d’une fonction OU est générée suite à un calcul intermédiaire dans cette même fonction, comme je l'ai expliqué avant.
Sa durée de vie est limitée à la durée d’exécution de la fonction dans laquelle elle est manipulée.
Elle est invisible pour les autres fonctions, elle est stockée par défaut dans un segment de RAM dédié, la pile.

Une variable temporaire est donc rangée en pile LIFO, mais elle peut être rangée en RAM à une adresse fixe (statique) qu'on nomme 'tas' (heap en anglais), c'est d'ailleurs très conseillé avec les PIC d'ancienne génération qui ont une pile ridicule puisque là la zone peut être importante et libre dans l'usage.
Par contre l'inconvénient c'est que c'est plus lent et il faut manipuler tout le flux "à la main", il y a des risques si on fait mal les choses.
Elle restera visible, même dans ce cas, à l’intérieur de la fonction où elle a été déclarée ou manipulée.
Ce type de variable est accessible par pointeur, c'est un peu plus compliqué à l'usage et le principe du tas dépend aussi de la vitesse de traitement nécessaire pour la donnée selon l'application.

La variable volatile indique au compilateur qu'une variable peut modifier son contenu en dehors du flux normal du programme, généralement en raison d'une interruption dans le cas des PIC.
Le compilateur ne fait pas d'optimisation sur elle.
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

Combien de if avant plantage?
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#25 Message par HULK28 » ven. 13 janv. 2017 19:42

maï a écrit :c''est quoi cette histoire de variable qui va dans la pile. Je serai curieux de voir sur un 16 F avec sa boucle sur 8 bits, comment cela se passe.
Les push et pop c'est sur du 16 bits, pas trop abordé sur FANTASPIC sinon ma pomme, on est très loin des fondamentaux LA


Sur les anciens 16F c'était un vrai problème, mais en même temps pour faire clignoter des leds c'était pas trop grave ;)

Quand tu utilisais beaucoup les interruptions ça commençais à bien se voir, et si en plus tu faisais des calculs avec flottants alors là c'était juste l'horreur.
C'était d'ailleurs une grosse critique faite aux PIC à l'époque et elle était justifiée.

Aujourd'hui Microchip a revu sa copie et les PIC16F récents n'ont plus cette tare congénitale, il était temps....

C'est vrai que j'ai allègrement bien débordé du sujet initial (stack overflow...) :-D
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

Combien de if avant plantage?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#26 Message par Guest » sam. 14 janv. 2017 07:29

Bon je ne sais toujours pas de quoi tu parles.Pour les globales et locales, c'est a la charge du compilateur C, pour la gestion des variables. Cela devient du grand n'importe quoi, la

Alors voila ce que je sais ou crois savoir, mais si je me trompe a me le démontrer.
-Sur 16F, nouveau ou ancien, dans la pile, il n'y a que le retour pour le pointeur instruction REGISTRE PCL pour ce qui font du debug (aucun jeux instruction pour faire autre chose).

-Pour les 18F nouveau ou ancien tu as la possibilité de modifier le retour du pointeur instruction sur une autre partie du programme si besoin, avec le push et le pop.Honnêtement pas très courant aussi bien en ASM qu'en C,perso, jamais vue, pour cause,n'a pas la souplesse du push et du pop que l'on connais.

Donc la pile a rien à voir avec les tests et rien à voir avec les variables

il faut monter sur 16bits pour faire des manips, sur registres et variables toujours avec push et pop. mais la, la pile n'a pas de limite sinon, la capacité de le RAM restante ,puisque placé après les variables, donc de fin variable a fin de la RAM,mais c'est un autre sujet.

Bon on va arrêter la, tu creuses, c'est plus les tests, c'est les variables

Combien de if avant plantage?
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#27 Message par HULK28 » sam. 14 janv. 2017 08:07

Laisse tomber tu es trop obtus.

Fais et pense comme tu veux je m'en fous.
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

Combien de if avant plantage?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#28 Message par Guest » sam. 14 janv. 2017 08:48

HULK28 a écrit :Laisse tomber tu es trop obtus.

Fais et pense comme tu veux je m'en fous.


NON du C ou BASIC, cela passe par ASM et MOI je raisonne en ASM avec le jeux instructions, si aucun instruction ne me permet de placer une variable dans la pile, aucun langage évolue ne pourra le faire. et çà c'est de la logique Attend encore de ta part, le bout de code désassemblé, pour étayer tes dires.

Cela fait beaucoup de pirouettes, pour de sortir de la.Que tu te sois trompé, cela m'arrive assez souvent,mais je sais le reconnaître.

Perso je m'en fou, de comment tu raisonnes, mais que tu laisses, ceux qui nous lisent, penser cela .La ça me pause problème, avoir ce qui traîne sur la toile, du pire et du bon, tu es dans le pire, pas beau pour un PRO

Combien de if avant plantage?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#29 Message par Guest » dim. 15 janv. 2017 09:51

un dernier post, avant de partir

ici la décompilation du if avec incrémentation d'un variable
Resultat.png


ou l'on vois uniquement des acces à la RAM (BANKED) et aucun accès a la pile.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.


Retourner vers « Langage BASIC & PASCAL »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité