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 2018  Horaire et local
Professeur : Oukaira, Aziz
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 :

Acquérir une méthodologie de programmation qui permet de développer des applications embarquées en C et C++. À la fin de ce cours, les étudiants auront les connaissances nécessaires pour :

  • Maîtriser les concepts de la programmation embarqué et leurs applications.
  • Être capable d'analyser les conséquences d'utilisation des systèmes informatiques embarqués.
  • Acquérir des connaissances sur l'environnement KDS.
  • Acquérir des expériences pour développer des applications embarquées.
  • Acquérir des connaissances sur les critères de qualité de la programmation embarqués.
  • Expérimenter les méthodes d'analyse en utilisant un banc de développement et de test pour un système embarqué.
  • Maîtriser l'application embarquée sur deux langages différents : C et C++.
3. Stratégies pédagogiques :

Les formules pédagogiques suivantes seront utilisées :

  • L'enseignement est dispensé sous forme magistrale (3h/semaine). Des exercices seront donnés durant ces séances pour illustrer les notions nouvellement introduites.
  • Les étudiants doivent participer en classe pour mieux saisir les notions qui seront présentées pendant le cours.
  • Des séances de travaux dirigés (2h/séance) viendront appuyer les séances de cours. La présence des étudiants est obligatoire.
4. Heures de disponibilité ou modalités pour rendez-vous :

Je vous suggère de poser vos questions par courriel (aziz.oukaira@uqo.ca). Si une rencontre est jugée nécessaire, alors un rendez-vous sera fixé.

5. Plan détaillé du cours sur 15 semaines :
Semaine Thèmes Dates
1   

Cours 1 : Présentation du plan de cours et principes de base des systèmes embarqués

  • Plan du cours et objectifs
  • Introduction au cours
  • Qu'est-ce qu'un système embarqué?

Travail dirigé 1 (10 septembre 2018)

06 sept. 2018 
2   

Cours 2 : Introduction et concepts de base

  • Avantages du langage C
  • Le C versus C++
  • Structure d’un programme C
  • Exemples simples

Travail dirigé 2 (17 septembre 2018)

13 sept. 2018 
3   

Cours 3 : Introduction et concepts de base (Suite)

  • Pointeurs et Tableaux
  • Allocation statique et dynamique
  • Exemples simples

Travail dirigé 3 (24 septembre 2018)

20 sept. 2018 
4   

Cours 4 : L’interface logicielle et choix du matériel

  • Jeux d’instructions (ISA)
  • Exemples d'architectures PC/x86, MIPS, RISC
  • Microcontrôleurs ARM et ATMEGA

Travail dirigé 4 (01 octobre 2018)

27 sept. 2018 
5   

Cours 5 : L’interface logicielle et choix du matériel (Suite)

  • Architecture RISC / Architecture AVR
  • CISC versus RISC
  • Notion de MMU

Présentations et discussion de deux projets en équipe avant le rapport final

  • Remise de la proposition de projet
  • Former des équipes de 2 à 3 étudiants
  • Désignation d’un seul projet pour chaque équipe
04 oct. 2018 
6   

Semaine d'études

11 oct. 2018 
7   

Examen intra

Travail dirigé 5 (22 octobre 2018)

18 oct. 2018 
8   

Cours 6 : Présentation de la carte Kinetis FRDM-KL26Z

  • Les caractéristiques du FRDM-KL26Z
  • Présentation du kit de développement KSDK (Kinetis Software Development Kit)
  • Débogage dans l'environnement de développement KDS

Travail dirigé 6 (29 octobre 2018)

25 oct. 2018 
9   

Cours 7 : Notions de système d'exploitation pour l'embarqué

  • Système d'exploitation
  • Qu'est-ce qu'un OS temps réel (RTOS)
  • Programmation avec un OS temps réel
  • Mise en Oeuvre

Travail dirigé 7 (5 novembre 2018)

01 nov. 2018 
10   

Cours 8 : Introduction à la programmation orientée objet C++

  • Avantages du langage C++
  • Le C++ versus C
  • Exemples simples

Travail dirigé 8 (12 novembre 2018)

08 nov. 2018 
11   

Cours 9 : Optimisation du code C pour l'embarqué

  • Gestion de la mémoire
  • Variables locales ou globales
  • Interruptions

Travail dirigé 9 (19 novembre 2018)

15 nov. 2018 
12   

Cours 10 : Optimisation du code C pour l'embarqué (Suite)

  • Gérer les bits
  • Tableaux ou Pointeurs

Exemples simples

22 nov. 2018 
13   

Cours 11 : Ordonnancement des processus

  • Algorithmes d’ordonnancement
  • Ordonnancement du premier arrivé, premier servi (FCFS)
  • Ordonnancement du travail le plus court d’abord (SJF)

Travail à rendre : Rapport du projet (le 29 Novembre 2018, matin avant 8:30 h).

Travail dirigé 10 (03 décembre 2018)

29 nov. 2018 
14   

Présentations orales

Présentation des projets (Power Point), 15 min pour chaque équipe plus 5 min pour les questions et échanges.

06 déc. 2018 
15   

Examen final

13 déc. 2018 
6. Évaluation du cours :

Dans ce cours, la répartition des notes se fera comme suit :

  • Examen intra:30%
  • Examen final: 30%
  • Travaux dirigés obligatoires: 20%
  • Projet en équipe :20%

Une moyenne inférieure à 50% aux examens est éliminatoire et conduit automatiquement à l'échec.

7. Politiques départementales et institutionnelles :
8. Principales références :
  • ErychStyger, 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 2012.
  • FreeRTOS, FreeRTOS Books and Manuals, at http:/www.freertos.org/
  • Jean LABROSSE, "MicroC/OS-II The Real-Time Kernel" MicriumuC/O-III for the Freescale kinetis, 2011.
  • POSIX Threads Programming: https://computing.11nl.gov/tutorials/pthreads/
9. Page Web du cours :
https://moodle.uqo.ca