====== OCaPIC: Programming PIC microcontrollers in OCaml ====== This project allows to run OCaml programs on PIC microcontrollers. ===== Meeting of two worlds ===== - The [[http://caml.inria.fr/|OCaml]] language: * High-level multi-paradigm programming language. * Type-safetiness, robustness (strong static type check). * Functional paradigm (first-class functions and closures). * Imperative paradigm (mutable data, loops). * Object-oriented paradigm. * Exceptions. * Modules and functors. * Parametric polymorphism. * Automatic memory management. - The [[http://www.microchip.com/|PIC]] microcontrollers: * PIC = Programmable Integrated Circuit. * Low power consumption: a few [[http://en.wiktionary.org/wiki/milliwatt|mW]]. * Low cost: a few dollars. * RAM memory: a few kB. * Flash memory: a few tens of kB. * Clock: a few MHz ===== How can PICs be programmed in OCaml? ===== - Write your program in OCaml. - Compile the source code with the ''ocapic'' command. - Test your program with the OCaPIC simulator (optionnal). - Assemble the assembler file produced by ''ocapic'' (for example, with [[http://gputils.sourceforge.net/|gpasm]]). - Transfer the resulting hexadecimal code to the PIC. - Plug the PIC into a circuit, and run it! ===== OCaPIC Features ===== * OCaml Virtual Machine implemented in PIC18 assembler (compactness of binaries + efficiency). * PICs supported: all of the PIC18 family. * Porting of a large part of the OCaml runtime and standard library. * PICs specific libraries: LCD display, EEPROM, high level serial connection facilities, interruption catching, etc. * Two PIC simulators for OCaml programs to test them before programming the PIC. * OCaml library to write a component simulator as an OCaPIC simulator plug-in. * Deadcode elimination (with OCamlClean). * OCaml bytecode compression. * Fully tested, actually works with real programs. * Library documentation: manpages included in the [[download|distribution]]. * A [[documentation|tutorial]] is now available. ===== Authors ===== * Project author and developper: BenoƮt Vaugon * Project supervisor: Philippe Wang * Project meta-supervisor: Emmanuel Chailloux * Contact : [[ocapic@algo-prog.info?subject=OCaPIC|ocapic@algo-prog.info]]