Université du Québec en Outaouais Département d'informatique et d'ingénierie
Sigle : INF1633  Gr. 01
Titre : Programmation de systèmes embarqués en C/C++
Session : Automne 2017  Horaire et local
Professeur : Guèdègbé, Francis
1. Description du cours paraissant à l'annuaire :

Objectifs

Permettre à l’étudiant(e) de maîtriser, par la pratique, la programmation en langage C/C++ des systèmes informatiques embarqués.

Contenu

Introduction au domaine des systèmes embarqués. Aspects matériels : architecture RISC et microcontrôleurs ARM et ATMEGA. Langage C/C++. Chaîne de compilation GNU. Environnements de programmation. Développement et intégration d’applications dans des environnements embarqués. Techniques de débogage. Introduction aux systèmes d’exploitation temps réel (RTOS). Réalisation d’un projet de système embarqué. Ce cours comporte des séances obligatoires de travaux dirigés (TD) de deux heures par semaine.
2. Objectifs spécifiques du cours :
Préalable: INF1563

À la fin de ce cours, les étudiants auront les connaissances nécessaires pour:

  • Comprendre les architectures des processeurs courant en embarqué
  • Aborder la programmation en C/C++ sous différents angles tenant compte des capacités du matériel
  • Exploiter les capacités des langages C et du C++ avec discernement
  • Comprendre et mettre au point la chaîne d'amorçage du système
  • Utiliser un banc de développement et de test pour un système embarqué
  • Évaluer, mesurer et améliorer la performance, la fiabilité et la robustesse de ses applications
3. Stratégies pédagogiques :
Les formules pédagogiques suivantes seront utilisées:
  • Les connaissances seront présentées sous forme de cours magistraux
  • Le projet et les groupes de discussions permettront la mise en oeuvre des concepts
  • Le projet exigera une certaine capacité d'analyse critique et de programmation en C, l'étudiant devra se familiariser rapidement avec les fondements de programmation
  • Les séances de travaux dirigées sont obligatoires
4. Heures de disponibilité ou modalités pour rendez-vous :
Sur rendez-vous. Le courriel est le moyen le plus efficace pour joindre l'enseignant.
5. Plan détaillé du cours sur 15 semaines :
Semaine Thèmes Dates
1   

Introduction au cours

  • Objectifs
  • Contenu du cours
  • Livres de références, environnement et matériel

Cours: Introduction aux systèmes embarqués

  • Qu'est-ce qu'un système embarqué?
  • Logiciels embarqués et domaines d'application
  • Anatomie des systèmes embarqués
  • Cadre des travaux dirigés, devoirs et projet: Kinetis Design Studio (KDS), kinetis FRDM-KL26Z, FreeRTOS, Cygwin
07 sept. 2017 
2   

TD1: Introduction aux C. (12 septembre 2017)

  • Cadre des travaux dirigés
  • Règles des salles de laboratoire
  • Ouvrir l'environnement de développement KDS, Hello World

Cours: Introduction au langage C/C++: la base

  • Éléments de base des langages
  • Types, déclaration et représentation en base 10, 2, 8 et 16
  • Distinctions C et C++, et fusion des deux langages
  • Les librairies standards et inclusions de fichier sources
  • Les conventions de programmation en C/C++
  • Rappel sur la compilation et la construction
  • Inclusion au niveau des librairies (édition de lien)
  • Exemples simples
14 sept. 2017 
3   

TD2: Introduction aux C. (19 septembre 2017)

  • Exercices sur les structures de base
  • Chemins d'inclusion
  • Débocage dans l'environnement de développement (exercices avec erreurs prédéfinies)

Cours: Introduction au langage C/C++: pointeurs et fonctions et flux

  • Pointeurs et références
  • Tableaux
  • Allocation statique et dynamique
  • Conversion de type implicite et explicite
  • Flux
Énoncé du devoir 1
21 sept. 2017 
4   

TD3: Exercice langage C/C++ (26 septembre 2017)

  • Débocage dans l'environnement de programmation: point d'arrêts, progression pas-à-pas, inspection des valeurs de variables
  • Exercices sur pointeurs et flux, et application des notions de débocage

Préparation en vue du prochain TD: étudiant doit installer KDS et KSDK sur son ordinateur personnel et répéter les exercices de ce TD.

Cours: Choix du matériel

  • Exemples d'architectures PC/x86, MIPS, RISC
  • Microcontrôleurs ARM et ATMEGA
  • Notions de systèmes d'exploitation pour l'embarqué
  • Notion de MMU
  • Bus d'extension
  • Considérations pour le choix
  • Étude sommaire de la carte Kinetis FRDM-KL26Z et du kit de développement KSDK (Kinetis Software Development Kit)
Énoncé du projet
28 sept. 2017 
5   

TD4: Présentation et manipulation de la carte FRDM-KL26Z (3 octobre 2017)

  • Connection
  • Premiers programmes
  • Déployer et déboguer sur carte
  • Aide au devoir 1

Cours: Étude de la carte Kinesis FRDM-KL26Z et du kit de développement

  • Fonctions du kit de développement en entrée/sortie
  • Notions de programmation par événement
  • Notion de gestion des interruptions
Travail à rendre: Devoir 1

Énoncé du devoir 2

05 oct. 2017 
6    Semaine d'études 12 oct. 2017 
7    Examen intra 19 oct. 2017 
8   

