Getting Things Done on Computational RFIDs with Energy-Aware Checkpointing and Voltage-Aware Scheduling