I. Introduction
Sensing devices increasingly rely on energy harvesting to power themselves, as they are typically deployed in harsh environments where it is difficult or even impossible to charge or replace their batteries. Without energy harvesting, the lifetime of sensing devices will be severely limited by the battery size. As the energy output of energy harvesters is typically weak and unstable, the software system must ensure that programs can progress correctly and efficiently in the presence of frequent power failures.