фЕБЪ (febb) wrote,
фЕБЪ
febb

Categories:

Програзматическое...

Небольшой тупичок в программировании образовался...

Может кому-то совсем делать нечего и захочется пообсуждать?

Развлекаюсь тут написанием програмки для микроконтроллеров на Си.
Контроллер получает сигнал таймера извне, просыпается и просто считает время и засыпает.
Проблема в том, что просыпаясь он ничего не помнит. У него наступает полная амнезия и device reset
за исключением несколько регистров, в которых я умудрился запихнуть минуты, часы и секунды.
И уже почти больше ничего не влезает. Т.е. можно передать что называется
сообщение в рай после смерти только несколько бит.

Но тут возникла задача коррекции времени. Кварцевый резонатор неохота
подстраивать, а хочется просто программным образом сделать коррекцию времени.
Частота сигнала 2.0042 Hz. Т.е. каждые 8 минут мы с друзьями ходим в баню
нужно отматывать одну секунду назад. С одной секундой вперед не было бы проблем,
а вот насчет отмотки назад у меня наступил легкий ступор.
Я добавил флаг bit_corr для того, чтобы отмотка назад работала
без эффекта наступления на одни и те же грабли. Потому, что отмотав секунду назад
в следующий раз опять на нее натыкаешься и нужно проскочить с помощью такого флажка.
Есть у кого идеи как сделать получше?

                if(S == 30u && bit_corr == 0)
                {
                    // Correction: every 8 min -1 sec:
                    t = ( H & 1 ) ? M + 60u : M;
                    if((t % 8u) == 0)
                        --S;
                    bit_corr = 1;
                }
                else
                    bit_corr = 0;

Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments