Home
        Les microcontrôleurs PIC programmés en Objective Caml
         Contents
1.      trapSp   un registre stockant la position dans la pile du dernier  rattrapeur d   exception pos          extraArgs   un compteur stockant  lors d   un appel de fonction   le nombre d arguments pass  s  Il est utilis   pour rep  rer les appels  partiels     186  JFLA 2011    Il existe 146 instructions de code octet diff  rentes  Cependant   60  sont des alias permettant de factoriser le code et d am  liorer  la vitesse d ex  cution  Une instruction de code octet est compos  e  d   un identifiant d instruction  opcode  et   ventuellement d   argu   ments  Dans l   ex  cutable g  n  r   par ocamlc  chaque opcode et  chaque argument sont cod  s sur quatre octets  Ces instructions  peuvent   tre group  es en sept cat  gories          calculs arithm  tiques et logiques        contr  le   branchements conditionnels et inconditionnels        gestion de la m  moire   acc  s    la pile et au tas  allocations  dynamiques      gestion des fermetures   cr  ations de fermetures  appels et  retours de fonctions       gestion des exceptions   poses de rattrapeurs  lancements  d   exceptions         gestion des objets   appels de m  thodes       gestion des appels aux fonctions externes     On peut se r  f  rer    la documentation de X  Clerc concernant le  projet Cadmium  3  pour le d  tail de chaque instruction     4  L   implantation de la machine virtuelle Objective Caml sur  PIC    Cette section d  crit l implantation que nous avons r  alis  e pour  permettre d ex  cuter des program
2.    Les microcontr  leurs PIC programm  s  en Objective Caml    Benoit Vaugon   Philippe Wang    Emmanuel Chailloux      1  Universit   Pierre et Marie Curie  Paris 6   Benoit Vaugon etu upmc fr    2  Laboratoire d informatique de Paris 6  LIP6   CNRS UMR 7606   Universit   Pierre et Marie Curie  Paris 6   Philippe Wang lip6 fr   Emmanuel  Chailloux lip6  fr       R  sum    Les microcontr  leurs PIC sont des circuits int  gr  s programmables  Ils se dis   tinguent par leurs bas prix et leur faible consommation   nerg  tique  Les principaux lan   gages de programmation disponibles sont l   assembleur PIC et des sous ensembles des lan   gages C et Basic  Ils demandent souvent au programmeur de se pr  occuper m  ticuleusement  des limitations du mat  riel  Dans ces conditions  il est souvent difficile d   exprimer des algo   rithmes complexes utilisant des allocations dynamiques    Nous introduisons Objective Caml  un langage applicatif multiparadigme  a allocation dy   namique et r  cup  ration automatique de m  moire  L   utilisation d   un langage de haut ni   veau sur ces architectures apporte la possibilit   d   y ex  cuter des algorithmes bien plus com   plexes tout en assouplissant fortement les contraintes de programmation  notamment parce  que la gestion de la tr  s petite quantit   de m  moire est alors automatis  e  Cela facilite le  processus de mise au point tout en garantissant un haut niveau de s  ret   d   ex  cution   Pour ce faire  nous introduisons une machine 
3.   d   une partie importante des octets inutiles du code octet   Les opcodes sont alors cod  s sur un octet au lieu de quatre  et  chaque argument de chaque instruction est cod   sur le nombre  d   octets minimal  1 ou 2 selon les instructions      Par exemple  l   instruction de la machine virtuelle constint  permet de placer un entier lit  ral dans l   accumulateur  Son ar   gument est un entier et est donc cod   sur deux octets  De m  me   l instruction makeblock permet d   allouer un bloc dans le tas  Elle  prend un argument un tag et une taille qui sont tous les deux  compris entre 0 et 255  Ils sont alors cod  s sur un octet chacun     Cette compression simple permet de gagner un facteur 3 5 sur  la taille occup  e par le code octet dans la m  moire programme  du PIC  et par cons  quent le m  me facteur 3 5 sur la vitesse de  lecture du code par l   interpr  te    La proportion moyenne entre  le temps de lecture d   une instruction par rapport au temps total  d   ex  cution de cette instruction   tant de 6   on en d  duit qu   on  gagne un facteur 1 15 sur la vitesse d   ex  cution totale  Le gain  principal de cette optimisation concerne donc la taille maximale  des programmes qu il est possible de mettre sur un PIC  qui est  alors multipli  e par 3 5     Par la m  me occasion  quelques optimisations ont   t   faites  pour am  liorer la vitesse d   ex  cution de l   interpr  te  Par exemple     6  Rappelons que l   absence de cache  que ce soit pour la m  moire ou pour 
4.  1024 8     16  PIC24F 16 4     256 512     98304 0     512 16  PIC24H 16 12  gt  256 1024     16384 0 40  dsPIC30 16 6     144 256     8192 0     4096 30  dsPIC33 16 6     256 256     30720 0 30  PIC32 32 32     512 8192     131072 0 10  gt  20                               Tableau 1   Tableau comparatif des diff  rentes s  ries de PIC    Les PIC ne poss  dent pas d instructions sp  cifiques pour com   muniquer avec l ext  rieur  ni pour configurer les interfaces in   ternes  Ceci se fait en lisant et en   crivant dans des registres par   ticuliers du PIC  Les pattes du PIC sont regroup  es en    ports     et  chaque port correspond    un registre du PIC  Par exemple  pour  appliquer une tension de 5V sur la patte num  ro 3 du port B  il  suffit de mettre    1 le bit num  ro 3 du registre PORTB  Ceci peut  se faire par l instruction assembleur      bsf PORTB  3    De m  me  pour configurer l   interface EUSART   permettant de  communiquer avec un port s  rie d   un ordinateur  il suffit d  crire  dans le registre TXSTA     Lune des difficult  s du portage d   un langage de haut niveau  comme Objective Caml sur PIC est de permettre au programmeur    5  Enhanced Universal Synchronous Asynchronous Receiver Transmitter     184  JFLA 2011    d effectuer ce genre d   op  rations aussi facilement qu   en assem   bleur  sans pour autant casser les principes du langage  Il faut  alors donner au programmeur des moyens   l  gants et perfor   mants d effectuer des op  rations dont la s 
5.  PIC18F4620 est de  64ko  La taille du binaire associ      l interpr  te est de 4 9540   La taille du binaire associ      la biblioth  que d ex  cution est de  4 2540  Par cons  quent  la taille maximale du code octet que l   on  peut mettre dans ce PIC est de 55ko  ce qui repr  sente 86  de la  m  moire totale     La m  moire vive du PIC18F4620 est de 3 9680  Elle est par   tag  e entre la pile d ex  cution  le tas  des registres r  serv  s    la  machine virtuelle  390   et les registres sp  ciaux  1280   La pro   portion entre la taille de la pile et la taille du tas est d  finie    la  compilation  Par d  faut  la taille de la pile a   t   arbitrairement  fix  e    174 niveaux  Comme l   algorithme de gestion m  moire est  un Stop  amp  Copy  seule la moiti   du tas est utilisable  La taille du  tas est donc ici de 17920     7 2  Calcul de nombres premiers avec allocations de listes  chain  es    Nous proposons d   observer le temps d   ex  cution d   un pro   gramme calculant la liste chain  e des n premiers nombres pre   miers  Le principal site d   allocation m  moire est situ   dans la  d  finition de la seconde fonction  npremiers_aux   il s   agit du  constructeur de listes       Nous pouvons ainsi pr  dire le nombre  d     l  ments allou  s dans le tas  Ce nombre correspond en fait     l allocation du r  sultat attendu   les n premiers nombres pre   miers dans une liste chain  e  La liste allou  e occupe alors n x   2 2 2  6 xn octets  ce qui fait 15000 pour une li
6.  mantique est une   cri   ture dans la m  moire    une adresse fix  e     2 3  Le PIC18F4620    Dans notre r  alisation  le code assembleur a   t     crit pour la  s  rie PIC18  Cette s  rie a la particularit   d   avoir un    jeu d   ins   tructions   tendu    cr        l   origine pour faciliter la compilation  depuis le langage C  Ces instructions nous ont en particulier per   mis de faciliter la gestion de la pile Objective Caml et d am  liorer  significativement les performances     Plus pr  cis  ment  le PIC sur lequel les tests ont   t   effectu  s  est le PIC18F4620  Il a   t   choisi principalement pour son grand  nombre de registres  En effet  la quantit   de m  moire dynamique  est le facteur qui nous a pos   le plus de difficult  s pour porter  des programmes Objective Caml sur PIC  Ses principales caract     ristiques sont pr  sent  es dans le tableau 2                       Architecture 8 bits  M  moire flash    64 ko  Registres 3968 o  EEPROM 1024 o  MIPS 10  Entr  es sorties    36 broches                   Tableau 2   Caract  ristiques du PIC18F4620    3  La machine virtuelle Objective Caml    La machine virtuelle Objective Caml est une machine a pile   Elle permet d   ex  cuter le code octet g  n  r   par le compilateur  ocamlc  Un tel ex  cutable contient principalement trois sections          CODE   contient le code octet     Les PIC programm  s en OCaml 185        DATA   contient la s  rialisation d   un tableau de variables glo   bales  Ce tableau contien
7.  r  soudre ce probl  me  les  foncteurs sont une solution assez agr  able  Nous avons donc cod    un module suppl  mentaire dans la biblioth  que standard nomm    Lcd  Voici un exemple de programme utilisant ce module      module Aff   Lcd Connect  struct  module Pic   Pic18f4620  let is_8_bits   true    mode de comm   bus de donn  es      let e   Pic RDO    d  f  des pattes de commandes     let rw   Pic RD1  let rs   Pic RD2  let port   Pic PORTC    port pour le bus de donn  es     end   open Aff       0    oN Aun       D BH    Les PIC programm  s en OCaml 199    Tetror   init      initialisation de 1s sat tareheurm     let O   config    configuration de l   afficheur       mode Cursor_right   sens de d  placemt du curseur       disp On    affichage visible       cursor 0ff    curseur invisible       blink Off    cuseur non clignotant       lmode   Two    affichage sur 2 lignes       font  F5x8    police de caract  res 5x8 px     let      write_string  Hello world     AA       6 2  Un simulateur de PIC pour les programmes Objective  Caml    Le d  bogage d   applications pour PIC est un probl  me assez d     licat  En effet  lorsqu   un programme s   ex  cute sur un PIC     moins   utiliser des d  bogueurs in situ     il est impossible de suspendre  l ex  cution pour observer le contenu de la m  moire  De plus  un  PIC n   est pas forc  ment connect      une interface permettant de  communiquer facilement avec un humain  comme par exemple  un afficheur LCD   Il est alors impo
8. P  ee ZE    Le ramasse miettes doit g  rer les blocs internes d   une mani  re  particuli  re  En effet  lorsqu il arrive sur un bloc ayant le tag infixe   249   il ne doit pas simplement copier le bloc interne mais tout  le bloc externe  Pour retrouver le bloc externe  il utilise le champ  size du bloc infixe  Celui ci ne contient pas la taille du bloc infixe  mais la distance entre le bloc interne et le d  but du bloc externe        190  JFLA 2011    4 3  Gestion des appels externes    Les appels externes sont des appels  depuis le programme Ob   jective Caml     des fonctions   crites    l   origine en C  Ici  ces ap   pels se font    des fonctions   crites en assembleur  Il reste toujours  possible d   interfacer le programme Objective Caml avec n importe  quel langage  Pour ce faire  il est n  cessaire de compiler les fonc   tions externes   crites dans ce langage en assembleur ainsi que  d   avoir un contr  le sur le label g  n  r   par le compilateur au d     but du code assembleur de la fonction externe     Comme cela a   t   expliqu   dans la section 3  les fonctions ex   ternes sont associ  es a un identifiant entier d  fini dans la section  PRIM de l   ex  cutable g  n  r   par ocamlc  L   appel    une fonction  externe est compil   en une instruction particuli  re de la machine  virtuelle nomm  e ccall  Cette instruction prend comme argu   ment l   identifiant de la fonction externe et le nombre d   arguments  qu   elle n  cessite  L   instruction ccall consiste d
9. aient pas toutes   t   paires  Le choix qui a   t   fait est donc de  coder les valeurs Objective Caml dans un PIC sur deux registres   soit 16 bits     Ceci implique diff  rentes restrictions  Notamment les entiers  ne sont repr  sent  s que sur 15 bits  Ils sont donc compris entre   16 384 et 16 383  De plus  il est n  cessaire de pouvoir coder une  adresse de code dans une valeur  par exemple dans une fermeture   La taille du code octet est donc limit  e a 64ko     4 2 2  Les blocs    Dans la machine virtuelle Objective Caml  toutes les valeurs  pr  sentes dans le tas sont regroup  es dans des blocs  Un bloc est  un tableau de donn  es auquel on a ajout   un en t  te  L   en t  te  contient habituellement trois champs   le champ size contenant  la taille du bloc  le champ color utilis   par le gestionnaire m     moire pour marquer les blocs  et le champ tag donnant des in   formations sur le contenu du bloc  Certains blocs  comme les fer   metures  contiennent des valeurs et doivent   tre parcourus par le  gestionnaire m  moire  D   autres  comme les cha  nes de caract  res   contiennent de simples donn  es brutes et ne doivent pas   tre ana   lys  s par le ramasse miette  Le tag permet de distinguer les blocs     analyser des autres     Dans la repr  sentation choisie ici  les en t  tes sont cod  es sur  deux octets et ne contiennent pas de champ color  Le ramasse   miette utilise une autre technique pour marquer les blocs  Celle ci    Les PIC programm  s en OCaml 189    
10. ammes compil  s en code   octet     Modifier l   un des deux compilateurs implique un travail de  maintenance cons  quent a posteriori du fait de l     volution de la  distribution d   Objective Caml  Et l   mission de code PIC   tant as   sez difficile  l   id  e d   tendre le compilateur dans cette optique a    t   assez vite abandonn  e  au profit de l implantation d   une ma   chine virtuelle sur PIC pour Objective Caml     180  JFLA 2011    Cet article pr  sente notre r  alisation  appel  e ocAPIcC   qui r     pond    la question   comment faire tenir une machine virtuelle  pour Objective Caml sur un PIC     Dans la suite de cet article  nous commen  ons par d  crire les  caract  ristiques des microcontr  leurs PIC plus en d  tail afin de  mieux comprendre la probl  matique des contraintes du mat  riel   Puis  les sections 3 et 4 pr  sentent la machine virtuelle Objective  Caml et son implantation sur un PIC  La section 5 propose plu   sieurs moyens de r  duction de la taille des programmes  afin de  pouvoir en embarquer davantage sur les PIC  L   environnement de  d  veloppement fourni avec la distribution est ensuite d  taill   en  section 6  Puis  une   tude de performances est d  crite en section  7  Enfin  nous discutons des diff  rentes exp  rimentations de pro   grammation de PIC dans des langages de haut niveau pour les  comparer avec la notre en section 8 et concluons sur notre exp     rience en section 9     2  Les microcontr  leurs PIC  2 1  Les microcontr  le
11. ar le tableau des variables globales  on teste les  acc  s en lecture  Ceci est possible car ces acc  s sont explicites  dans la machine virtuelle  ils ne peuvent se faire que par deux  types d instructions   getglobal  affectant l   accumulateur avec  une variable globale  et getglobalfield  affectant l   accumula   teur avec un champ d   une variable globale  cette instruction ne  peut bien s  r   tre utilis  e que pour les variables globales cor   respondant    des blocs   Les variables globales qui nous int     ressent sont celles sur lesquelles aucun getglobal n   est effectu     seulement des getglobalfield  Pour ces variables  on d  termine  chaque champ non utilis   et on supprime son initialisation    2  On effectue ensuite une analyse du flot de donn  es  Le but  est de d  terminer et d   liminer du code octet les instructions  ayant cr     les valeurs n     tant plus stock  es dans les champ des  variables globales nettoy  es en 1  En particulier  on cherche       liminer les instructions de cr  ation des fermetures  closure et  closurerec  qui ne sont jamais stock  es  Cet algorithme consiste  en la cr  ation d   un graphe de d  pendances entre les instructions   puis en un parcours de ce graphe pour d  terminer les instructions  dont le seul effet a   t   de calculer des valeurs qui ne sont jamais  lues     3  Enfin  on effectue une analyse standard du flot de contr  le  pour d  terminer les blocs de code non atteignables lors de l   ex     cution  De tels blocs 
12. concernant les entr  es sorties standards  ont   t   suprim  es des modules Pervasives et Buffer car elles  n   ont pas vraiment de sens sur un PIC  Le tableau 3 indique ce qui  a   t   fait de chaque module de la biblioth  que standard              Modules copi  s Modules modifi  s   Modules non port  s  Array  ArrayLabels  Buffer  Arg  Complex   CamlinternalLazy  Camlinternal00    Callback  Digest   CamlinternalMod  Gc  Map  Obj  Filename  Format   Char  Hashtbl  Pervasives  Genlex  Marshal   Int32  Int64  Lazy  Random  Nativeint    List  ListLabels  Std_exit  Sys Parsing  Printexc   MoreLabels  OO  Printf  Scanf   Queue  Set  Sort  Stream  Weak  Stack  StdLabels    String  StringLabels                Tableau 3     Portage des modules de la biblioth  que standard    De plus  comme cela avait   t   dit dans la section 2 2  l   un des  probl  mes lors du portage d   un langage de haut niveau sur PIC  est de permettre au programmeur d   acc  der aux ressources bas  niveau  sans casser la s  curit   ni les principes de programmation  associ  s au langage haut niveau  Une bonne illustration de ce pro        1  2  3  4  5  6  7    8  9    198  JFLA 2011    bl  me est la gestion des registres sp  ciaux du PIC depuis le monde  Objective Caml  Les registres sp  ciaux d   un PIC d  signent les ports  et les registres de configuration des interfaces internes du PIC  De   puis l   assembleur  on lit et on   crit librement dans ces registres  La  question est de donner au programmeur Ob
13. crocontr  leurs  PIC en Objective Caml  Elle est pr  te    l   utilisation et distribu  e      sous la licence libre CeCILL B  L   implantation dans un langage de  tr  s bas niveau de la machine virtuelle Objective Caml sur PIC  permet d   obtenir de tr  s bonnes performances  Le c  t   paradoxal  de notre d  marche est qu   en simplifiant la programmation pour  PIC en utilisant Objective Caml  on arrive    faire ex  cuter des  programmes plus importants  qui peuvent donc contenir une part  algorithmique non n  gligeable  de mani  re plus s  re gr  ce au ty   page statique et    la gestion automatique de la m  moire tout en  restant tr  s efficace  Cette d  marche ouvre des perspectives in   t  ressantes pour le portage d   un langage de haut niveau comme  Objective Caml sur des appareillages ayant de faible ressources   tant en m  moire qu   en capacit   de calcul     Il reste alors a enrichir la biblioth  que pour PIC  afin de pou   voir tirer davantage profit de ces microcontr  leurs ainsi que des  p  riph  riques usuellement associ  s a ces derniers  Ces enrichisse   ments pourront int  grer aussi des extensions sur les mod  les de  concurrence li  s au d  veloppement d   applications interactives et  r  actives pour PIC  bas  es sur l   environnement Objective Caml     Un autre avantage de cette d  marche    machine abstraite    est  de pouvoir raisonner sur du code octet plut  t que sur l   assem   bleur PIC  soit pour prouver des propri  t  s par analyse statique   soi
14. e  Il est en effet g  n  ralement plus facile de  concevoir et de maintenir un logiciel qu   un circuit   lectronique   Les architectures d  di  es sont cependant parfois n  cessaires pour  des raisons de performances     Diff  rentes familles de microcontr  leurs sont disponibles sur le  march    Parmi les plus connus  on trouve le 6800 et ses d  riv  s   comme le 68HC11  produits    l   origine par la soci  t   Motorola  puis par Freescale Semiconductor   les microcontr  leurs Philips   en particulier les s  ries de P87 et P89   ainsi que les PIC de la  soci  t   Microchip     2 2  Les PIC    Les PIC forment une famille de microcontr  leurs d  velopp  s  par la soci  t   Microchip  Il existe plusieurs centaines de mod  les  regroup  s dans diff  rentes s  ries  PIC16  PIC18  etc   en fonction  de leurs caract  ristiques  Leurs prix varient entre approximative   ment 0 30 et 9 dollars am  ricains d   apr  s le site de Microchip     Chaque s  rie de PIC poss  de son propre langage assembleur   Les programmes   crits pour une s  rie ne sont en g  n  ral pas com   patibles pour les autres  Cependant  il est souvent facile de porter  de mani  re quasi syst  matique les programmes d   une s  rie de nu   m  ro faible vers une s  rie de num  ro plus grand     Les PIC poss  dent une architecture RISC  Leurs jeux d   instruc   tions se composent d instructions arithm  tiques et logiques  d   ins   tructions de branchement  et de quelques instructions sp  ciales    3  http   www elekt
15. e plus  lorsque le ramasse miette copie un bloc  il stocke dans  le premier champ du bloc original l adresse de la copie  La ques   tion est   comment faire pour les blocs de taille O  habituelle   ment appel  s atomes    On remarque cependant que les atomes    192  JFLA 2011    ne contiennent pas de donn  es  Et de plus  aucune valeur Objec   tive Caml ne correspond    un atome de tag diff  rent de 0  Il n   y a  donc qu   un seul atome possible   celui ayant pour tag 0  pour size  0 et pas de donn  es  Il suffit donc de l   allouer statiquement une  fois pour toute en dehors du tas et de toujours utiliser le m  me     Enfin  le ramasse miette doit pouvoir marquer un bloc comme    tant copi    Dans la repr  sentation standard des blocs en Objec   tive Caml  l en t  te contient un champ color qui est l   pour   a  Ce   pendant  dans la repr  sentation choisie ici  voir la section 4 2 2    l en t  te des blocs ne contient pas de champ color  Or  comme il  a   t   dit pr  c  demment  aucun bloc pr  sent dans le tas n   est de  taille 0  Pour marquer un bloc dans le tas comme   tant copi    il  suffit donc de lui mettre le champ size de l en t  te    0     5  Diff  rentes transformations du code octet    Pour installer un programme Objective Caml compil   en code   octet sur un PIC  il serait possible de l   crire dans la m  moire  programme    c  t   de l interpr  te et de la biblioth  que d   ex  cu   tion  L   interpr  te ZAM du PIC devrait alors effectuer exactement  le m  m
16. e travail que l interpr  te standard ocamlrun     savoir d     s  rialiser le tableau des variables globales  calculer les indices des  fonctions externes et d  buter l ex  cution du code     Il ne faut cependant pas oublier qu   un PIC a des ressources res   treintes  tant au niveau vitesse de calcul qu   au niveau quantit   de  m  moire disponible  Une telle approche impliquerait in  vitable   ment une initialisation atteignant facilement plusieurs dixi  mes  de secondes  et une forte contrainte sur la taille maximale des  programmes  De plus  il est possible d   effectuer des analyses sta   tiques sur le code octet dans le but d   liminer du code mort et des  allocations inutiles     Nous avons donc d  cid   de transformer l   ex  cutable g  n  r   par  ocamlc avant de le transf  rer sur le PIC  Cette transformation  consiste en une suite d   optimisations visant    am  liorer le temps    Les PIC programm  s en OCaml 193    d   initialisation  l occupation de la m  moire programme  l   occupa   tion de la m  moire vive et la vitesse d ex  cution     Cette passe suppl  mentaire sur le code octet a de plus lavan   tage de nous permettre de v  rifier  partiellement  la compatibi   lit   du programme avec la machine virtuelle  En particulier  des  bornes des entiers utilis  s doivent   tre compris entre  16384 et  16383 avec notre machine virtuelle 16 bits     5 1  Compression simple du code octet    Cette optimisation consiste en l   limination  instruction par ins   truction
17. est expliqu  e dans la section 4 4  Le champ tag est cod   sur un  octet comme dans la repr  sentation standard pour des raisons de  compatibilit    Le champ size est donc lui aussi repr  sent   sur un  octet  ce qui implique que les blocs contiennent au maximum 255    l  ments     4 2 3  Les fermetures    Une fermeture est un bloc particulier servant    repr  senter une  valeur fonctionnelle  Il y a deux types de fermetures   les fer   metures simples et les fermetures r  cursives  Les fermetures r     cursives sont cr    es lorsqu on d  clare des fonctions r  cursives ou  mutuellement r  cursives  Pour tout autre d  claration ou lors d   un  appel partiel de fonction  une fermeture simple est cr  ee     Une fermeture simple est un bloc ayant pour tag 247  pour  premier   l  ment le pointeur de code  et pour autres   l  ments l   en   vironnement  L environnement correspond aux valeurs associ  es  aux variables libres dans le corps de la fonction  et aux param  tres  d  j   pass  s    la fonction en cas d   appel partiel     La structure des fermetures r  cursives est plus compliqu  e que  celle des fermetures simples  Il s   agit de blocs contenant d   autres  blocs  Les blocs internes sont des blocs ayant le tag infixe  249    Le bloc externe a le m  me tag qu   une fermeture simple  247    L environnement est commun    toutes les fermetures  les internes    l   externe  et est stock      la fin du bloc externe     Voici la structure d   une fermeture r  cursive      DDRM 
18. ff  cin   qui  me partie  Migration vers 18F   mode d emploi  2010   http   www abcelectronique com bigonoff       2  Emmanuel Chailloux  Pascal Manoury  and Bruno Pagano   D  veloppement d   Applications avec Objective Caml  O   Reilly   2000  http    www pps  jussieu  fr Livres ora DA OCAML      3  Xavier Clerc  Cadmium  February 2010  http   cadmium   x9c fr distrib cadmium  pdf      4  Marc Feeley and Danny Dub    Picbit   a Scheme system for  the PIC microcontroller  In Scheme Workshop  pages 7 15   November 2003      5  Richard E  Jones  Garbage Collection   Algorithms for Auto   matic Dynamic Memory Management  John Wiley and Sons   July 1996      6  Xavier Leroy  The ZINC experiment   an economical imple   mentation of the ML language  Technical Report RT 0117   INRIA  February 1990      7      8      9      10      11      12      13      14     Les PIC programm  s en OCaml 207    Xavier Leroy  Damien Doligez  Jacques Garrigue  Didier  R  my  and J  r  me Vouillon  The Objective Caml system  re   lease 3 11    Documentation and user s manual  INRIA  No   vember 2008     Microchip   PIC18F2525 2620 4525 4620 Data Sheet   2008  http   wwl microchip com downloads en devicedoc   39626b pdf     Mikael Nordman  Flashforth  http   flashforth   sourceforge net      Oracle  Java Card 3 0 1 Platform Specification  May  2009  http   www oracle com technetwork java javacard   specs  jsp 136430 html     Philippe Paternotte  Pic Micro Pascal V1 4   User Manual   July 2010  http   
19. fixe d   octets  Une  valeur peut   tre  soit une valeur imm  diate  entier  bool  en  etc     soit l adresse d   un bloc allou   dans le tas Objective Caml  soit  une adresse en dehors du tas  Certaines primitives du langage   e g    Pervasives compare     a   gt     a   gt  bool  pour la comparaison en  profondeur de valeurs  et le ramasse miette  garbage collector ou  GC par la suite  ont besoin de parcourir le graphe m  moire  Il  est donc n  cessaire de pouvoir distinguer  pour chaque valeur  s   il  s agit d   une adresse ou d   une valeur imm  diate  Pour ce faire  nous  utilisons le bit de poids faible des valeurs comme cela est fait dans  ocamlrun  Les adresses   tant paires  leurs bits de poids faible est    188  JFLA 2011    0  Il suffit donc de coder toutes les valeurs imm  diates avec un bit  de poids faible de 1  Par exemple  le bool  en false est cod   Ob1   le bool  en true 0b11  et les entiers sous la forme 2 x n  1     Le nombre d   octets utilis   pour coder une valeur correspond  habituellement    l architecture de la machine r  elle sur laquelle la  machine virtuelle s ex  cute  4 octets sur une architecture 32 bits  et 8 sur architecture 64 bits   Cependant  les PIC utilis  s ici ont  une architecture 8 bits et la taille de la m  moire dynamique est  de plusieurs ko  Il est donc impossible de repr  senter une adresse  dans la m  moire dynamique sur un seul registre  De plus  avec  des valeurs cod  es sur un nombre impair d   octets  les adresses  n   aur
20. jective Caml le moyen  d acc  der    ces registres aussi facilement qu   en assembleur  La so   lution qui a   t   adopt  e est d utiliser les types sommes d   Objec   tive Caml dont on ma  trise la repr  sentation m  moire  Un type  somme repr  sente l   ensemble des registres sp  ciaux  et un autre  l ensemble des bits des registres sp  ciaux  La repr  sentation m     moire des valeurs de ces types correspond dans un cas    l   adresse  des registres  et dans l   autre    adresse des registres concat  n  e  avec les masques d   acc  s aux bits  La manipulation des registres  sp  ciaux et de leurs bits est alors possible depuis le monde Objec   tive Caml en passant par des fonctions externes     La programmation sur PIC n   a pas les m  mes domaines d   appli   cation que la programmation sur ordinateur  Il est donc int  res   sant de fournir au programmeur Objective Caml un ensemble de  biblioth  ques pour lui permettre de se rapprocher des domaines  d applications standards des PIC  Par exemple  il est habituel d   uti   liser un PIC pour contr  ler un petit afficheur LCD  Le PIC doit  alors appliquer des protocoles assez bas niveau pour communi   quer avec l   afficheur  Il est int  ressant de fournir au programmeur  Objective Caml une interface haut niveau lui permettant d   utiliser  facilement un afficheur LCD  De plus  on aimerait avoir une cer   taine g  n  ricit   vis    vis de l   afficheur  ou plus simplement vis      vis de la o   est branch   l   afficheur  Pour
21. les instruc   tions  dans les PIC permet de pr  dire ais  ment les temps d   ex  cutions     194  JFLA 2011    les adresses de sauts ne sont plus cod  es par des adresses relatives   offsets   mais par des adresses absolues  De m  me  les entiers ne  sont pas cod  s simplement en binaire mais plut  t dans leur repr     sentation m  moire  sous la forme 2 x n  1   Ceci permet d   viter  quelques calculs arithm  tiques  et par cons  quent quelques cycles  machines    l ex  cution     5 2  Optimisation du chargement des variables globales       initialisation du programme  le tableau des variables glo   bales est habituellement d  s  rialis    Deux solutions ont   t   envi   sag  es et cod  es pour tenter d   am  liorer le temps d   initialisation   La deuxi  me s   est r  v  l  e   tre bien meilleure  tant sur le temps  d   ex  cution que sur la m  moire programme utilis  e     La premi  re solution est d   ajouter au d  but du programme du  code octet optimis   calculant le tableau des variables globales   Cette solution s   est r  v  l  e avoir un gain faible sur le temps d   ini   tialisation par rapport a la solution naive  De plus  elle apportait  un grave probl  me   augmentation consid  rable de la taille du  code octet     La deuxi  me solution est de pr  calculer  par ordinateur  avant  le chargement du programme sur le PIC  l     tat de la pile et du  tas apr  s la d  s  rialisation du tableau des variables globales  Le  contenu de la partie utilis  e du tas et de la 
22. lise un Stop  amp  Copy sur la g  n     ration jeune  GC mineur  et un Mark  amp  Sweep incr  mentiel sur  l ancienne  GC majeur   Enfin il peut   tre compactant si besoin  est  Dans la r  alisation pour PIC  nous avons choisi de coder un  simple Stop  amp  Copy qui ne cherche pas a optimiser la localit   spa   tiale  En effet  un PIC n   ayant pas de cache  il n   y aucun int  r  t     tenter d am  liorer cette derni  re     Il faut n  anmoins faire attention    certains d  tails  Comme cela  a   t   dit dans la section 4 2 3  les blocs infixes n  cessitent un trai   tement particulier     D autre part  le ramasse miette doit faire attention    ne pas  confondre un pointeur de code et un pointeur dans le tas  Sur un  ordinateur  ce probl  me ne se pose pas car la m  moire est en un  seul morceau et les adresses dans le code ne peuvent pas corres   pondre    des adresses dans le tas  Sur un PIC  c   est diff  rent car il  y a plusieurs m  moires  Les pointeurs de codes sont des adresses  dans la m  moire programme et les pointeurs dans le tas sont des  adresses dans la m  moire vive  Les collisions sont donc a priori  possibles  En fait  sur ces PIC  la m  moire vive est beaucoup plus  petite que la m  moire programme  Il suffit donc de ne pas mettre  de code octet dans la m  moire programme    des adresses valides  dans la m  moire vive  Cette m  moire n   est pas perdue car on peut  mettre    la place le code de l   interpr  te et de la biblioth  que d   ex     cution     D
23. mes Objective Caml sur les PIC   Elle d  taille les techniques que nous avons utilis  es pour implan   ter l interpr  te de code octet et la biblioth  que d   ex  cution  ainsi  qu   un ensemble d   algorithmes permettant de transformer le code   octet pour am  liorer les performances     4 1  La cha  ne de production    Le sch  ma de la figure 1 d  crit la cha  ne de production du code  source Objective Caml jusqu   au fichier hexad  cimal    transf  rer    Les PIC programm  s en OCaml 187    sur le PIC  Le programme Objective Caml est d   abord compil    en code octet gr  ce au compilateur standard ocamlc  Le code g     n  r   est ensuite nettoy    par un algorithme d   limination de code  mort  et compress    Le binaire obtenu est alors li   avec l   inter   pr  te et la biblioth  que d   ex  cution  tous deux   crits en assem   bleur  Le programme ainsi obtenu est assembl   et transf  r   sur le  PIC           Compilation en bytecode Nettoyage du bytecode   ocamlc   ocamiclean     Programme OCaml Bytecode OCaml ER    Compression du bytecode   bctrans                                    Bytecode OCaml                  Assembleur       Hexadecimal       Interpr  te        Transfert sur le PIC            Biblioth  ques       Assemblage   gpasm     Figure 1     Cha  ne de production             4 2  Repr  sentation des donn  es    4 2 1  Les valeurs Objective Caml    Objective Caml utilise une repr  sentation uniforme des don   n  es o   chaque valeur est cod  e sur un nombre 
24. moire de calcul volatile  et une m  moire de masse non volatile  Toutes trois ont une ca   pacit   tr  s limit  e  en comparaison avec ce qui se fait par ailleurs  en    mat  riel informatique grand public     En effet  avec l   unit    de calcul cadenc  e    une fr  quence de quelques MHz  selon les  s  ries et mod  les adopt  s  le nombre d instructions ex  cut  es par  seconde varie entre 1 et 40 millions  La m  moire de calcul a une  capacit   incluse entre 160 et 128ko  La m  moire de masse a une  capacit   comprise entre moins d   un ko et 512 ko  La taille des  mots machine d  pend des s  ries de PIC  celles disponibles sont  le plus souvent 8 bits  s  ries PIC10  PIC12  PIC16 et PIC18   16  bits  s  ries PIC24  PIC30  PIC33  ou 32 bits  s  rie PIC32  pour les  plus r  cents et puissants  On peut remarquer que cette capacit    de calcul est comparable    celles de microprocesseurs des ann  es  1980  e g   Intel 8080  Zilog Z80      Ces puces sont habituellement programm  es en assembleur di   rectement ou bien    l   aide d   un sous ensemble de Basic ou C  Ce   pendant  le jeu d instructions assez particulier des PIC rend la g     n  ration de code PIC assez difficile  Par exemple  il n   y a pas d   ins     l http   www microchip com    Les PIC programm  s en OCaml 179    truction mat  rielle pour la division de nombres entiers sur la s  rie  PIC18  et les instructions pour la multiplication sont absentes sur  les s  ries ant  rieurs  De nombreux compilateurs n   app
25. n   existaient pas dans le code original  mais  sont apparus lorsque l   on a supprim   des instructions de cr  ation  de fermetures    l   tape 2     Cet algorithme a   t   enti  rement cod   en 1800 lignes de code  Objective Caml  Il a   t   aussi test   avec ocamlrun sur les compi   lateurs ocamlc et ocamlopt et semble fonctionner correctement     6  Environnement de d  veloppement    L ensemble des algorithmes d  crits dans les sections pr  c     dentes ont   t   implant  s et forment une application compl  te  permettant de programmer les PIC de la s  rie PIC18 en Ob     Les PIC programm  s en OCaml 197    jective Caml  Pour utiliser cette application  il faut prendre en  compte certains points  En particulier  la biblioth  que standard  a   t   en partie modifi  e   certaines fonctionnalit  s ont   t   retir  es  et d   autres ajout  es pour correspondre aux besoins sp  cifiques de  la programmation sur PIC  De plus  pour permettre le debogage  des programmes Objective Caml sur PIC  il a   t   cod   une sorte  de simulateur  Enfin  les ressources d   un PIC   tant particuli  re   ment restreintes  il faut ma  triser les performances de la machine  virtuelle     6 1  Une nouvelle biblioth  que standard Objective Caml pour  PIC    Une partie de la biblioth  que standard n   a pas   t   port  e sur  PIC  Parmi les diff  rents modules  certains ont   t   copi  s tels quels  et d   autres ont   t   restreints  recod  s  ou supprim  s  En particu   lier  toutes les fonctions 
26. ne  abstraite pour cibler l architecture PIC  En effet  la conception  d   une machine virtuelle Scheme pour PIC a d  j     t   entreprise  au sein des projets PICBIT  4  et PICOBIT  12  pour un sous   ensemble du R4RS  PICBIT adapte aux contr  leurs PIC un envi   ronnement Scheme tr  s compact  La machine abstraite   crite en C  est traduite par un compilateur C pour PIC  PICOBIT   tend cette  d  marche en y adjoignant un compilateur C  appel   SIXPIC  sp     cifique aux PIC et permettant d obtenir un meilleur code en parti   culier pour la machine abstraite  Comme indiqu   lors de analyse  des performances  l   criture directe de l interpr  te ZAM et de la  biblioth  que d   ex  cution en assembleur PIC  combin  e    la com   paction du code  donne de tr  s bonnes performances  En cela les  d  marches PICOBIT et ocapic divergent  la premi  re privil  giant  la portabilit   sur d   autres architectures et la deuxi  me l efficacit    sur PIC     On retrouve cette approche machine abstraite pour le langage  Java avec la Plateforme Java Card  10   N  anmoins m  me en li   mitant fortement le langage Java  en particulier la gestion auto   matique de la m  moire  l   absence de certains types  entiers 64  bits  et de contr  le comme les threads   et en   crivant dans un  style imp  ratif  on obtient toujours un code important qui ne peut  tenir sur des microcontr  leurs actuels     Les PIC programm  s en OCaml 205    9  Conclusion    Cette r  alisation permet de programmer des mi
27. onc en un saut au  code de la fonction externe  puis en le d  pilement des arguments  apr  s le retour de la fonction     Avant d     tre transf  r   sur le PIC  le code octet du programme  subit des transformations d  crites dans la section 5 pour r  duire  sa taille  En particulier  celles ci convertissent la section PRIM en  une table d   indirections  Ceci permet d   avoir un appel aux fonc   tions externes en temps constant   9 cycles machine  7 instruc   tions      Depuis une fonction externe  il est possible de faire tout ce qui  est possible depuis le monde Objective Caml     savoir lancer une  exception  appeler une fonction Objective Caml en utilisant sa fer   meture  acc  der aux variables globales  etc  Il est m  me possible  d   acc  der a la totalit   de la m  moire en lecture et en   criture   Il faut donc prendre soin de ne pas rendre incoh  rent le graphe  m  moire Objective Caml  sous peine de perturber le gestionnaire  m  moire par la suite  Ceci est d   autant plus vrai sur un PIC car il  n   y a pas de syst  me d   exploitation et donc pas de v  rification des  acc  s m  moire  Dans ces conditions  un programme peut conti     Les PIC programm  s en OCaml 191    nuer    s   ex  cuter ind  finiement avec un comportement difficile   ment pr  visible     4 4  Gestion automatique de la m  moire    Le ramasse miettes de la distribution standard d   Objective  Caml combine diff  rentes techniques  5   C   est un GC incr  men   tal a deux gen  rations  2   Il uti
28. or fr     oN Au       NH HR    182  JFLA 2011    permettant par exemple d   acc  der    la m  moire contenant le pro   gramme  Voici un petit extrait de code assembleur PIC      exemple_de_code    label  tblrd     lecture dans la m  moire flash  movf TABLAT  W   transfert d   un registre vers W  addwf FSROL  W   addition du registre FSROL et W  rcall SOUS_PRGM   appel au sous programme SOUS_PRGM  btfsc STATUS  C   saut de l   instr suivante si CARRY 0  incf FSROH  F   incr  mentation de FSROH  return   retour a 1   appelant    Les PIC poss  dent en g  n  ral quatre m  moires distinctes  Lune  est une m  moire non volatile utilisant la technologie flash  ap   pel  e    m  moire programme     Comme son nom l indique  elle  contient le programme      x  cuter  La programmation d   un PIC  consiste donc en l     criture du programme dans cette m  moire   Elle est en g  n  ral r  inscriptible de 1 000    100 000 fois selon les  PIC     Pour stocker dynamiquement des informations  les PIC utilisent  une m  moire constitu  e uniquement de registres  Le nombre de  registres varie selon les PIC entre quelques dizaines  jusqu      plus  d   une centaine de milliers  Ils sont accessibles directement par  l unit   de calcul  en lecture et en   criture     Dans les anciennes s  ries de PIC  la m  moire programme n   est  pas accessible en   criture depuis le PIC  mais uniquement    la  programmation  Il est cependant parfois n  cessaire de stocker des  informations devant   tre conserv  e
29. ortent que  des commodit  s minimales tant au niveau des constructions de  langage prises en charge qu   au niveau de la biblioth  que standard   La faible quantit   de ressources rend leur programmation assez  d  licate et parfois tr  s ardue  notamment lorsqu il s   agit d utiliser  des algorithmes complexes sur des structures de donn  es dyna   miques     Nous proposons d utiliser un langage applicatif riche  non  seulement fonctionnel mais aussi modulaire  imp  ratif et    ob   jets  statiquement typ       gestion de m  moire automatique  afin  de faciliter la programmation de telles puces et de rendre les logi   ciels plus s  rs  Nous introduisons ainsi Objective Caml  7  dans le  monde des outils d  di  s    la programmation des microcontr  leurs  PIC     Objective Caml est d  velopp   et distribu   par l INRIA avec deux  compilateurs  Le premier   met du code octet pour une machine  virtuelle  appel  e ZAM  6  par la suite  incluse dans la distri   bution  Le second   met du code pour le processeur mat  riel de  la machine r  elle qui h  bergera les programmes ainsi compil  s   Les deux compilateurs partagent une biblioth  que d   ex  cution im   plant  e en C     En se basant sur l existant  pour pouvoir ex  cuter sur un PIC un  programme   crit en Objective Caml  nous avons eu    choisir entre  compl  ter le g  n  rateur de code du compilateur natif pour cibler  les machines PIC ou bien fournir une machine virtuelle fonction   nant sur PIC pour interpr  ter les progr
30. pile est alors stock    octet par octet dans la m  moire programme     l   initialisation  l in   terpr  te pr  sent sur le PIC n   a qu      copier un segment de m  moire  programme dans la m  moire vive et d  marrer l ex  cution  Gr  ce     cette technique  le temps d   initialisation dans le pire cas  c   est      dire si le tas et la pile sont remplies    l   initialisation  sur un PIC  ayant une horloge    10MHZz est au maximum de 2 5ms  Ce temps  tr  s faible est d   au fait que la m  moire dynamique des PIC de la  s  rie PIC18 est particuli  rement petite   au maximum 4ko     Les PIC programm  s en OCaml 195    5 3    limination de code mort  ocamlclean     Les optimisations d  crites pr  c  demment ne se sont pas r  v     l  es suffisantes pour permettre l   utilisation des objets Objective  Caml sur PIC  En effet  la m  moire dynamique du PIC n     tait pas  suffisante pour supporter l   ensemble des fermetures cr    es    Pini   tialisation du module Camlinternal00 et de ses d  pendances  La  m  moire   tait alors remplie de fermetures dont la majorit     tait  inutilis  e  Le codage d   un algorithme d     limination de code mort  a alors permis l   utilisation de la couche objet d   Objective Caml sur  PIC     Cette optimisation est bas  e  entre autres  sur une analyse sta   tique du flot de donn  es et du flot de contr  le  Elle consiste en  l   limination du code octet de fonctions non utilis  es ainsi que de  la cr  ation des fermetures associ  es  Il s   en s
31. possible de programmer dans des langages de  plus haut niveau  On trouve principalement des sous ensembles  de C et de Basic interfac  s avec MPLAB ou autonomes     Il y a trois d  marches dans les autres langages propos  s   com   pilateur natif  comme pour C   interpr  te  comme pour Basic    compilation vers une machine abstraite puis interpr  tation du  code octet comme pr  sent   dans cet article     Pour les compilateurs natifs  on trouve des variations autour  du langage Pascal comme Pic micro Pascal  11  qui s int  gre aux  outils de MPASM MPLINK de MPLAB tout en proposant un IDE  propre  Un autre langage plus   loign   de Pascal  Jal  14  a pro     204  JFLA 2011    pos   d  s 2004 un compilateur libre  Une nouvelle version  Jal2  a    t   d  velop  e par une communaut   toujours active     Pour les interpr  tes  on rencontre principalement des implan   tations du langage Forth qui ont l avantage d     tre petites et donc  de pouvoir tenir sur un microcontr  leur  FlashForth  9  est un  syst  me Forth autonome implant   sur PIC18F qui apporte un in   terpr  te et un compilateur chargeur  les deux embarqu  s sur le  microcontr  leur  Il existe par ailleurs des compilateurs Forth qui  permettent de charger le code comme PicForth  13   La gestion  des ports et des interruptions est en r  gle g  n  rale assez facile     manipuler en Forth comme le montre l   exemple de compilation  sur le site de PicForth     Nous ne sommes pas les premiers    utiliser l   approche machi
32. s lorsque le PIC n   est plus ali   ment     lectriquement  Pour ce faire  certains PIC poss  dent une  EEPROM  de faible capacit    accessible en lecture et en   criture  depuis le PIC  Ces m  moires sont en g  n  ral r  inscriptibles entre  1 000 000 et 10 000 000 de fois     Les PIC poss  dent un m  canisme d   appel de proc  dure  Il est  bas   sur les instructions assembleur call et return permettant  respectivement d   appeler une proc  dure et de retourner a lappe   lant  Cependant  pour la plupart des s  ries de PIC  la taille des    4  Electrically Erasable Programmable Read Only Memory ou m  moire morte program   mable effa  able   lectriquement     Les PIC programm  s en OCaml 183    registres ne suffit pas pour y stocker des adresses de la m  moire  programme  Les adresses de retour sont alors stock  es dans une  pile particuli  re  La m  moire constituant cette pile est organis  e  en mots dont la taille ne d  pend pas de l architecture de l   unit   de  calcul  mais de la taille de la m  moire programme  La taille de ces  mots est par exemple de 14 bits pour les PIC de la s  rie PIC16     Le tableau 1 donne  pour chaque s  rie de PIC  les valeurs ex   tr  mes de leurs principales caract  ristiques techniques                                      Famille Archi bit  Flash ko  Registres o  EEPROM o  MIPS  PIC10 8 375  gt   75 16  gt  24 0 1 2  PIC12 8  75   7 25     256 0     256 1 8  PIC16 8  75     28 25     1536 0     256 4 8  PIC18 8 4     128 256     4096 0    
33. secondes sur le PIC18F4620    10MHz  On ob   serve un facteur 113 entre les deux temps d   ex  cution     Les PIC programm  s en OCaml 203    7 4  Implantation d   un jeu de strat  gie  algorithme minimax    Pour valider notre approche  nous avons implant   un jeu de  plateau    deux joueurs  Le premier joueur est un humain utilisant  une interface compos   de boutons poussoir  Le second joueur est  artificiel     incarn      par un programme ex  cut   sur le PIC   Le  programme indique au joueur les actions et l avancement du jeu  par l interm  diaire d   un afficheur LCD     La r  activit   du PIC est satisfaisante malgr   les multiples d     clenchements du ramasse miette lors de l   ex  cution de l   algo   rithme de r  flexion  En effet  le temps de calcul est en moyenne  d   une demie seconde et toujours inf  rieur    deux secondes  Un hu   main exp  riment   a une certaine difficult      gagner  ce qui laisse  penser que les algorithmes implant  s sont satisfaisants     Le jeu a   t   implant   en 667 lignes de code Objective Caml   Une implantation de ce jeu en assembleur PIC ou dans un langage  de bas niveau obligeant    g  rer manuellement le peu de m  moire  disponible sur un PIC aurait   t   tr  s ardue voire quasi impossible     8  Travaux connexes    L environnement de d  veloppement MPLAB fourni avec les mi   crocontr  leurs PIC propose un assembleur  MPASM   un   diteur  de liens  MPLINK  et un simulateur pour tester et mettre au point  un ex  cutable  Il est 
34. ssible de tracer ex  cution du  code en ins  rant des    printf        Il existe des   mulateurs de PIC comme gpsim  et la plupart des  environnements de d  veloppement int  gr  s comme MPASM ou  PIC simulator IDE en contiennent  Cependant  il n   est pas tr  s pra   tique d utiliser de tels simultateurs pour d  boguer les programmes  Objective Caml sur PIC  En effet  ces simulateurs parcourent le  code de la machine virtuelle  et il est difficile de faire le lien entre  les instructions simul  es par le d  boguer et le code source Objec   tive Caml     Nous avons donc cod   un outil premettant au programmeur  Objective Caml de simuler l   ex  cution de ses programmes sur un  PIC  Comme on peut le voir sur la cha  ne de production d  crite  dans la figure 1  le programme Objective Caml est d   abord compil    en un ex  cutable standard pour ordinateur  Cet ex  cutable est en    8  Technique de mise au point pour des applications embarqu  es sur microcontr  leur  consistant    le connecter    un ordinateur et ex  cuter le code dans le microcontr  leur   L ordinateur peut alors contr  ler partiellement le flux d   ex  cution du programme dans  le microcontr  leur et acc  der    sa m  moire     200  JFLA 2011    fait li      une biblioth  que d   ex  cution particuli  re qui intercepte  les appels aux fonctions externes de lecture et d   criture dans les  registres sp  ciaux du PIC  Lors de l   ex  cution sur un ordinateur de  cet ex  cutable  le processus lanc   ouvre diff  ren
35. ste    250   l     ments    tant donn   que le tas du PIC18F4620 est limit      17920   n 250 est arbitrairement une bonne valeur     let rec npremiers n     if n  0   then      else npremiers_aux  n 1   2    and npremiers_aux n r     if n  0   then r   else npremiers_aux n 1   premier_suivant List hd r 1  r    r   and premier_suivant n 1         202 JFLA 2011    if est_premier n 1  then n  else premier_suivant  n 1  1  and est_premier n   function     a   e  true   Peet lee  if n mod e       then false  else est_premier n tl  retro    for i   1 to 80 do  ignore npremiers 250   done    Nous comparons    titre indicatif les temps d   ex  cutions obte   nus sur un ordinateur moderne  Linux 2 6 32 32 bits  processeur  Intel Atom Z520 1 33GHz et m  moire vive 1Go DDR2 667MHz   et un PIC18F4620 cadenc      10MHz  en moyenne sur 5 ex  cu   tions  Dans les deux cas  le m  me compilateur ocamlc est utilis     distribution Objective Caml 3 12 0      Nous obtenons alors 3 74 secondes pour l ordinateur a  1 33GHz et 472 secondes sur le PIC18F4620    10MHz  On ob   serve un facteur 126 entre les deux temps d   ex  cution     7 3  Jeu du solitaire    Le test classique de performances du jeu du solitaire a   t   ef   fectu   dans les m  mes conditions que celles pr  sent  es dans la  section pr  c  dente  Nous avons mesur   les temps d   ex  cutions sur  ordinateur moderne grand public et sur le PIC18F4620     Nous obtenons cette fois ci 7 2 secondes pour l   ordinateur     1 33GHz et 812 
36. t des valeurs pr  calcul  es par le compi   lateur  par exemple des flottants  des cha  nes de caract  res  des  exceptions   ainsi que des cases non initialis  es qui seront affec   t  es    l ex  cution        PRIM   contient les noms de fonctions externes  Il associe un  num  ro    chaque fonction externe pour y acc  der rapidement     D   autres sections sont parfois pr  sentes  Elles permettent de re   p  rer des biblioth  ques dynamiques  DLLS et DLPT   ajouter des  informations de d  bogage  DBUG   ou autre  Il est difficile de leur  donner un sens sur PIC  nous avons donc d  cid   de les ignorer  lors du portage        Vinitialisation  la machine virtuelle d  s  rialise le tableau des  variables globales  associe chaque fonction externe avec son nu   m  ro  et d  marre l   ex  cution du code octet  Lors de l   ex  cution   elle g  re diff  rents   l  ments       stack   une pile d   valuation     accu   un accumulateur pouvant   tre vu comme le sommet de  la pile        heap   un tas contenant les valeurs allou  es        code   un segment contenant le code octet    ex  cuter      pc   un compteur ordinal pointant sur le segment contenant  le code octet       data   un tableau contenant les valeurs des variables globales         env   une variable pointant  lors de l   valuation du corps d   une  fonction  vers la fermeture associ  e  Celle ci contient entre autres  les valeurs des variables libres du corps de la fonction  ce qui per   met d   y acc  der rapidement   
37. t pour v  rifier a base de tests d   autres propri  t  s du programme  comme l exp  rience du projet Couverture   la montr   dans le  cadre du d  veloppement certifi       La machine virtuelle Objective Caml qui a   t   cod  e dans ce  projet fonctionne pour les microcontr  leurs de la s  rie PIC18  Le  portage de cette machine virtuelle sur les s  ries ant  rieurs des  PIC  PIC10    PIC16  semble difficile voire impossible  En effet  la  quantit   de registre et de m  moire programme risquerait d     tre  insuffisante  Sur les s  ries de PIC plus avanc  es  PIC24    PIC32      9 http   www algo prog info ocaml_for_pic   10 http   www projet couverture com     206  JFLA 2011    le portage de cette machine virtuelle est tr  s rapide car les as   sembleurs des s  ries r  centes sont presque compatibles avec celui  de la s  rie PIC18  Il faut n  anmoins remarquer que le code de la  machine virtuelle pourrait alors   tre optimis   pour tirer parti des  fonctionnalit  s apport  es par les nouvelles s  ries de PIC  Enfin  le  portage sur d   autres types de microcontr  leurs  e g   AVR  Atmel   Philips  demanderait un travail cons  quent car les architectures  internes et les assembleurs sont diff  rents     Enfin  cette exp  rience de portage d   Objective Caml sur PIC  prouve qu il est possible d utiliser des langages de haut niveau  pour programmer des architectures exotiques ayant de tr  s faibles  ressources     R  f  rences     1  Bigonoff  La programmation des PIC par Bigono
38. tes fen  tres per   mettant de visualiser les actions du PIC  Il est alors possible de  simuler les interactions du PIC avec diff  rents composants   lec   troniques  Par exemple  lorsque l   on ex  cute le programme corres   pondant au code Objective Caml de la section 6 1 gr  ce    la com   mande suivante  on peut visualiser une fen  tre repr  sentant la r     action d   un afficheur LCD aux actions du PIC comme sur la figure  2  Comme le programme s ex  cute sur un ordinateur  on peut uti   liser les outils standard de d  bogage  par exemple ocamldebug   pour tracer le code Objective Caml          hw    ocapic_lcd_ simulator 16x2 e RDQ rs RD2 rw RD1 bus PORTC                Figure 2     Capture d     cran de la simulation d   un PIC connect       un afficheur LCD    7    tude de performances    7 1  Performances g  n  rales du syst  me OCAPIC sur le  PIC18F4620    La vitesse d ex  cution moyenne des programmes sur un PIC  ex  cutant 10 000 000 instructions machine par seconde est de  400 000 instructions de code octet par seconde  Autrement dit  il  faut en moyenne 25 cycles machine pour ex  cuter une instruction  de code octet  De plus  le PIC perd en moyenne 7 5 cycles machine  dans la gestion de chaque opcode  Ceci implique que la proportion  du temps d   ex  cution des instructions utiles par rapport au temps  d   ex  cution de la gestion du code octet est de 70      1  2  3  4  5  6  7   8  9    Les PIC programm  s en OCaml 201    La taille de la m  moire programme du
39. uit un gain  d   une  part sur la taille du code octet et d   autre part sur l occupation de  la m  moire dynamique  Gr  ce    cette optimisation  il est possible  de mettre sur un PIC des programmes plus gros et allouant plus   De plus  comme le gestionnaire m  moire qui a   t   cod   pour PIC  n   est qu   un simple Stop  amp  Copy  tous les blocs vivant sont copi  s  a chaque lancement du ramasse miettes  Sa fr  quence de lance   ment ainsi que son temps d   ex  cution sont eux aussi am  lior  s par  l   limination des fermetures non utilis  es     Le principal inconv  nient de cette optimisation est qu   elle casse  le chargement dynamique de modules  Ceci n   est pas une g  ne  pour le projet dans sa globalit   car il est difficile de donner un  sens    du chargement dynamique de code sur un PIC        Le programme ainsi cr     prend en entr  e un ex  cutable stan   dard pour la machine virtuelle Objective Caml  et g  n  re en sortie  un nouvel ex  cutable standard nettoy    Il peut se d  composer en  trois routines  Elles sont ex  cut  es en boucle jusqu      l   obtention  d   un point fixe     7  Les utilisateurs qui ne visent pas 4 embarquer leur code Objective Caml sur PIC  peuvent s   en servir si le chargement dynamique ne leur est pas n  cessaire  Cet outil   ocamlclean  est distribu   dans une archive ind  pendante pour ne pas obliger a r  cu   p  rer tout OCAPIC     196  JFLA 2011    1  On analyse les variables globales    nettoyer   pour chaque  bloc point   p
40. urs    Les microcontr  leurs sont des circuits int  gr  s programmables   Ils regroupent  au sein d   une m  me puce  les diff  rents   l  ments  que l   on trouve habituellement dans l   unit   centrale d   un ordina   teur personnel  En particulier  ils contiennent une unit   de cal   cul  diff  rentes m  moires volatiles et non volatiles  ainsi qu   un en   semble    d   interfaces internes    facilitant la communication avec  le monde ext  rieur  Ils sont con  us pour   tre programm  s par un  ordinateur  puis plac  s dans un circuit   lectronique dans lequel ils  effectuent un travail plus ou moins complexe  Apr  s programma   tion  ils peuvent fonctionner ind  pendamment de tout ordinateur     Leurs principaux domaines d   application sont l   industrie pour  la fabrication de machines outils  la domotique  machines    caf     appareils   lectrom  nagers  etc    et l     lectronique grand public     2 http   www algo prog info ocaml_for_pic     Les PIC programm  s en OCaml 181    Diff  rents exemples d applications sont d  taill  s dans des revues  d   lectronique  comme par exemple la revue Elektor   Leur pro   duction en grande s  rie fait baisser leur prix de revient  en g  n     ral de l   ordre de quelques dollars am  ricains   Ceci les rend int     ressants pour les amateurs comme pour les industriels     Ils peuvent dans beaucoup de cas remplacer les architectures  d  di  es  c   est    dire les circuits int  gr  s con  us mat  riellement  pour une t  che pr  cis
41. virtuelle Objective Caml d  velopp  e en as   sembleur PIC18  selon les sp  cifications de la machine de r  f  rence distribu  e par l INRIA   Celle ci permet d   utiliser la totalit   du langage Objective Caml sans aucune restriction  Les  performances obtenues sont par ailleurs tr  s satisfaisantes et soutiennent la pertinence de  l approche adopt  e    Mots Cl  s   Microcontr  leur PIC18  Objective Caml  Machine Virtuelle       178  JFLA 2011    1  Introduction    Lors de la conception d   un circuit   lectronique  si celui ci n     cessite une unit   de calcul  l implantation de celle ci est soit un  assemblage de portes logiques  programmation mat  rielle   soit  un microcontr  leur  programmation logicielle   Les premiers ont  un tr  s faible co  t de fabrication s   ils sont produits en tr  s grande  quantit    L   avantage des seconds est qu   ils sont de toute mani  re  fabriqu  s en masse afin de les rendre le plus accessible possible  en r  duisant au maximum leur prix  et il suffit d   y embarquer un  logiciel pour qu   ils puissent accomplir une t  che sp  cifique     Les PIC  1  8  sont des microcontr  leurs programmables dispo   nibles    bas prix  commercialis  s par la soci  t   Microchip   Leur  facilit   d int  gration dans un petit circuit   lectronique fait qu   ils  sont notamment tr  s utilis  s par les    bricoleurs en   lectronique      en plus des utilisateurs industriels  e g   robots   lectrom  nagers    Ils int  grent une unit   de calcul  une m  
42. www  pmpcomp  fr     Vincent St Amour and Marc Feeley  Picobit   A Compact  Scheme System for Microcontrollers  In International Sym   posium on Implementation and Application of Functional Lan   guages  IFL   09   pages 1 11  September 2009     Samuel Tardieu  Picforth programmer manual  http   www   rfc1149 net devel picforth     Wouter van Ooijen et al  Jal  not    Just Another Language   May 2004  http   jal sourceforge net manual     
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
Accutrend Plus - Skolebutik.dk  Whistleインストレーションマニュアル(日本語) *参考用  DIAGNOSTICS - Prompt Trading Co.      HTM 2009 Pneumatic air tube transport systems  Atlus THE TESTAMENT OF SHERLOCK HOLMES  GE WSSH300 User's Manual  エクリプス アーマ2 バーナー      Copyright © All rights reserved. 
   Failed to retrieve file