running scheme on a pic microcontroller - universit© de montr©al

1
Running Scheme on a PIC microcontroller Marc Feeley (Universit´ e de Montr´ eal) and Danny Dub´ e (Universit´ e Laval) Objective: create a Scheme system for PIC that is R 4 RS conformant (except for file I/O) The PIC is an inexpensive single-chip general purpose computer with little RAM Model Pins MIPS ROM RAM Price PIC12C508 8 1 512 × 12 bits 25 × 8 bits $0.90 PIC16F628 18 5 2048 × 14 bits 224 × 8 bits $2.00 PIC18F1320 18 10 4096 × 16 bits 256 × 8 bits $3.25 PIC18F6520 64 10 16384 × 16 bits 2048 × 8 bits $6.50 PIC18F8720 80 6.25 65536 × 16 bits 3840 × 8 bits $11.03 Series of 3 different implementations that target different memory sizes: BIT (1996): H8/3292 μcontr., 2.5 KB RAM 64 KB, 8.5 KB ROM PICBIT (2003): PIC18F6720 μcontr., 0.25 KB RAM 3.5 KB, 22 KB ROM PICOBIT (2003): PIC18F1320 μcontr., 0.1 KB RAM 0.5 KB, 4 KB ROM All 3 systems have compilers that eliminate dead code through a whole-program analysis and the library is compact thanks to higher-order functions BIT: was ported to the LEGO MINDSTORMS and Z8 Encore! platforms, rather slow execution (8000 byte-codes per second) VM: stack based, stack is a chain of heap cells (this causes high pressure on the GC) Memory management: real-time GC, mark-compact type, 16 bit words, smallest object = 8 bytes, stationary handles & movable bodies PICBIT: targets high-end PICs, takes into account that RAM is the crit- ical resource, 2 × faster than BIT, requires little RAM but large ROM VM: register based (reduces allocation rate for continuations), safe-for- space, optimizing compiler Memory management: mark-sweep blocking GC (Deutsch-Schorr-Waite marking algo), 11 bit words, all objects = 3 bytes, 2 refs per object PICOBIT: **work in progress**, targets mid-level PICs VM: written in assembler-level macro language, stack based (stack cache overflowing to the heap), not safe-for-space, simple compiler, multi- threading implemented on top of continuations Memory management: like PICBIT except: 8 bit words, all objects = 4 bytes, 3 refs per object, this takes less RAM and ROM space, RAM and ROM objects have different representations 0 256 384 128 heap one cell RAM stack globals globals temp 16 ROM vector = 3 + n bytes pair = 3 bytes pair = 4 bytes vector = balanced tree old pc old cont old self old cont old self heap stack self cont sp ... ... ... old pc pc 4 #f 1 2 5 6 7 v2 v1 3 Results from a simulator: 24 bit cells 32 bit cells Byte- RAM Byte- RAM Program code needed code needed empty 79 0 79 0 traffic 164 24 164 20 photovore 363 99 310 96 (fib 20) 113 294 113 228 1-thread 217 54 216 44 10-thread 253 84 252 84

Upload: others

Post on 12-Sep-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Running Scheme on a PIC microcontroller - Universit© de Montr©al

Running Scheme on a PIC microcontrollerMarc Feeley (Universite de Montreal) and Danny Dube (Universite Laval)

• Objective: create a Scheme system for PIC that is R4RS conformant (except for file I/O)

• The PIC is an inexpensive single-chip general purpose computer with little RAM

Model Pins MIPS ROM RAM Price

PIC12C508 8 1 512 × 12 bits 25 × 8 bits $0.90PIC16F628 18 5 2048 × 14 bits 224 × 8 bits $2.00PIC18F1320 18 10 4096 × 16 bits 256 × 8 bits $3.25PIC18F6520 64 10 16384 × 16 bits 2048 × 8 bits $6.50PIC18F8720 80 6.25 65536 × 16 bits 3840 × 8 bits $11.03

• Series of 3 different implementations that target different memory sizes:

• BIT (1996): H8/3292 µcontr., 2.5 KB ≤ RAM ≤ 64 KB, 8.5 KB ≤ ROM

• PICBIT (2003): PIC18F6720 µcontr., 0.25 KB ≤ RAM ≤ 3.5 KB, 22 KB ≤ ROM

• PICOBIT (2003): PIC18F1320 µcontr., 0.1 KB ≤ RAM ≤ 0.5 KB, ≈4 KB ≤ ROM

• All 3 systems have compilers that eliminate dead code through a whole-program analysis

and the library is compact thanks to higher-order functions

• BIT: was ported to the LEGO MINDSTORMS and Z8 Encore! platforms,rather slow execution (≈8000 byte-codes per second)VM: stack based, stack is a chain of heap cells (this causes high pressureon the GC)Memory management: real-time GC, mark-compact type, 16 bit words,smallest object = 8 bytes, stationary handles & movable bodies

• PICBIT: targets high-end PICs, takes into account that RAM is the crit-ical resource, ≈2 × faster than BIT, requires little RAM but large ROMVM: register based (reduces allocation rate for continuations), safe-for-space, optimizing compilerMemory management: mark-sweep blocking GC (Deutsch-Schorr-Waitemarking algo), 11 bit words, all objects = 3 bytes, 2 refs per object

• PICOBIT: **work in progress**, targets mid-level PICsVM: written in assembler-level macro language, stack based (stack cache

overflowing to the heap), not safe-for-space, simple compiler, multi-

threading implemented on top of continuationsMemory management: like PICBIT except: 8 bit words, all objects = 4bytes, 3 refs per object, this takes less RAM and ROM space, RAMand ROM objects have different representations

0

256

384

128

heap

one cell

RAM

stack

globals

globals

temp16

ROMvector = 3 + n bytespair = 3 bytes

pair = 4 bytesvector = balanced tree

oldpc

old

cont

old

self

old

cont

old

self

heap

stack

selfcontsp

...

... ...

oldpc

pc 4

#f 1 2

5 6 7

v2v1 3

⇒ Results from a simulator:

24 bit cells 32 bit cellsByte- RAM Byte- RAM

Program code needed code needed

empty 79 0 79 0traffic 164 24 164 20photovore 363 99 310 96(fib 20) 113 294 113 2281-thread 217 54 216 4410-thread 253 84 252 84