TD5: Présentation et manipulation de la carte FRDM-KL26Z (24 octobre 2017)

  • Programmes sur entrée/sorties et interruptions, déployer et déboguer

Cours: Les fonctions de support du système d'exploitation

  • Chaîne d'amorçage et processus de démarrage
  • FreeRTOS
  • Cygwin
  • Compilation croisée
  • Flux et fichiers en C et C++
26 oct. 2017 
9   

TD6: Présentation et manipulation de la carte FRDM-KL26Z (31 octobre 2017)

  • Programmes sur entrées/sorties et interruptions, déployer et déboguer sur FreeRTOS

Cours: Programmation orientée objet C++

  • Intro et bref rappel des concepts équivalents de Java
  • Définition de classe
  • Classe versus struct, enum, union
  • Constructeurs et destructeurs
  • Héritage
  • Polymorphisme
  • Généricité
02 nov. 2017 
10   

TD7: Exercices de programmation orientée objet C++ (7 novembre 2017)

Cours: Autres aspects du langage C/C++

  • Sandard C++11
  • Mots-clés friend, inline, volatile, explicit, etc.
  • Message d'aide au débogage: assert
09 nov. 2017 
11   

TD8: Exercices de programmation orientée objet C++ (séance 2)(14 novembre 2017)

Cours: Boîte à outil d'optimisation du code pour l'embarqué (1)

  • Opération de manipulation de bits
  • Exemple: Registres
  • Les types de mémoire et utilisation optimale
  • Sizeof
  • La librairie math.h
  • Routines d'interruption et optimisation
  • La pile

À surveiller: Goto, récusivité, fonctions virtuelles, allocation dynamique

16 nov. 2017 
12    TD9: Assistance au devoir 2 (21 novembre 2017)
  • Démonstration de fonctions utiles au devoir

Cours: Boîte à outil d'optimisation du code pour l'embarqué (2)

  • Visibilité, dépendance et réduction de la taille du programme cible
  • Notion de macro et de compilation conditionnelle
  • Options de compilation de gcc
  • Makefile
  • Communication avec l'environnement
  • Les erreurs de débutants
  • Notion de Thread C++11
Cours: Étude de cas 1: Démonstration des fonctions combinés sur cartes d'évaluation
23 nov. 2017 
13    TD10: Assistance au projet (28 novembre 2017)
  • Démonstration de fonctions utiles au projet

Cours: Étude de cas 2: Démonstration de fonctions combinés sur cartes d'évaluation

Travail à rendre: Devoir 2
30 nov. 2017 
14    Cours: Étude de cas 3: Démonstration de fonctions combinées sur cartes d'évaluation

Travail à rendre: Projet

07 déc. 2017 
15    Examen final 14 déc. 2017 
6. Évaluation du cours :
L'évaluation est l'appréciation du niveau d'apprentissage atteint par l'étudiant(e) par rapport aux objectifs des cours et des programmes. L'étudiant(e) dans ce cours sera évalué(e) par les examens de mi-session et final, par des travaux dirigés, ainsi que par un projet.

L'attribution des notes se fera selon la répartition suivante:

  • Examen intra: 20%
  • Examen final: 30%
  • Travaux dirigés obligatoires: 20%
  • Devoir 1 en équipe de 2 ou 3: 5%
  • Devoir 2 en équipe de 2 ou 3: 10%
  • Projet en équipe de 2 ou 3: 15%
Pour réussir il faudra 50%. Une moyenne générale inférieure à 50% est éliminatoire et conduit automatiquement à l'échec de l'étudiant(e). La pénalité de retard pour la remise d'un travail est de 20 % par jour (y compris les jours fériés et les fins de semaine).
7. Politiques départementales et institutionnelles :
8. Principales références :
Notes de cours
  • Des notes de cours seront fournies couvrant toute la matière du cours.
  • T. Grenier, et al. Langage C/C++: De la syntaxe à la programmation orientée objet, INSA Lyon Langage C/C++ - Creatis - INSA Lyon
  • Patrice Kadionik, Le langage C pour les systèmes embarqués, 2005, http://www.enseirb.fr/~kadionik
Autres références recommandées
  • Pierre Ficheux, Éric Bénard, "Linux Embarqué 4e édition", Eyrolles 2012, ISBN: 978-2-212-13482-7.
  • Erych Styger, Blog at https://mcuoneclipse.com/, Freescale/NXP, Lucerne University of Applied Sciences and Arts
  • Kinesis FDRM-KL26Z and Software Developmet Kit: documentation, tools and guides, NXP
  • K. Hong. C++ Tutorial Home. http/www.bogotobogo.com/cplusplus/cpptut.php
  • Michael Barr, Anthony Massa, "Programming Embedded Systems, With C and GNU Development Tools" O'Reilly Media, 2009.
  • Christopher Blaess. Solution temps-réel sous Linux. Cas pratique: le Raspberry Pi. Avec 50 exercices corrigés 2e édition, Eyrolles.
  • FreeRTOS, FreeRTOS Books and Manuals, at http:/www.freertos.org/
  • Jean LABROSSE, "MicroC/OS-II The Real-Time Kernel" Micrium uC/O-III for the Freescale kinetis
  • POSIX Threads Programming: https://computing.11nl.gov/tutorials/pthreads/
9. Page Web du cours :
https://moodle.uqo.ca