# Fiche méthode détaillée : Microcontrôleurs - Concepts avancés
## 1. Instructions assembleur : CALL vs GOTO
### CALL
- Utilisé pour appeler une sous-routine
- Sauvegarde l'adresse de retour sur la pile
- Permet le retour avec l'instruction RETURN
### GOTO
- Saut inconditionnel à une adresse spécifique
- Ne sauvegarde pas l'adresse de retour
- Utilisé pour les boucles ou les sauts simples
### Différences principales
1. Gestion de la pile : CALL utilise la pile, GOTO non
2. Retour : CALL permet un retour automatique, GOTO nécessite un saut explicite
## 2. Polling vs Interruptions
### Polling
- Vérification périodique d'un événement
- Utilise des ressources CPU même quand rien ne se passe
- Simple à implémenter
- Peut introduire des latences
### Interruptions
- Réaction immédiate à un événement
- Économise les ressources CPU quand rien ne se passe
- Nécessite une configuration plus complexe
- Réponse rapide aux événements
### Comparaison
- Efficacité : Les interruptions sont généralement plus efficaces pour les événements peu fréquents
- Complexité : Le polling est plus simple à mettre en œuvre
- Temps de réponse : Les interruptions offrent un meilleur temps de réponse
## 3. Registre STATUS
- Contient des drapeaux (flags) indiquant l'état du microcontrôleur
- Flags typiques :
- Z (Zero) : Résultat d'une opération est zéro
- C (Carry) : Dépassement pour les opérations non signées
- N (Negative) : Résultat négatif
- OV (Overflow) : Dépassement pour les opérations signées
### Utilisation
- Prise de décision conditionnelle
- Détection d'erreurs ou de conditions spécifiques
## 4. Assembleur inline
- Insertion de code assembleur directement dans du code C
- Permet d'optimiser des parties critiques du code
- Syntaxe dépendante du compilateur
### Exemple (GCC)
```c
int a = 10, b = 5, result;
asm ("movl %1, %%eax\n\t"
"addl %2, %%eax\n\t"
"movl %%eax, %0"
: "=r" (result)
: "r" (a), "r" (b)
: "%eax");
```
## 5. Priorités d'interruption (PIC18F)
### Scénario nécessitant des priorités
- Système de contrôle industriel avec :
1. Alarme de sécurité critique (haute priorité)
2. Contrôle de processus normal (basse priorité)
La priorité haute permet de traiter immédiatement l'alarme de sécurité, même si une interruption de contrôle normal est en cours.
## 6. Vecteurs de reset et d'interruption
### Vecteur de reset
- Adresse où le programme commence après un reset
- Utilisé lors de la mise sous tension ou d'un reset matériel
### Vecteurs d'interruption
- Adresses où le programme saute lors d'une interruption
- Chaque source d'interruption peut avoir son propre vecteur
### Utilisation
- Reset : Initialisation du système
- Interruption : Gestion d'événements asynchrones
## 7. Interruptions internes et externes
### Interruption interne
- Exemple : Timer overflow
- Cas d'usage : Génération précise de délais, échantillonnage périodique
### Interruption externe
- Exemple : Changement d'état sur une broche d'E/S
- Cas d'usage : Détection d'un bouton pressé, réception de données série
## 8. Analyse de schéma bloc (ATMega)
### Composants clés
- CPU core
- Mémoires (Flash, SRAM, EEPROM)
- Périphériques (Timers, USART, ADC)
- Bus de données et d'adresses
### Points importants
- Architecture Harvard (bus de données et d'instructions séparés)
- Périphériques connectés au bus de données pour communication avec CPU et mémoires
- Timers & Counters pour mesure de temps et comptage d'événements
## 9. Programmation assembleur PIC18F
### Exemple : Allumer une LED avec un bouton poussoir
```assembly
ORG 0x10
START
; Configuration des ports
CLRF TRISB ; PORTB en sortie (LED)
BSF TRISD, 0 ; RD0 en entrée (bouton)
LOOP
BTFSS PORTD, 0 ; Teste si le bouton est pressé
GOTO LED_OFF ; Si non pressé, éteindre la LED
BSF PORTB, 0 ; Allumer la LED
GOTO LOOP
LED_OFF
BCF PORTB, 0 ; Éteindre la LED
GOTO LOOP
```
## 10. Timing et exécution d'instructions
### Cycle d'instruction typique
1. Fetch : Chercher l'instruction en mémoire
2. Decode : Décoder l'instruction
3. Execute : Exécuter l'instruction
4. Write-back : Écrire le résultat si nécessaire
### Exemple de chronogramme
```
Temps | 0 | 1 | 2 | 3 | 4 | 5 |
-------|------|------|------|------|------|------|
Instr1 | Fetch| Decode| Exec | Write| | |
Instr2 | | Fetch| Decode| Exec | Write| |
Instr3 | | | Fetch| Decode| Exec | Write|
```
Ce chronogramme montre le pipeline d'exécution des instructions, où plusieurs instructions sont à différentes étapes de leur cycle d'exécution en même temps.
## Conseils pour l'examen
1. Pratiquez l'analyse de schémas blocs pour comprendre rapidement l'architecture d'un microcontrôleur.
2. Exercez-vous à écrire et analyser du code assembleur, en particulier pour les opérations courantes comme la gestion des E/S.
3. Comprenez bien les différences entre les techniques comme le polling et les interruptions, et quand utiliser chacune.
4. Familiarisez-vous avec les registres spéciaux comme STATUS et leur rôle dans le contrôle du microcontrôleur.
5. Pour les questions de timing, dessinez des chronogrammes pour visualiser l'exécution des instructions.
N'hésitez pas à me poser des questions sur des points spécifiques que vous souhaiteriez approfondir !
