  Clock configuration within constrained general-purpose microcontrollers takes
a key role in tuning performance, power consumption, and timing accuracy of
applications in the Internet of Things (IoT). Subsystems governing the
underlying clock tree must nonetheless cope with a huge parameter space,
complex dependencies, and dynamic constraints. Manufacturers expose the
underlying functions in very diverse ways, which leads to specialized
implementations of low portability. In this paper, we propose FlexClock, an
approach for generic online clock reconfiguration on constrained IoT devices.
We argue that (costly) generic clock configuration of general purpose computers
and powerful mobile devices need to slim down to the lower end of the device
spectrum. In search of a generalized solution, we identify recurring patterns
and building blocks, which we use to decompose clock trees into independent,
reusable components. With this segmentation we derive an abstract
representation of vendor-specific clock trees, which then can be dynamically
reconfigured at runtime. We evaluate our implementation on common hardware. Our
measurements demonstrate how FlexClock significantly improves peak power
consumption and energy efficiency by enabling dynamic voltage and frequency
scaling (DVFS) in a platform-agnostic way.
