Возвращаясь к 1) проектирование программ - пример: есть реализованный мной счёт времени подобный ntp под
STM32F407 на SysTick, с хранением целой и дробной части секунд, на
него повешан протокол синхронизации, который подстраивается
приемлемой для применения точностью.  Как уже сделано  - ниже.
ntptime_t __attribute__((weak))  ntp_getFineTime(void)
{
	uint32_t  val  = SysTick->VAL;
	uint32_t  load = SysTick->LOAD;
	ntptime_t ntp  = SystemTime;
 ntptime_t retval = { 0, 0 };
 uint64_t prFrac;
        // Calculate ntptime from catched
	prFrac  = load - val;
	prFrac *= SYSTICK_STEP;
	prFrac  = prFrac / (load+1);
	retval.fraction = (uint32_t)prFrac;
	retval = ntp_add( retval, ntp);
	return(retval);
}
Теперь надо то же реализовать для нувотона. Выяснилось на разности реализаций, что те моменты, которые я относил к ntp на деле относятся к таймерам, которые - сюрприз! - имеют разный функционал. Если уточнить вопрос - на основе каких критериев выделяется слой абстракции? Как определить интерфейс, необходимый для реализации? В данном конкретном случае установить_время(), ускорить счёт(), замедлить_счёт(). Опять же - изменение скорости счёта с каким аргументом должно быть - доля от текущей или какой-то другой? 
 У кого какие соображения или практика есть, которыми допустимо поделиться?
 Был совет смотреть как реализую подобные штуки другие, и вот как запрос сформулировать? Тот же ntp implementation выводит ссылки на реализации демона и синхронизации с кучей серверов, то есть явно не то.