introduction 2008-2009 (v0.1) - hackbbs
TRANSCRIPT
Plan du cours IEMIntroduction à l'informatique embarquée
Software dans les systèmes embarqués, OS embarqués, aspects liés au design d'applications embarquées, complément de programmation système en Cpp q , p p g y
Outils de développement croisé (crossOutils de développement croisé (cross--developmentdevelopment))Architecture hôte/cible, chaines d'outils, environnement de développement, script Architecture hôte/cible, chaines d'outils, environnement de développement, script de compilation, émulation et de compilation, émulation et virtualisationvirtualisation, systèmes de fichiers racine (, systèmes de fichiers racine (rootfsrootfs))
Programmation sur ARMProgrammation sur ARMModèle du programmeur, jeu d'instructions, langage d'assemblage, traduction de Modèle du programmeur, jeu d'instructions, langage d'assemblage, traduction de structures C en assembleurstructures C en assembleur
Gestion des interruptions et routines de services (Gestion des interruptions et routines de services (InterruptInterrupt Service RoutineService Routine))Gestion des interruptions et routines de services (Gestion des interruptions et routines de services (InterruptInterrupt Service RoutineService Routine))Gestion des registres et modes IRQ, microprogramme, structure d'une ISR, Gestion des registres et modes IRQ, microprogramme, structure d'une ISR, caractéristiques d'un contrôleur d'interruptioncaractéristiques d'un contrôleur d'interruption
Gestion mémoire et accès DMAGestion mémoire et accès DMA
Introduction - DRE/REDS 2
Introduction à l'informatique embarquée
Software dans les systèmes embarqués
OS embarqués
Aspects liés au design d'applications embarquées
Complément de programmation système en C
3Introduction - DRE/REDS
Software dans les systèmes embarqués
Introduction - DRE/REDS 4
Informatique embarquée
Les contraintes liées à l’informatique embarquée:
contrainte de taille mémoirecontrainte de taille mémoire
contrainte de temps de réponse
contrainte de fiabilité
contrainte de sécurité
contrainte de ressource d'énergie/autonomie
contrainte d'architecture matérielle
contrainte de prix de développement (pur et licences)
contrainte de prix de vente (amortissement et royalties)
contraintes... juridiques !
Introduction - DRE/REDS 5
Au début…
Software de très bas niveauMiMicroprogramme
Séquence de bootstrap (code d’amorçage)
Firmware en EEPROM, résident ou non
Moniteur, BIOSConfigurations initiales
Autodétection du matériel (recensement)
Démarrage de l’applicationStandalone
OS
Introduction - DRE/REDS 6
Séquence de boot
Après le RESET, la table des vecteurs d'interruption doit être initialisée.Le code de RESET (vecteur RESET) est alors exécuté…
Ce qui suit dépendra fortement du processeur/microcontrôleur
Introduction - DRE/REDS 7
Bootstrap
…A ce moment, les clocks et I/Os ont leur configuration par défautdéfaut.Récupération du code de boostrap au niveau Flash, RAM, TCP/IP, etc.TCP/IP, etc.Validation/authentificationConfigurations initialesDonner le relais à l’application
Application
MoniteurMoniteur
OS/RTOS
Introduction - DRE/REDS 8
Moniteurs/BootloadersMoniteurs ou bootloaders ou chargeurs d'amorçage ou moniteur de boot…pour l'embarqué
U-boot
Micromonitor
RedBoot
YAMON
LinuxBIOS
Lilo
Grub
…
Introduction - DRE/REDS 9
Langages de programmation
Assembleur
Langage de programmation très proche duprocesseur
St t d i lStructures de programme simples
Forte dépendance au matériel ( i t ôl /DSP)(microcontrôleur/DSP)
Peu d’abstraction au niveau du codageDifficile à coder
Performance élevéeNécessite le minimum de place mémoireC d filé i t d té i lCode profilé au mieux pour un type de matériel
Introduction - DRE/REDS 10
Langages de haut niveau
Langage C
Structures de programmation de haut niveau(boucles for<>, while<>, tests conditionnels, types et structures, etc.), )
Largement répandu dans l’industrie
T è h d b i ( bl )Très proche du bas niveau (assembleur)Accès aux adresses mémoire (pointeurs)
Risques élevés de bugs et absence de portabilitéRisques élevés de bugs et absence de portabilité
StandardsANSI/ISO/IEC 9899:1999 connu sous le nom de C99ANSI/ISO/IEC 9899:1999, connu sous le nom de C99
Introduction - DRE/REDS 11
Langages à objetsLe paradigme de programmation orienté-objet (OO) permet de modéliser une application à un haut niveau d'abstraction.
Notion de réutilisabilité et de portage
Langage C++
Extension du C pour le support de l’OOExtension du C pour le support de l OO
Très utilisé dans l’industrie, surtout avec les interfaces graphiques (GUI)
Langage Java
De plus en plus considéré dans l’embarquéEnormément de composants réutilisables dans le domaine des protocoles (telco,
lti di )multimedia, …)
A beaucoup évolué grâce à Internet et aux télécommunications
Introduction - DRE/REDS 12
Approche en Co-design
Une partie tourne en software, une partie en hardwareen hardware
La répartition soft/hard dépendra du partitionnement de l’application.
Space Codesign
Gestion automatique du partitionnement
Introduction - DRE/REDS 13
OS embarqués
Introduction - DRE/REDS 14
Systèmes d’exploitation
Pourquoi un OS dans l’embarqué?
Gestion de la complexité d’une application au travers de facilités (ou services)
Abstraction de la complexité logicielle
Accès optimisé aux ressources externes viapdes I/Os
Abstraction de la complexité matérielle
Introduction - DRE/REDS 15
Architectures OSUn OS doit garantir la protection des applications (code+données)
Plusieurs modes d'exécution
Utilisation d'une MMU (Memory Management Unit)
Introduction - DRE/REDS 16
Architecture monolithique Architecture micronoyau
OS embarquésMicrosoft
Windo s Embedded CEWindows Embedded CENoyau et composants légers(taille image: ~300ko !)Peut supporter du temps réel strictPeut supporter du temps-réel strictSeules les fonctionnalités nécessairessont présentes=> Windows Mobile> Windows Mobile
Fonctionnalités pour téléphones mobiles
Windows XP EmbeddedNoyau très semblable à XP (NT)Beaucoup de drivers Développement facileNécessite plus de place
Introduction - DRE/REDS 17
Windows CE
Introduction - DRE/REDS 18
Windows Embedded (CE)
WinCE 5.0
32 Mo d'adresses (virtuelles) par processus
WinCE 6.0
4 Go d'adresses (virtuelles) par processus (1 Go par processus utilisateur)
Introduction - DRE/REDS 19
Embedded LinuxPourquoi utiliser Linux dans les systèmes embarqués?
Coûts des licences (attention! libre ne signifie pas gratuit!)
Pas de royalties
Accès au code source
Aspects liés à la familiarité de l’OS (Linux est largement répandu)
Degré de maturité des applications et utilitaires en constante augmentation grâce à une large communauté de développeurs
Introduction - DRE/REDS 20Source: Venture Development Corporation 2008
Embedded Linux
“Which OSes have been in your (company's) embedded designs during the past two years?”
http://www.linuxdevices.com/articles/AT7065740528.htmlhttp://www.linuxdevices.com/articles/AT7065740528.html
Introduction - DRE/REDS 21
Quelques caractéristiques
Faible empreinte mémoire par rapport aux capacitésEfficace optimisé performances élevéesEfficace, optimisé, performances élevéesBeaucoup d’applications dans l’espace utilisateur (support Java notamment)Modulaire, paramétrable très finementEnorme support matériel, portabilitéOrdonnancement O(1), préemptibleBeaucoup d'outils disponibles, de librairiesDéveloppement userfriendly (hôte/cible)Support TCP/IP (serveurs !), bluetooth, multimédia,...
Introduction - DRE/REDS 22
Linux partout…Pour lancer des missiles
http://www.linuxdevices.com/news/NS4667725014.html
Dans les télés Sonyhttp://www.sony.net/Products/Linux
http://products.sel.sony.com/opensource/source tv.shtmlhttp://products.sel.sony.com/opensource/source_tv.shtml
Des robots maison ou prohttp://www.linuxrobots.org
http://www aldebaran robotics com/http://www.aldebaran-robotics.com/
Pour traire les vacheshttp://www.linuxdevices.com/news/NS4275702675.html
http://www.linuxdevices.com/news/NS5430405302.html
Pour faire des crèmes glacéeshttp://www.generation-nt.com/linux-open-source-actualite-13082.html
Introduction - DRE/REDS 23
Source: "Embedded Linux -Petite introduction pour conférence sommaire"-- PARINUX – Gilles BLANC, [email protected]
Embedded LinuxSolutions propriétaires basées sur Linux
Mobilinux (MontaVista Software)
LynuxWorks/BlueCat
Sysgo/ElinOS,
STMicroelectronics/STLinux 2.0
Koan Software/KaeilOS
…
S l ti libSolutions libresucLinux (devenu obsolète, la branche principale supporte ~75 architectures CPU/microcontrôleurs, avec ou sans MMU)
OpenEmbeddedOpenEmbeddedLa distribution Linux pour l'embarquéCustomisableTrès répandu
Projets annexes (userland)
http://www.linux-foundation.org
Projets annexes (userland)Busybox, uClibc, etc.
Introduction - DRE/REDS 24
SymbianOSOS propriétaire (Symbian) spécifique pour les téléphones mobiles
Symbian est détenu par Nokia (47.9%), Ericsson (15.6%), Sony Ericsson (13.1%), Panasonic (10.5%), Siemens AG (8.4%) and Samsung (4.5%)
SymbianOS
Adopté par les fabricants de portables de seconde (GSM)p p p ( )et troisième génération (UMTS)
API spécifique pour la communication voix et données
Mi t t l lti th d t l t é lMicro-noyau supportant le multi-thread et le temps-réelstrict
Introduction - DRE/REDS 25
Autres OS embarqués
Embarqués
A/ROSE
Téléphones portables
iPhone OS (basé sur OS X)
polyBSD (embedded NetBSD)
ROM-DOS
MINIX 3
Palm OS
Openmoko Linux
Internet Tablet OS
T2 SDE
.NET Micro Framework
OS/RT
Open AT OS
BlackBerry OS
Android (basé sur Linux, développé par Google et Open Handset Alliance)
…Open AT OS
…
Music Players
Routeurs, gateways
CatOS (Cisco Systems)
Cisco IOSipodlinux
Pixo
RockBox
Cisco IOS
Inferno (Bell Labs)
IOS-XR
CyROS…
Introduction - DRE/REDS 26
JunOS (Juniper Networks)
…
Et les RTOS !...
Jusqu'à maintenant, nous avons vu des OS embarqués qui ne sont pas fait spécifiquement pour le support d'applications critiques (temps-réel dur/strict)
Ces OS supportent le temps-réel mou/souple (ou pas de temps-réel du tout)
Embarqué ⇒ temps-réel
Temps réel ⇒ embarquéTemps-réel ⇒ embarqué
Caractéristiques d'un RTOSPermet le support d'applications temps-réel, donc d'applications nécessitant le déterminisme(temporel/logique) et la fiabilité
Simplicité du noyau (taille ~10Ko)
Ordonnancement robuste des tâchesOrdonnancement robuste des tâches
Objets de communications et de synchronisation prévus pour de telles applicationsTimeoutLatence minimale (interruptions & ordonnancement)
Introduction - DRE/REDS 27
Standards dans les RTOSLes RTOS peuvent être conformes à des standards rigoureuxLa norme POSIX est la référence en la matière
POSIX est issue du monde UNIX.
La norme POSIX 1003.1b couvre les aspects standardisation des i t f t d i l li ti t é l Ilinterfaces et des services pour les applications temps-réel. Il y en ad'autres (1003.1d, 1003.1j), mais ne sont pas utilisées.
D'autres standards
OSEK/VDX (Automobile)
ARINC 653 (Aérona tiq e)ARINC 653 (Aéronautique)
Java RTS
……
Introduction - DRE/REDS 28
Posix 1003.1bLes fonctionnalités suivantes sont spécifiées dans POSIX 1003.1b:
Timers: periodic timers, delivery is accomplished using POSIX signals
Priority scheduling: fixed priority preemptive scheduling with aPriority scheduling: fixed priority preemptive scheduling with aminimum of 32 priority levels
Real-time signals: additional signals with multiple levels of priority
Semaphores: named and memory counting semaphores
Memory queues: message passing using named queues
Shared memory: named memory regions shared between multipleShared memory: named memory regions shared between multipleprocesses
Memory locking: functions to prevent virtual memory swapping of physical memory pagesphysical memory pages
Introduction - DRE/REDS 29
Exemplevoid timer_create(int num_secs, int num_nsecs) {
struct sigaction sa;struct sigevent sig_spec;
Création du timerconforme à POSIX 1003 1b
g g_ psigset_t allsigs;struct itimerspec tmr_setting;timer_t timer_h;
/* setup signal to respond to timer */sigemptyset(&sa.sa_mask);sa.sa_flags = SA_SIGINFO;1003.1b
Implémentation de tâches périodiques
sa.sa_sigaction = timer_intr;
if (sigaction(SIGRTMIN, &sa, NULL) < 0)perror("sigaction");
sig_spec.sigev_notify = SIGEV_SIGNAL;sig_spec.sigev_signo = SIGRTMIN;
Cette manière de faire n'est pas forcément optimale
/* create timer, which uses the REALTIME clock */if (timer_create(CLOCK_REALTIME, &sig_spec, &timer_h) < 0)perror("timer create");
/* set the initial expiration and frequency of timer */tmr_setting.it_value.tv_sec = 1;tmr setting it al e t nsec 0
Appel de la fonction timer_intr à chaque activation ⇒ Quelles
tmr_setting.it_value.tv_nsec = 0;tmr_setting.it_interval.tv_sec = num_secs;tmr_setting.it_interval.tv_sec = num_nsecs;if ( timer_settime(timer_h, 0, &tmr_setting,NULL) < 0) perror("settimer");
/* wait for signals */sigemptyset(&allsigs);activation ⇒ Quelles
conséquences sur les performances??
sigemptyset(&allsigs);while (1) {sigsuspend(&allsigs);
}}
/* routine that is called when timer expires */void timer intr(int sig siginfo t *extra void *cruft)
Introduction - DRE/REDS 30
void timer_intr(int sig, siginfo_t extra, void cruft){
/* perform periodic processing and then exit */}
Exemples de noyaux RTOSRTOS (noyau/micronoyau)
VxWorks (WindRiver)
WinCE
QNX
RTOS-32
OS-9
ThreadXThreadX
LinuxWorks
PikeOS (SysGO)
iRMX (tenAsys)
RTEMS
FreeRTOS
(OpenQNX)
Cohabitation de domaines RTOS et non-RTOSRTX
VxWinVxWin
RTAI
Xenomai
…Introduction - DRE/REDS 31
VxWorksProtection des espaces d'adressage grâce à l'utilisation de la MMU
RTP: Real-Time Process
Présence espace user/kernel
NoyauNoyauOrdonnancement préemptif + RR
256 niveaux de priorité
Nombre illimité de tâches
Tâches périodiques gérées par une routine associée à un timer périodique et des sémaphores binaireset des sémaphores binairesIDE basé sur IBM/Eclipse (Java)Utilisé par la NASA et beaucoup d'i d t i (d i ti l édi ld'industries (domaine spatial, médical,automation)
Introduction - DRE/REDS 32
QNXMicronoyau (très peu de fonctionnalités dans l'espace noyau, un maximum dansy ,l'espace utilisateur)
Micronoyau: CPU scheduling, interprocess communication, interrupt redirection and timersed ect o a d t e s
Si un pilote échoue, ou n'importe quelle autre application, le noyau est préservé.
Ult id d l t tiUltra-rapide dans la commutationde tâchesContient un framework graphique (Photon microGUI)Très bon support pour le multicore (SMP)Devenu open source depuis fin 20072007
http://www.openqnx.comIntroduction - DRE/REDS 33
RTOS-32
Basé sur un sous-ensemble de l'API Win32 de WindowsNoyau
Empreinte mémoire de 16 Ko
Protection mémoire via MMU
Peut charger des .DLL de WindowsPas de royaltiesyIDE de type Borland, Visual Studio
RTTarget-32-Bootstrap
RTKernel-32-Ordonnanceur
RTFiles-32-Systèmes de fichiers
RTIP-32-Communication
RPEG-32-Portablep
-Librairie de runtime-Drivers-Compression-Sys. fichier RAM
-Sémaphores-Boîtes aux lettres-Communication synchrone
ydisque dur/disquette-Allocation contigüe-Requêtes multiples
-Stack TCP/IP Embedded GUI
Introduction - DRE/REDS 34
Choix d'un OS
Comment choisir un OS?
Introduction - DRE/REDS 35
Tout dans le BSP …
Board Support Package
S é ifi à OS hit t b dSpécifique à un OS, une architecture, une board
Les BSP comprend:
La (les) toolchain(s)La (les) toolchain(s)Utile pour construire des applications sur une machine hôte
Le bootloaderUtile pour initialiser la carte et démarrer l'OS (ou sans OS, l'applicationUtile pour initialiser la carte et démarrer l OS (ou sans OS, l applicationembarquée)
Le noyau (OS)Paramétrable à souhait…Possibilité de le cross-compiler
Le système de fichier racine (rootfs)Busybox (shell + applications utilisateur de base)LibrairiesFichiers de configuration
Introduction - DRE/REDS 36
Aspects liés au design d'applications embarquéesembarquées
Introduction - DRE/REDS 37
Besoins en modélisationLe développement de systèmes embarqués nécessite des compétences pluridisciplinaires.
Besoin de communiquer clairement les spécifications du système
Besoin d'exprimer clairement les contraintes (fonctionnelles,temporelles, environnementales) du système
Le coût de développement peut être élevé.pp pBesoin d'anticiper les problèmes et d'appréhender les limites du système
Les risques de dysfonctionnement peuvent entraîner des conséquences catastrophiques.
Besoin d'assurer le comportement du systèmeBesoin d assurer le comportement du système
Introduction - DRE/REDS 38
Modélisation formelleLangages de description de matériel
Supportent les concepts spécifiques matériels
VHDL, Verilog
Langages de description des architectures
Définition formelle de l'architecture de haut niveau d'un système complexeDéfinition formelle de l'architecture de haut niveau d'un système complexe
SystemC ,SpecC, SysML
Langages orientés objet
Description des systèmes complexes à un très haut niveau d'abstraction par sa décomposition en sous-systèmes
UML, Realtime UML
Langages pour la modélisation des systèmes temps réel
Approches synchrones: Lustre, Esterel, Signal
Approches asynchrones: SDL Realtime UMLApproches asynchrones: SDL, Realtime UML
Introduction - DRE/REDS 39
EsterelUn programme Esterel est un automate hiérarchique et parallèle qui attend des signaux, réagit à un stimulus composé de signaux en changeant d'état et en produisant de nouveaux signauxchangeant d état et en produisant de nouveaux signaux.
Notion de base: signalUn signal est présent/absent.Hypothèse : temps de réaction nul !Un signal émis ou reçu est visible pendant toute la réaction du programme
Origine : INRIA (Sophia Antipolis)Distribution commerciale :
Esterel Studio - Esterel TechnologieEsterel Studio - Esterel Technologie
Utilisations industrielles :
Dassault Aviation
Introduction - DRE/REDS 40
SDLSpecification and Description LanguageCe langage est issu du domaine des télécommunications (ITU-T)
Description de processus asynchrones
Spécification de protocoles
Difficile d'exprimer les contraintes temporelles
Notion de système, blocs et processus
Communication par signaux via des canauxCommunication par signaux via des canaux
Introduction - DRE/REDS 41
UMLLangage de modélisation d'applications orienté-objet (OO)
Dimensions fonctionnelles, statiques, dynamiques
Différentes classes de diagrammes
La modélisation temps-réel nécessite une extension d'UMLUML-RT RT-UML MARTE ACCORDUML-RT, RT-UML, MARTE, ACCORD
Extension de la notation pour l'expression de contraintes temporelles
E i t l i i lEnvironnements logicielsRational Rose (UML-RT)
Rhapsody (RT-UML)
Introduction - DRE/REDS 42
ACCORD/UML
Introduction - DRE/REDS 43
Rapid Prototyping
Développement d'une application au moyen d'un environnement intégrémoyen d un environnement intégrécomplet.
M déli ti t d' til hiModélisation au travers d'outils graphiques
Simulation du systèmey
Génération de code automatique pour des architectures ciblesarchitectures cibles
Déploiement et mise au point
Introduction - DRE/REDS 44
Simulink & Realtime Workshop
Modélisation et simulation de systèmes dynamiques embarqués
Temps discret et continu
Algorithmes SimulinkModel.mdl
Simulink
Fonctions complexes dédiées au traitement des signaux
Vaste choix de composants graphiques
Real Time Workshop Build
TCL program:model.rtw
Real-Time Workshop
p g p qGénération automatique de code pour des cibles RTOS génériques (ou spécifiques)
Target Language Compiler
TCL program:
- System Target Files- Block Target Files
- Inlined S-function target files- Target Language Compiler
function library model.c
Make
model.exe
Run-time interface support files
model.mk
Cible
Introduction - DRE/REDS 45
Exemple…
/* Subrate 2 task */void tSubRate_2(void * cookie){int status;unsigned long overrun;while (1) {/* Set model inputs associated to subrate
here */slbenchmodel_step2();status = rt_task_wait_period(&overrun);if (status)
i tf ("E t t k it i d !\ ")printf ("Error rt_task_wait_period !\n");if (overrun) {printf("Rate for SubRate 2 too fast.\n");cleanExit(0);
}
/* Write model outputs associated to subrate here */here */}
}
/* Subrate 3 task */void tSubRate_3(void * cookie){int status;int status;unsigned long overrun;while (1) {/* Set model inputs associated to subrate
here */slbenchmodel_step3();status = rt_task_wait_period(&overrun);if (status)if (status)printf ("Error rt_task_wait_period !\n");
if (overrun) {printf("Rate for SubRate 3 too fast.\n");cleanExit(0);
}
/* Write model outputs associated to subrate
Introduction - DRE/REDS 46
phere */}
}
…
Complément de programmation systèmeComplément de programmation systèmeen C
Introduction - DRE/REDS 47
Programmation C - Types / Taille
Type de donnée Signification Taille Plage de valeurs acceptéeh C è 8 bi / 1 b 128 à 127char Caractère 8 bits / 1 byte -128 à 127
unsigned char Caractère non signé 8 bits / 1 byte 0 à 255
short int Entier court 16 bits / 2 bytes 32 768 à 32 767short int Entier court y -32 768 à 32 767
unsigned short int Entier court non signé
16 bits / 2 bytes 0 à 65 535
int Entier 32 bits / 4 bytes -2 147 483 648 à 2 147 483 647int Entier 32 bits / 4 bytes 2 147 483 648 à 2 147 483 647unsigned int Entier non signé 32 bits / 4 bytes 0 à 4 294 967 295long int Entier long 32 bits / 4 bytes -2 147 483 648 à 2 147 483 647
unsigned long int Entier long non 32 bits / 4 bytes 0 à 4 294 967 295unsigned long int signé 32 bits / 4 bytes 0 à 4 294 967 295
float Flottant (réel) 32 bits / 4 bytes 3.4*10-38 à 3.4*1038
double Flottant double 64 bits / 8 bytes 1.7*10-308 à 1.7*10308
48Introduction - DRE/REDS 48
Compléments de prog. sys. en C (1/4)
Pointeurs
int var; déclaration d’une variable (réservation mémoire)
int *pvar; déclaration d’un pointeur (réservation mémoire)
pvar = &var; écrit l’adresse de la variable dans le pointeur
*pvar = 3; écrit la valeur 3 dans la variable (déréférenciation)
Introduction - DRE/REDS 49
Compléments de prog. sys. en C (2/4)
int var;int *pvar;
/* accès à la variable par valeur */var = 15;
printf ("valeur %d\n", var) ; /* valeur 15 */
/* accès à la variable par pointeur/référence */pvar = &var;*pvar = 30;
printf ("valeur %d\n", var) ; /* valeur 30 */
Introduction - DRE/REDS 50
Compléments de prog. sys. en C (3/4)
Accès aux adresses physiques (sans MMU) ou virtuelles (avec MMU)
0 20AF630 d h i / i t ll d i t UT CONT0x20AF630 adresse physique/virtuelle du registre UT_CONT
#define UT CONT *(unsigned int*) 0x20AF630#define UT_CONT (unsigned int ) 0x20AF630
⇒ (unsigned int*) opération de cast (pointeur sur adresse physique/virtuelle)
UT_CONT = 0x12345678;
⇒ écrit la valeur 0x12345678 dans le registre UT_CONT
var = UT_CONT;
⇒ lit le contenu du registre UT_CONT et l'écrit dans var
Introduction - DRE/REDS 51
Compléments de prog. sys. en C (4/4)
/* Accès aux bits d’un registre */
#define UT CONT *(unsigned int*) 0x020AF630#define UT_CONT *(unsigned int*) 0x020AF630#define UT_IO2 0x00000002 /* masque du bit 2 de UT_CONT */
UT_CONT |= UT_IO2 /* met à 1 le bit 2 */UT CONT &= ~UT IO2;_ _
UT_CONT ^= UT_IO2; /* met à 0 le bit 2 */
/* toggle du bit 2 *//* toggle du bit 2 */IF ((UT_CONT & UT_IO2) != 0) { … } /* test du bit 2 */
#define UT_SEL 0x38 /* masque des bits 3,4,5 de UT_CONT */
/* Ecrit 6 dans UT_SEL */UT_CONT = (UT_CONT & ~UT_SEL) | (0x6 << 3);
Introduction - DRE/REDS 52
Compléments de prog. sys. en C
Le registre REG_TEST est à l’adresse 0xF0000004
Mettre à 0 le bit 16
M tt à 1 l bit 19Mettre à 1 le bit 19
Inverser l’état des bits 17 et 18
53Introduction - DRE/REDS 53