Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.

Software+Hardware Releases by Abstract Group at Carnegie Mellon University

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.

Programming models for intermittent computing

  • 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:

    • DINO : static checkpoints with compiler-analysis that versions non-volatile data
    • Mementos : statically-inserted dynamic checkpoints


  • EDB: an energy-interference-free debugger for energy-harvesting devices


  • EDBsat: a solar-powered nano-satellite for sensing with a built-in profiler

Benchmark applications

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

Misc drivers and libraries

  • 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 from msp430-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:

Misc utilities

  • 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

Misc packages

  • fftw-PKGBUILD : Arch Linux PKGBUILD for FFTW library that enables NEON SIMD on ARM



Meta repository with getting-started info for projects released by Abstract group at CMU






No releases published


No packages published