Bonjour,
j'ai une question:
"dans un microcontroleur, quel est le seul registre qui contient obligatoirement à la mise sous tension la valeur 0? A quoi sert-il?"
Merci par avance
-----
Bonjour,
j'ai une question:
"dans un microcontroleur, quel est le seul registre qui contient obligatoirement à la mise sous tension la valeur 0? A quoi sert-il?"
Merci par avance
Pour répondre à cette question il suffit de consulter les informations "état au reset" de la datasheet du µC concerné.
Bonjour Aurelien et bienvenue chez Futura Sciences,
Comme dit antek il suffit juste de consulter la datasheet du microcontrôleur, peu importe le fabricant.
Exemple au hasard PIC18F4550
https://ww1.microchip.com/downloads/...doc/39632c.pdf
Va directement à la page 51 du document (ou à la page 53 de ton navigateur) et regarde TABLE 4-4: INITIALIZATION CONDITIONS FOR ALL REGISTERS, tu verras l'état des registres à la mise sous tension ou après un reset, ou après un redémarrage après une sous tension etc... Tu noteras qu'il y en a beaucoup qui sont remis entièrement à 0 lors de la mise sous tension.
Là où il n'y a pas de solution, il n'y a pas de problème.
Bonjour,
Je pense que la question porte plutôt sur quel registre doit être à zéro pour que le MCU puisse démarrer. Que les sorties soient configurées en sorties au lieu d'entrée, que l'ADC soit bizarrement configuré, etc, peut être gênant et poser des soucis électriques,
mais c'est finalement assez dérisoire face au fait que la première instruction exécutée par le MCU soit choisie aléatoirement dans le programme...
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.
Il n'y a rien d'aléatoire à la mise sous tension dans un uC.
Je ne comprends pas ta phrase Antoane.
> Il n'y a rien d'aléatoire à la mise sous tension dans un uC.
Certes.
Si le registre décidant de l'état des sorties était initialisé de manière aléatoire, ce serait galère à gérer, mais pas impossible (utilisation d'interfaces à "relativement" haute impédance par exemple). De même pour le registre contrôlant l'ADC, de même pour le cache data, etc.
En revanche, si l'Instruction register était initialisé de manière aléatoire, i.e. si le MCU commençait par une instruction quelconque du programme, ce serait ingérable. Il est donc fondamental que l'Instruction register soit correctement initialisé.
C'est, je pense, ce que veux dire le sujet du TD lorsqu'il parle du "seul registre qui contient obligatoirement à la mise sous tension la valeur 0".
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.
Ahhhhh j'avais pas compris la question initiale mais oui tu as raison ça semble bien être sa question.
Alors il parle du "program counter"
Là où il n'y a pas de solution, il n'y a pas de problème.
Bonsoir
Il faut se méfier. Un reset ne met pas forcément le PC à zéro sur toutes les plateformes.
Par exemple, sur les micro-contrôleurs ATmega, au démarrage le PC peut être chargé avec une adresse proche de la fin de la mémoire programme (Flash), soit parce que le programme doit commencer son exécution dans la section de mémoire Boot Loader (bit BOOTRST=0), soit parce que la table des vecteurs (qui contient du code exécutable, généralement des instructions de saut) est placée à cet endroit (bit IVSEL=1).
Bonsoir,
Sur les 6800 6809 (ça ne nous rajeunit pas) le reset charge le vecteur FFFE-FFFF qui indique où démarrer le programme.
Seuls les faucons volent. Les vrais restent au sol.
Effectivement, zéro ou autre, il importe que le vecteur soit certain, et non aléatoire
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.
Bonsoir
ceci dit il existe des µC où certains registres voire certaines fonctions démarrent de façon aléatoire et non prévue, cela fait l'objet des errata qu'il faut toujours lire!
J'ai le souvenir de trucs assez surprenants.
JR
l'électronique c'est pas du vaudou!
Sur les pics les "general purpose register" ne sont pas initialisés.
Contrairement aux registres spécialisés.
A la mise sous tension, ils sont donc dans une position aléatoire.
Lors d'un reset à chaud , ils conservent leur valeur.
A l'écriture d'un prog en asm ou en C, on doit impérativement initialiser toutes les variables utilisées !