JFLA 2011. Programmer les microcontrôleurs PIC en Objective Caml. Benoît Vaugon Philippe Wang & Emmanuel Chailloux



Documents pareils
EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Cours de Programmation 2

Introduction aux Machines Virtuelles avec VMKit

UE Programmation Impérative Licence 2ème Année

as Architecture des Systèmes d Information

Classes et Objets en Ocaml.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Vérification formelle de la plate-forme Java Card

Java - la plateforme

modules & compilation

La technologie Java Card TM

Derrière toi Une machine virtuelle!

Plan du cours. Historique du langage Nouveautés de Java 7

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

Cours 1 : La compilation

Rappels d architecture

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Machines virtuelles Cours 1 : Introduction

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Compilation (INF 564)

Java Licence Professionnelle CISII,

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Programmation système I Les entrées/sorties

Programmer en JAVA. par Tama

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

Machines Virtuelles. et bazard autour. Rémi Forax

Bases de programmation. Cours 5. Structurer les données

Recherche dans un tableau

Initiation. àl algorithmique et à la programmation. en C

PIC : COURS ASSEMBLEUR

Architecture des ordinateurs

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Introduction à la programmation concurrente

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Introduction au langage C

Java 1.5 : principales nouveautés

La JVM. La machine virtuelle Java. La JVM. La JVM

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

SSTIC Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

Architecture des ordinateurs

Logiciel Libre Cours 2 Fondements: Programmation

Analyse de sécurité de logiciels système par typage statique

La carte à puce. Jean-Philippe Babau

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Conception de circuits numériques et architecture des ordinateurs

Une introduction à Java

Java et les bases de données

Le langage C. Séance n 4

Configuration de TCPIPconfig.h

PIC EVAL Dev Board PIC18F97J60

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Programmation en Java IUT GEII (MC-II1) 1

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

TP3 : Manipulation et implantation de systèmes de fichiers 1

Programmation C. Apprendre à développer des programmes simples dans le langage C

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Java Licence Professionnelle CISII,

Structure d un programme

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

GenDbg : un débogueur générique. Didier Eymery Jean-Marie Borello Jean-Marie Fraygefond Odile Eymery Philippe Bion

Gestion mémoire et Représentation intermédiaire

Programmation assembleur : aperçu

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

UE C avancé cours 1: introduction et révisions

Algorithmique et Programmation, IMA

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Programmation Objet Java Correction

SGM. Master S.T.S. mention informatique, première année. Isabelle Puaut. Septembre Université de Rennes I - IRISA

Projet gestion d'objets dupliqués

Traduction des Langages : Le Compilateur Micro Java

Compression de Données - Algorithme de Huffman Document de Conception

ASR1 TD7 : Un microprocesseur RISC 16 bits

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

ACTIVITÉ DE PROGRAMMATION

Conventions d écriture et outils de mise au point

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Description du logiciel Modbus RTU

NanoSense. Protocole Modbus de la sonde Particules P4000. (Version 01F)

La mémoire. Un ordinateur. L'octet. Le bit

Généralités sur le Langage Java et éléments syntaxiques.

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

IV- Comment fonctionne un ordinateur?

THEME 1 : L ORDINATEUR ET SON ENVIRONNEMENT. Objectifs

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Licence Sciences et Technologies Examen janvier 2010

Cours d Algorithmique et de Langage C v 3.0

Initiation à JAVA et à la programmation objet.

Logiciel de base. Première année ENSIMAG

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Transcription:

JFLA 2011 Programmer les microcontrôleurs PIC en Objective Caml Benoît Vaugon Philippe Wang & Emmanuel Chailloux

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 2/16 Plan Introduction Réalisation Conclusion

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 3/16 Un nouveau backend pour OCaml Pour quelle cible? Qu est-ce? Les microcontrôleurs PIC Circuit intégré programmable Fait pour les applications embarquées Domaines d application Robotique industrielle, gadgets électroniques, domotique (appareils électroménagers), cartes à puce...

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 4/16 Les PIC : une cible contrainte Caractéristiques du PIC18F4620 : 1. 3968 registres de 1 octet 2. Architecture : RISC 8 bits 3. Mémoire programme : 64 Ko Le défi : des ressources «limitées» pour : Un langage multi-paradigme : impératif, fonctionnel, objet Un système de modules de haut niveau, foncteurs Une gestion automatique de la mémoire Un mécanisme d exceptions Polymorphisme et comparaisons (compare) Jusqu où irons-nous?

La programmation sur PIC (avant) Assembleur EXEMPLE_DE_CODE: tblrd*+ addwf FSR0L, W rcall SOUS_PRGM btfsc STATUS, C incf FSR0H, F return Compilation en natif Basic (BASIC84plus) C (sdcc, SIXPIC, MCC18, Hi-Tech C) Forth (PicForth) Interprètes Basic (BasicStamps) Forth (FlashForth) Utilisation d une machine virtuelle PICOBIT (machine virtuelle Scheme pour PIC) OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 5/16

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 6/16 Chaîne de production

