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.
Latest commit message
Commit time

Time-sensitive Intermittent Computing Meets Legacy Software (TICS)

TICS is a framework that allows for C programs to be executed on intermittent power, harvested from the environment. TICS consists of multiple components that together make sure that the program that is being executed continues where it left off after a power failure. Additionally, TICS does this in a way that leads to checkpoint times that can be bounded to a reasonable upper limit, making reasoning about checkpoint placement dynamically possible (although this is not explored in the current version).

TICS is intended to be used with the MSP430FR5969 microcontroller, but can be adapted to work with any MSP-based microcontroller that consists of non-volatile main memory.

The main components of TICS are:

  • TICS runtime for memory logging and checkpoint management
  • TICS compiler backend (GCC and LLVM) for stack segmentation management
  • TICS source instrumentation for variable instrumentation

Project Layout

├── llvm-tics (modified LLVM compiler)
├── msp430-gcc-tics (modified GCC compiler)
├── tics (TICS runtime)
│   ├── arch
│   │   └── msp430x
│   │       ├── lib
│   │       └── llvm-workaround
│   ├── ext (external libraries)
│   ├── include
│   ├── source-instrumentation
│   │   └── memory-log-instrumentation
│   ├── src
│   └── test
│       └── functional (benchmarks)
└── user-study (user study questions and results)
    ├── user-study-analysis
    ├── user-study-questions
    └── user-study-results


TICS was tested on Ubuntu 18.04

Building GCC

Required packages:

$ apt-get install make gcc g++ libc-dev flex bison texinfo ncurses-dev zlib1g-dev bash curl

Build commands:

$ cd msp430-gcc-tics
$ ./

Building LLVM

Required packages:

$ apt-get install make gcc cmake python zlib1g-dev

Build commands:

$ cd llvm-tics
$ ./

Configuring toolchains

$ ./

Installing MSP430 Support Files

From Texas Instruments website download and extract the MSP430 GCC support files.

Build Source Instrumentation Tool (memlog)

The source instrumentation tool (memlog) is located in tics/source-instrumentation/memory-log-instrumentation. This tool is used to instrument global variable and pointer writes.

Build commands:

$ cd tics/source-instrumentation/memory-log-instrumentation
$ mkdir build
$ cd build
$ cmake ../
$ make

Optionally tests can be run using

Building C Code

Path setup Modify the CMake target configuration file tics/arch/msp430x/msp430-toolchain-ws.cmake such that the correct paths are configured for GCC, LLVM, libraries and the support files. This can be done by changing all the paths starting with /home/user.

Build commands:

$ cd tics
$ ./configure
$ cd build
$ make


The benchmarks are located in tics/test/functional/checkpoint. Building the C code will also generate .elf files for the benchmarks. Transformation of the C code to the instrumented version that includes memory logging is done using the source instrumentation tool describe above (memlog). The benchmarks where uploaded using Code Composer Studio (CCS). Benchmark timings where started after the system initialization (init()) and where run until the end of the benchmarks (before result validation and the summary of the run). The time was measured using hardware breakpoints and the build in cycle counter.

System Comparisons

The system was benchmarked against

The performance numbers for InK, Alpaca and MayFly where extracted from the InK paper. The performance numbers for Chinchilla where obtained by running the benchmarks using the Chinchilla library and compiler on our setup and using the same cycle counter technique as described above.


To cite the paper where TICS is being introduced please use the following LaTeX bibitem.

    author = "Vito {Kortbeek} and Kasim Sinan {Yildirim} and Abu {Bakar} and Jacob {Sorber}
    and Josiah {Hester} and Przemys{\l}}aw {Pawe{\l}czak}",
    title = "Time-sensitive Intermittent Computing Meets Legacy Software",
    year = "2020",
    booktitle = "Proc. ASPLOS",
    address = "Lausanne, Switzerland",
    month = mar  # " 16--20,",
    publisher = "ACM"


Copyright (C) 2019 TU Delft Embedded and Networked Systems Group/Sustainable Systems Laboratory.

MIT Licence. See License file for details.