Bonjour
En fait, quand tu écris digitalWrite(pinLed1, HIGH); dans ton programme en C, c'est toi qui dois avoir défini la valeur de pinLed1 pour pouvoir commander la sortie sur laquelle tu as branché la led. Cette valeur est transcrite par la bibliothèque logicielle Arduino pour adresser le bit d'un port matériel, la position du bit et l'adresse du port étant donnés dans un fichier de définition (.h) correspondant au modèle d'Arduino sélectionné au moment de la compilation.
Reprenons du début.
L'adressage est un terme général qui désigne la sélection d'un élément particulier du système dans le but de l'impliquer dans une opération. L'adressage peut être réalisé de nombreuses façons :
• Un élément peut être adressé de façon implicite. Il n'a pas d'adresse à proprement parler, sa sélection étant déterminée du seul fait de l'opération effectuée. Matériellement, cette sélection est réalisée par l'application d'un signal logique direct sur le circuit électronique.
Par exemple, sur un ATmega, l'instruction machine CLI (ou cli() en langage C) adresse de façon implicite le bit I du registre d'état SREG pour le remettre à zéro afin d'interdire la prise en compte des interruptions matérielles.
• Un élément peut faire partie d'un ensemble dans lequel il est désigné par un numéro d'ordre. L'ensemble auquel il appartient est un espace d'adressage, et son numéro d'ordre est son adresse dans cet espace.
Tous les éléments d'un système n'appartiennent pas forcément au même espace d'adressage, et un élément peut appartenir à plusieurs espaces d'adressage en même temps.
Par exemple, sur un ATmega, on trouve un espace d'adressage pour la mémoire programme (Flash), un autre pour la mémoire EEPROM, et un autre dans lequel sont regroupés les registres de travail, les registres d'entrée-sortie et la mémoire vive (SRAM). Ces espaces sont totalement indépendants les uns des autres.
Mais les registres d'entrée-sortie appartiennent également à un espace d'adressage particulier utilisé par certaines opérations. Le registre PORTD de l'ATmega328P (qui contrôle l'état des broches 0 à 7 de l'Arduino Uno/Nano/Pro/Mini) a pour adresse 0x2B dans l'espace d'adressage partagé avec la SRAM et utilisé notamment par les instructions machine STx et LDx, et il a pour adresse 0x0B dans l'espace d'adressage utilisé par les instructions machine OUT, IN, SBIx et CBI.
C'est le type d'opération qui détermine quel espace d'adressage est concerné, et ce sont les paramètres de cette opération qui déterminent l'adresse de l'élément impliqué, au moyen d'un mode d'adressage (un calcul d'adresse réalisé à partir de ces paramètres) qui peut être assez variable (immédiat, direct, indirect, indexé, etc.). Je ne développerai pas plus cette partie, car on trouve de nombreux articles détaillés sur le net à ce sujet, par exemple ici.
• Il existe d'autres façons de sélectionner un élément, plus complexes ou mettant en œuvre des moyens moins classiques, comme par exemple au travers d'un adressage par le contenu. Mais cela ne présente pas d'intérêt dans cette discussion si tu te limites aux micro-contrôleurs et aux systèmes numériques traditionnels.
Le développeur du programme doit donc accéder à l'élément qu'il souhaite manipuler :
- soit en utilisant son adresse matérielle dans l'espace d'adressage déterminé par le type d'opération (d'instruction machine) réalisée,
- soit en utilisant sa désignation logique, déterminée par une définition et/ou un mécanisme logiciel fournis par le langage de programmation ou par une bibliothèque logicielle prévue à cet effet.
-----