Функция имеет длину 32 бита (usigned long), и слава богам, беззнаковая. Значит, получается так: берем timer2, который есть во многих "больших" МК, и редко используется, по крайней мере, мной. Завожу таймер на одну миллисекунду, (причем он умеет автоперезагружаться). Создаю обработчик прерывания от этого, при каждом вызове котором последовательно инкрементируется 4 регистра памяти. Как посчитал, переполнение этого счетчика произойдет через 49 суток (+ накапливающаяся ошибка на времени выполнения инструкций, но пофиг, МК се равно не годятся для прецизионного счета времени). Потом просто читаю эти регистры, вычитаю, сравниваю, и т.п. Как-то так.
Непонятно (кроме того как это вообще сделать) как жить вместе с прерыванием, которое возникает каждые 1 мс. Все что пишу, придется увязывать с этим прерыванием. Запрещать нельзя, иначе с точностью совсем все плохо будет.
Что делать, когда 49 суток истекут, произойдет переполнение и проворот счетчика на нули, если до этого ее предыдущее значение "за миг" до переполнения уже записано. Из меньшего вычтется большее, получаем флаг OV, и фигню в беззнаковой "переменной". Проверять, не переполнится ли в ближайшем времени, это вообще, ад.
Короче, мне кажется что это все фигня, то что я придумал. Может есть способы лучше, для организации такого "длинного счета"?


