Ling on PIC32 microcontroller
-
Upload
viktor-sovietov -
Category
Software
-
view
463 -
download
2
Transcript of Ling on PIC32 microcontroller
LING on MIPS architectureCloudozer, 26 Jun 2015
PIC32MZPIC32MZ is a MIPS architecture MCU of Microchip
• 2 MB flash memory (program memory);
• 512 KB built-in RAM (data memory);
• MIPS MicroAptiv™ core, 200 MHz
LING: porting
https://github.com/EarlGray/ling
• LING core without libraries: 36 kloc of C code;
• Different toolchain: xc32-gcc; we have to flash an IHEX image to a microcontroller to run the VM or to simulate PIC32 using MPLABX IDE tools.
• the xc32 toolchain and its header files do not support C99 properly; moved to C89 (mostly correcting variable declarations in for clauses);
LING: porting• Platform-specific parts have already been separated in
LING code (mostly), but the core code still needed some adjusting like #ifdef-ing LWIP calls and changing C99 code to C89;
• The platform-specific code has been mostly rewritten (~600 loc);
• There are numerous stubs at the moment: fake timers, bif_not_implemented for regular expression BIFs, stubs for MD5 and SHA BIFs; domain_poweroff() just hangs the processor; there are fake Nettle and LWIP headers to get the VM compiled.
LING: I/O• MPLABX debug output support is unstable (it works for
some PIC32 models and does not for others), can’t be used in a simulator);
• Initially used a ring buffer in memory for logging + debugger;
• we have an UART driver now for debug output; thanks a lot to Serge Vakulenko’s work on PIC32 emulation in Qemu and his LiteBSD source code;
LING: hello, PIC32
LING: our plans• Making it work properly: real timers, I/O, power
management, crypto; improving GC for PIC32;
• support for Erlang stdlib and loadable LING modules; 9p;
• optimizing memory usage; at the moment: Data RAM: 46 memory pages used at startup out of 128;Program RAM: 1.1 MB out of 2 MB;
• A testbed for driver construction in Erlang;
• An Ethernet driver in Erlang;