1. // Jérôme Vouillon OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 7/16 OCamlClean Une analyse statique originale du code-octet 1 Buts : Réduire l occupation du tas (mémoire dynamique) : élimination des fermetures non utilisées (bibliothèques) nettoyer le code-octet (mémoire statique) accélérer l initialisation de la machine virtuelle Globalisation des fermetures (réduire les indirections) accélérer l exécution du code Un programme vide se compile en... un programme vide

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 8/16 Du code-octet à l assembleur Code octet généré par ocamlc (aligné sur 32 bits) mémoire statique du PIC (aligné sur 1 octet) Compression du code-octet Élimination des 0 (de 4 à 1 ou 2 octets) Gain d un facteur 3,5 Analyse statique de l état initial du tas Pas de calcul à l initialisation, simple copie Lien avec la bibliothèque d exécution Fonctions externes (codées en assembleur) Élimination des inutiles Accès direct

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 9/16 OCamlrun sur PIC Réécriture de la machine virtuelle OCaml en assembleur PIC wc -l interp.asm runtime.asm 2556 interp.asm 368 runtime.asm 2924 total Représentation uniforme sur 16 bits Entiers codés sous la forme 2 n + 1 (bit de tag) Blocs : Gestionnaire mémoire : Stop & Copy Simple (150 loc assembleur) Performant (1 exécution < 1,5ms) Division de la taille du tas par 2

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 10/16 Bibliothèque standard wc -l stdlib.asm 6757 stdlib.asm + entre 150 et 200 lignes OCaml Modules copiés Modules modifiés Modules non-portés Array, ArrayLabels, CamlinternalLazy, CamlinternalMod, Char, Hashtbl, Int32, Int64, Lazy, List, ListLabels, MoreLabels, OO, Queue, Set, Sort, Stack, StdLabels, String, StringLabels Buffer +, CamlinternalOO +, Gc +, Map +, Obj +, Pervasives, Random, Printf, Std_exit, Sys Arg, Complex, Callback, Digest, Filename, Format, Genlex, Marshal, Nativeint, Parsing, Printexc, Scanf, Stream, Weak

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 11/16 Bibliothèques spécifiques (1) Entrées-sorties du PIC external read_reg : reg -> int = "caml_pic_read_reg";; (** [read_reg reg] reads value of the Special Function Register [reg]. Returns value between 0 and 255. *) external write_reg : reg -> int -> unit = "caml_pic_write_reg";; (** [write_reg reg value] writes value in the Special Function Register [reg]. [value] should be between 0 and 255. *) Interruptions external set_interruption_handler : (bit -> unit) -> unit = "caml_set_interruption_handler";; (** [set_interruption_handler h] registers the interruption handler [h]. *) external clear_interruption_handler : unit -> unit = "caml_set_interruption_handler";; (** [clear_interruption_handler ()] removes the interruption handler. *)

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 12/16 Bibliothèques spécifiques (2) Gestion des afficheurs LCD module Aff = Lcd.Connect ( struct module Pic = Pic let bus_size = Lcd.Four let e = Pic.LATD0 let rs = Pic.LATD2 let rw = Pic.LATD1 let port = Pic.PORTC end );; Aff.init ();; Aff.config ();; Aff.print_string "Hello world";; Gestion des connexions séries let (ic : t in_channel) = Serial.open_in () in while true do match Serial.receive ic with Clear -> clear () Moveto (l, c) -> moveto l c Int i -> print_int i Text t -> print_string t done

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 13/16 Étude de performance Vitesse d exécution 400 000 instructions VM par seconde 25 cycles machine par instruction VM par rapport à 18 sur un processeur standard Comparaison avec PICOBIT : 37000 instructions VM par seconde pour PICOBIT soit «11 fois moins rapide» que OCaPIC (mais pour des code-octets différents) Occupation de la mémoire statique Taille totale : 64 Ko pour le PIC18F4620 Interprète de code-octet : 4954 o (7,6%) Bibliothèque d exécution : 4254 o (6,5%) Code-octet : jusqu à 55 Ko (86%)

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 14/16 Conclusion Application fonctionnelle Distribuée en open-source (licence CeCILL-B) http://www.algo-prog.info/ocaml_for_pic/ De bonnes performances Perspectives Adapter à d autres modèles de programmation Porter sur d autres architectures Écrire d autres ramasse-miettes Gérer une RAM externe...

Plan Intro Réal Concl Exemple d application I Un jeu de réflexion se jouant à deux I Programmation d une IA sur PIC I Entièrement codé, réalisé et testé OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 15/16

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 16/16 Questions??????

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 17/16 Bibliographie Xavier Leroy, Damien Doligez, Jacques Garrigue, Didier Rémy, and Jérôme Vouillon. The Objective Caml system (release 3.11) : Documentation and user s manual. Institut National de Recherche en Informatique et en Automatique, 2008. http://caml.inria.fr/pub/docs/manual-ocaml/. Microchip. PIC18F2525/2620/4525/4620 Data Sheet, 2008. http://ww1.microchip.com/downloads/en/devicedoc/39626b.pdf. Vincent St-Amour and Marc Feeley. Picobit : A compact scheme system for microcontrollers. Implementation and Application of Functional Languages (IFL 09), pages 1 11, September 2009.

Gestion des exceptions Plusieurs techniques 1. Rien lors de la pause des rattrapeurs, tout au lancement (exemple : Java) 2. Stockage des rattrapeurs dans la pile (exemple : OCaml) Choix 2 : comme en OCaml Gestion par trois instructions VM pushtrap / poptrap raise OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 18/16

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 19/16 Gestion des fermetures Qu est-ce? Permet de représenter les fonctions Stocke l environnement Stocke les arguments déjà passés en cas d appel partiel Deux types de fermetures Fermetures simples Fermetures récursives Géré par 5 instructions de la machine virtuelle apply / appterm return grab / restart

OCaPIC JFLA 2011 Lundi 31 janvier 2011 UPMC 20/16 Gestion automatique de la mémoire Qu est ce? Libère la mémoire qui n est plus utilisée Dans certains cas compacte la mémoire Plusieurs types de ramasse miettes Stop & Copy Mark & Sweep Mark & Compact Choix : Stop & Copy Deux phases : 1. Parcours des racines 2. Parcours du tas TO Optimise l utilisation des registres N améliore pas la localité spaciale