Bonjour,
Quelqu'un saurait il m'expliquer pourquoi sous unity lorsque l'on créer un tableau de booléen et que l'on donne pour adressage du premier booléen %MW0.0, le second a pour adresse %MW0.0 aussi puis le 3eme et 4eme ont %MW1.0 etc....Alors que la logique voudrait que le second est pour adresse %MW0.1 puis le 3eme %Mw0.2 etc...
Il y a certainement une explication a cela?
Array of bool
Re: Array of bool
Bonsoir,
Parce qu'un bool (ou ebool) occupe 1 octet de mémoire (8 bits) --> c'est l'unité la plus petite adressable
Pour optimiser la mémoire, il faut faire un tableau de Word et faire soi-même l'adressage à l'intérieur du mot (masquage, décalage ...)
@+
Parce qu'un bool (ou ebool) occupe 1 octet de mémoire (8 bits) --> c'est l'unité la plus petite adressable
Pour optimiser la mémoire, il faut faire un tableau de Word et faire soi-même l'adressage à l'intérieur du mot (masquage, décalage ...)
@+
Re: Array of bool
Merci pour ton explication
Saurais tu me dire comment fait on pour faire apparaître les bits de mot d'un mot dans les variables, a l'image de ce qui ce faisait sous PL7 pro?
Lorsque l'on double cliquait sur un mot, celui ci ce développait et laissait apparaître tous les bits de mots.
Saurais tu me dire comment fait on pour faire apparaître les bits de mot d'un mot dans les variables, a l'image de ce qui ce faisait sous PL7 pro?
Lorsque l'on double cliquait sur un mot, celui ci ce développait et laissait apparaître tous les bits de mots.
Re: Array of bool
tu ne peux pas sous Unity.Saurais tu me dire comment fait on pour faire apparaître les bits de mot d'un mot dans les variables, a l'image de ce qui ce faisait sous PL7 pro?
Lorsque l'on double cliquait sur un mot, celui ci ce développait et laissait apparaître tous les bits de mots.
par programme, si tu as besoin de lire ou écrire un bit d'un mot de façon statique (le n° du bit est figé), tu peux utiliser cette syntaxe
Code : Tout sélectionner
variable.xx
par ex : "MaSuperVariableEnInt.13" pour le bit 13 du "INT"
si le besoin est dynamique (le n° du bit est déterminé par un calcul), il faut d'abord calculer un masque (poids binaire du bit --> SHL(1, pos du bit) ) puis faire un OR (pour mise à 1) ou un AND NOT (pour mise à 0)
@+
Re: Array of bool
Et a partir du moment ou l'on utilise ces bits de mots, apparaissent ils dans les variables et peut on y renseigner des commentaires?
Re: Array of bool
quand tu créées une variable, tu peux lui spécifier une adresse.
cette adresse peut correspondre à un bit de mot bien précis (par ex %MW100.13) .
dans ce cas uniquement, un bool devient un seul bit au niveau du stockage (ebool ne marche pas car sa structure interne est de 3 bits : état actuel + état précédent + état forçage).
dans tous les autres cas, un bool = un octet de stockage
--> c'est d'ailleurs ce principe qui est employé pour l'affectation des E/S (que tu ne peux pas déclarer en EBOOL).
par contre si le mot est lui même déclaré, tu vas avoir des avertissements de chevauchement de variable (sans autres conséquences ; tu peux réduire au silence ces avertissements via une option mais ça peut être utile dans d'autres cas que celui-ci ...)
il faut faire un choix, soit tu détailles au niveau du bit, soit tu restes au niveau du mot.
ce n'est pas une bonne pratique de donner une adresse à une variable (donc de la localiser en mémoire) sauf si c'est une variable de communication (avec un IHM par ex).
il faut laisser le compilateur faire son affectation en interne (qui ne sera pas dans l'espace des %MW qui sont limités en quantité)
sous unity il faut oublier tes habitudes de pl7 ...
@+
cette adresse peut correspondre à un bit de mot bien précis (par ex %MW100.13) .
dans ce cas uniquement, un bool devient un seul bit au niveau du stockage (ebool ne marche pas car sa structure interne est de 3 bits : état actuel + état précédent + état forçage).
dans tous les autres cas, un bool = un octet de stockage
--> c'est d'ailleurs ce principe qui est employé pour l'affectation des E/S (que tu ne peux pas déclarer en EBOOL).
par contre si le mot est lui même déclaré, tu vas avoir des avertissements de chevauchement de variable (sans autres conséquences ; tu peux réduire au silence ces avertissements via une option mais ça peut être utile dans d'autres cas que celui-ci ...)
il faut faire un choix, soit tu détailles au niveau du bit, soit tu restes au niveau du mot.
ce n'est pas une bonne pratique de donner une adresse à une variable (donc de la localiser en mémoire) sauf si c'est une variable de communication (avec un IHM par ex).
il faut laisser le compilateur faire son affectation en interne (qui ne sera pas dans l'espace des %MW qui sont limités en quantité)
sous unity il faut oublier tes habitudes de pl7 ...
![M. Vert :mrgreen:](./images/smilies/icon_mrgreen.gif)
@+
Re: Array of bool
oui effectivement je localise le moins possible, c'est tout l’intérêt de Unity, mais comme tu l'as deviner ces variables servent a la communication avec un IHM type xbtf et donc obligation d' avoir des variables localisées, pas de possibilités de créer un fichier de variables de lien comme sur un xbgt sous vijeo!!...Et désactiver la détection de chevauchement de variables m'ennuie, c'est bien utile, mais je n'aime pas non plus voir un programme bourré d'avertissements lol
Je vois donc qu'il n'y a pas de solution miracle comme je l'espérai
Merci pour ton aide
Je vois donc qu'il n'y a pas de solution miracle comme je l'espérai
Merci pour ton aide