introduction 2008-2009 (v0.1) - hackbbs

53
Informatique embarquée (IEM) Introduction Introduction 2008-2009 (v0.1) Daniel Rossier [email protected]

Upload: others

Post on 20-Jan-2022

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction 2008-2009 (v0.1) - HackBBS

Informatique embarquée(IEM)

IntroductionIntroduction2008-2009 (v0.1)

Daniel [email protected]

Page 2: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 3: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 4: Introduction 2008-2009 (v0.1) - HackBBS

Software dans les systèmes embarqués

Introduction - DRE/REDS 4

Page 5: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 6: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 7: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 8: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 9: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 10: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 11: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 12: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 13: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 14: Introduction 2008-2009 (v0.1) - HackBBS

OS embarqués

Introduction - DRE/REDS 14

Page 15: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 16: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 17: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 18: Introduction 2008-2009 (v0.1) - HackBBS

Windows CE

Introduction - DRE/REDS 18

Page 19: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 20: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 21: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 22: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 23: Introduction 2008-2009 (v0.1) - HackBBS

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]

Page 24: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 25: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 26: Introduction 2008-2009 (v0.1) - HackBBS

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)

Page 27: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 28: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 29: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 30: Introduction 2008-2009 (v0.1) - HackBBS

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 */}

Page 31: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 32: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 33: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 34: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 35: Introduction 2008-2009 (v0.1) - HackBBS

Choix d'un OS

Comment choisir un OS?

Introduction - DRE/REDS 35

Page 36: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 37: Introduction 2008-2009 (v0.1) - HackBBS

Aspects liés au design d'applications embarquéesembarquées

Introduction - DRE/REDS 37

Page 38: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 39: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 40: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 41: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 42: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 43: Introduction 2008-2009 (v0.1) - HackBBS

ACCORD/UML

Introduction - DRE/REDS 43

Page 44: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 45: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 46: Introduction 2008-2009 (v0.1) - HackBBS

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 */}

}

Page 47: Introduction 2008-2009 (v0.1) - HackBBS

Complément de programmation systèmeComplément de programmation systèmeen C

Introduction - DRE/REDS 47

Page 48: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 49: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 50: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 51: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 52: Introduction 2008-2009 (v0.1) - HackBBS

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

Page 53: Introduction 2008-2009 (v0.1) - HackBBS

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