This wiki-like bootstrap repository contains the getting-started information for developers who would like to make use of the software and hardware tools we release. For projects that span multiple repositories (SW, HW, example applications, etc), this repository is the starting point with guides and structured links to the repositories within the flat repository pool hosted on GitHub. Follow the link for each project to see a synopsis and a quick-start guide.
-
Alpaca [web] : a checkpoint-less programming model with compiler support for intermittent programming
-
Chain: a task-based programming model and runtime for intermittent programming
-
Capybara: hardware and firmware for reconfigurable energy storage
-
Coati: a task-based programming model and runtime that brings support for asynchronous interrupts to intermittent systems
-
Prior work by other researchers, forked, updated, and re-packaged for seemless builds of applications alongside builds with our systems:
- EDB: an energy-interference-free debugger for energy-harvesting devices
- EDBsat: a solar-powered nano-satellite for sensing with a built-in profiler
The applications in the following table target intermittently-powered energy-harvesting devices and perform sensing with various computation typical of the embedded domain. Each application was tested on at least one real energy-harvesting device (WISP5, Capybara, or TI Launchpad powered by a PowerCast RF harvester) on intermittent power. So far, all devices are based on MSP430.
All applications are built using Maker
dependency build system, which wraps third-party compiler
toolchains. The application is the root of the dependency tree,
and
its dependencies (libraries and
toolchains)
are specified in the application's Maker makefile. Toolchain dependencies
provide the compiler passes and runtime libraries needed to build the app using
that toolchain, along with build recipes for Maker that specify how to invoke
compiler passes, link the runtime. When Maker builds an application, it builds
all its dependencies from source, to ensure that all compiler flags are the
same. Builds using multiple toolchains coexist in separate subdirectories of
bld/
.
Each application repository includes references to the repositories of its
dependencies as Git submodules (in ext/
), so clone with git clone --recursive ...
. This makes it easy for each application to depend on a
snapshot of each dependency (including toolchains), while the dependency
continues to evolve (along with other applications) without breaking this
application. Dependencies that are exceptions to this rule are TI GCC
compiler, and LLVM/Clang compiler, because we don't normally modify them,
in contrast to our toolchains. This does mean, however, that the
version of the compilers, is not enforced via the submodule snapshot, so last
known working version of the compiler should be recorded in the documentation
somewhere.
For toolchains that provide significantly different programming models (e.g., C code with boundaries vs. task-based code), applications have multiple implementations, one per toolchain. The implementations are stored either as branches in the same repository or in separate repositories.
Name/Repo | Description | C/Mementos/DINO | Chain | Alpaca |
---|---|---|---|---|
Blinker | blink an LED | master branch | chain branch | alpaca branch |
SpaceData | sense for EDBsat | repo | ||
AR | activity recognition using trained model | repo | repo | repo |
RSA | public-key encryption | repo | repo | |
Cuckoo | cuckoo filter data structure | repo | repo | |
CEM | cold-chain equipment monitor with LZW compression | repo | repo | |
Bitcount | counts bits in bitmask | repo | repo | repo |
Blowfish | encrypt with Blowfish algorithm | repo | repo | repo |
Gesture | recognize gesture and send over BLE | repo | ||
TempAlarm | monitor temperature and send BLE alarm | repo |
-
libmsp : basic low-level drivers and macros for accessing peripherals on MSP430 (watchdog, GPIO, UART) and a small printf implementation
-
libio : provides a console with printing and logging to a selectable backend (HW UART from
libmsp
, SW UART frommsp430-softuart
, EDB) -
libharvest : minimum functionality required to run on an energy-harvester without specialized HW (sleep until threshold using internal comparator on MSP430)
-
libmcppot : driver for MCP4xxx digital potentiometer for I2C on MSP430
-
libfxl : driver for FXL64xx GPIO expander for I2C on MSP430
-
libtemp : driver for TMP36 analog temperature sensor using MSP430 ADC
-
libmspuartlink : library for sending packets across UART between two MSP430 MCUs
-
Forks of libraries by other authors re-packaged for Maker:
- msp430-softuart : SW (bitbanged) UART implementation for MSP430 by Nicholas J. Conn
- libmspware : TI MSPware library with peripheral drivers for MSP430
- Maker : dependency build system for C projects, implemented in GNU Make, that automatically builds dependencies along with the top-level application
- mspdma : measure DMA performance on MSP430
- fftw-PKGBUILD : Arch Linux PKGBUILD for FFTW library that enables NEON SIMD on ARM
- MSP-FET Splitter+Adapter: adapter board from MSP-FET 14-pin to two TI Spy-bi-wire 0.100'' 4-pin headers with a switch for self-powered mode and a switch to physically disconnect FET from target
- Adapter boards from 0.050'' to 0.100'' headers useful for connecting to programming headers and debug headers with logic analyzers and jumper wires
- Powercast P2110 Breakout board: breaks out the Powercast module to 0.100'' pins for breadboard