ARMPIT SCHEME is an interpreter for the Scheme language (lexically-scoped dialect of Lisp) that runs on RISC microcontrollers with ARM core. It is based on the description in the Revised^5 Report on the Algorithmic Language Scheme (r5rs), with some extensions (for I/O) and some omissions (to fit within MCU memory). It is further designed to support multitasking and multiprocessing. Armpit Scheme is expected to be well suited to educational settings, including student projects in courses on control and instrumentation, or capstone design courses where microcontrollers are needed. It is meant to enrich the spectrum of interpreted languages available for MCUs (eg. BASIC and FORTH) and can be an alternative to MCU-based bytecode interpreters (eg. for Scheme or Java) and to compiled languages (eg. C).
The name "Armpit" was selected for this project because it includes "ARM" (as in ARM core MCU) and "pit" (as in kernel, noyau, nucleus, the core of an Operating System (OS)). Armpit Scheme, once loaded, governs the operation of the MCU, and is "Scheme to the metal" in the sense of running without any other OS. It may be thought of as turning the MCU into a rudimentary Scheme machine. The screenshot below shows the system running on a BeagleBoard XM, powered by and communicating via USB. Minicom is used to communicate with the board which reads, evaluates and prints the result of the entered expressions.
The latest development snapshot of Armpit Scheme is 070 (year 7, release 0) and the latest stable version is 050. They are distributed under the MIT License and are beta releases, with both known bugs and unknown bugs. The source code, and pre-assembled (ready-to-upload) Intel Hex and binary image files, can be downloaded from the armpit project summary page or the download site at SourceForge. Alternatively, you can view and download the source code from your web browser. The system is documented in several web pages:
It is designed to run on the following boards, either from in-house development (Table 1) or contributions from developers (Table 2), as of the latest release:
USB | ||||||||
BOARD | MANUFACTURER | MCU | CORE | MHZ | RAM | FLASH | DEVICE | LCD (*) |
LPC-H2103 | Olimex | LPC2103 | ARM7TDMI | 60 | 8 KB | 32 KB | - | - |
Tiny2106 | Newmicros | LPC2106 | ARM7TDMI | 60 | 64 KB | 128 KB | - | - |
Tiny2131 | Newmicros | LPC2131 | ARM7TDMI | 60 | 8 KB | 32 KB | - | - |
Tiny2138 | Newmicros | LPC2138 | ARM7TDMI | 60 | 32 KB | 512 KB | - | - |
Logomatic V1.0 | SparkFun | LPC2138 | ARM7TDMI | 60 | 32 KB | 512 KB | - | - |
Logomatic V2.0 | SparkFun | LPC2148 | ARM7TDMI | 60 | 32 KB | 512 KB | Native | - |
LPC-H2148 | Olimex | LPC2148 | ARM7TDMI | 60 | 32 KB | 512 KB | Native | - |
LCDDemo-LPC2158 | Future Designs | LPC2158 | ARM7TDMI | 60 | 32 KB | 512 KB | Native | Text |
SAM7-H256 | Olimex | AT91SAM7 | ARM7TDMI | 48 | 64 KB | 256 KB | Native | - |
STR-H711 | Olimex | STR711 | ARM7TDMI | 48 | 64 KB | 256 KB | Native | - |
LPC-H2214 | Olimex | LPC2214 | ARM7TDMI | 60 | 1 MB | 1 MB | FTDI | - |
LPC-H2294 | Olimex | LPC2294 | ARM7TDMI | 60 | 1 MB | 4 MB | FTDI | - |
LPC2478-STK | Olimex | LPC2478 | ARM7TDMI | 72 | 64 MB | 512 KB | Native | Color |
LPC-H2888 | Olimex | LPC2888 | ARM7TDMI | 48/60 | 32 MB | 2 MB | Native | - |
LPC-P1343 | Olimex | LPC1343 | Cortex-M3 | 72 | 8 KB | 32 KB | Native | - |
Blueboard 1768H | NGX Electronics | LPC1768 | Cortex-M3 | 96 | 32 KB(*) | 512 KB | Native | - |
SAM3-H256 | Olimex | AT91SAM3S4B | Cortex-M3 | 64 | 48 KB | 256 KB | Native | - |
STM32-H103 | Olimex | STM32F103RBT6 | Cortex-M3 | 72 | 20 KB | 128 KB | Native | - |
STM32-H107 | Olimex | STM32F107VCT6 | Cortex-M3 | 72 | 64 KB | 256 KB | Native | - |
STM32-LCD | Olimex | STM32F103ZET6 | Cortex-M3 | 72 | 64 KB | 512 KB | Native | Color |
STM32 Core Module | InSem/Lodin | STM32F103ZET6 | Cortex-M3 | 72 | 64 KB | 512 KB | Native | - |
IDM-L35-RDK | TI | LM3S1958 | Cortex-M3 | 50 | 64 KB | 256 KB | (cable) | Color |
LM3S1968 Eval | TI | LM3S1968 | Cortex-M3 | 50 | 64 KB | 256 KB | FTDI | OLED |
LM3S6965 Eval | TI | LM3S6965 | Cortex-M3 | 50 | 64 KB | 256 KB | FTDI | OLED |
TI EvalBot | TI | LM3S9B92 | Cortex-M3 | 80 | 96 KB | 256 KB | Native | OLED |
SAM4S-Xplained(*) | Atmel/Embest | AT91SAM4S16C | Cortex-M4 | 120 | 128 KB | 512 KB | Native | - |
SAMG53-Xplained | Atmel/Embest | ATSAMG53N19 | Cortex-M4F | 48 | 96 KB | 512 KB | - | - |
FRDM-K64F | Freescale | MK64FN1M0VLL12 | Cortex-M4F | 120 | 256 KB | 512 KB | Native | - |
Nucleo-F401RE | ST | STM32F401RET6 | Cortex-M4F | 84 | 96 KB | 512 KB | - | - |
STM32F429 Discovery | ST | STM32F429ZIT6U | Cortex-M4F | 168 | 8 MB | 1 MB | Native | Color |
LM4F120 Launchpad | TI | LM4F120H5QR | Cortex-M4F | 80 | 32 KB | 256 KB | Native | - |
EK-LM4F232 | TI | LM4F232H5QD | Cortex-M4F | 80 | 32 KB | 256 KB | Native | - |
EK-TM4C1294XL | TI | TM4C1294NCPDT | Cortex-M4F | 120 | 256 KB | 512 KB | Native | - |
LPC4330-Xplorer | NGX Electronics | LPC4330 | Cortex-M4F | 204 | 128 KB | 4 MB | Native | - |
LPC4357-Xplorer(*) | NGX Electronics | LPC4357 | Cortex-M4F | 120/204 | 32 MB | 512 KB/4 MB | Native | Color |
STR91X-M | Insem/Lodin | STR911FAW44X6 | ARM966E | 96 | 96 KB | 512 KB | Native | - |
CS-E9302 | Olimex | EP9302 | ARM920T | 166 | 32 MB | 16 MB | - | - |
Hammer | TinCan Tools | S3C2410 | ARM920T | 200 | 32 MB | 16 MB | Native | - |
SAM9-L261 | Olimex | AT91SAM9261 | ARM926EJ | 200 | 63 MB | 1 MB(*) | Native | Color |
BeagleBoard (B7) | TI | OMAP3530 | Cortex-A8 | 600 | 128 MB | 0 MB(*) | Native | - |
BeagleBoard-XM-(C2) | TI | DM3730 | Cortex-A8 | 1000 | 512 MB | 0 MB | Native | - |
BeagleBone Black | TI | AM3359 | Cortex-A8 | 900 | 512 MB | 0 MB | Native | - |
Overo Tide | Gumstix | OMAP3530 | Cortex-A8 | 720 | 512 MB | 0 MB | Native | - |
Duovero Crystal | Gumstix | OMAP4430 | Cortex-A9 | 900 | 1 GB | 0 MB | Native | - |
USB | |||||||||
CONTRIBUTOR | BOARD | MANUFACTURER | MCU | CORE | MHZ | RAM | FLASH | DEVICE | LCD (*) |
Robbie Dinn | SAM7-P256 | Olimex | AT91SAM7 | ARM7TDMI | 48 | 64 KB | 256 KB | Native | - |
Robbie Dinn | SAM7-1184-04 | Microbus UK | AT91SAM7 | ARM7TDMI | 48 | 64 KB | 256 KB | - | - |
Tzirechnoy | Fractal MCU32-1.12 | - | STM32F103RBT6 | Cortex-M3 | 72 | 20 KB | 128 KB | - | - |
Ruslan Popov | STM32-ARMka | - | STM32F103C8T6 | Cortex-M3 | 72 | 20 KB | 64 KB | - | - |
Kuba Tyszko | MBED LPC1768 | MBED | LPC1768 | Cortex-M3 | 96 | 32 KB(*) | 512 KB | Native | - |
Petr Cermak | STM32F4 Discovery | ST | STM32F407VC | Cortex-M4F | 168 | 112 KB | 1 MB | Native | - |
(*) On-board LCDs / OLEDs are programmed from within user or library space (not in the core). The BeagleBoard onboard flash is not used in the Live-SD version option (070, 060, 050). The Blueboard and MBED 1768 have 64KB of RAM but it is not contiguous, hence only 32KB is used. The SAM9-L9261 has 64 MB of SDRAM and 16 MB of flash but Armpit Scheme uses only up to 1 MB of flash (at the top of flash) on this board and it is shadowed by 1 MB of SDRAM. There are 2 versions of the code for LPC4357-Xplorer: one (small memory) that loads by DFU and uses SPIFI (4 MB) for files, and the other (normal) that loads by ISP and uses on-chip flash (512 KB). Also, for the LPC4357-Xplorer, the LCD is on a separate baseboard.
External links of potential interest include: