febb: (Default)
[personal profile] febb
Небольшой тупичок в программировании образовался...

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

Развлекаюсь тут написанием програмки для микроконтроллеров на Си.
Контроллер получает сигнал таймера извне, просыпается и просто считает время и засыпает.
Проблема в том, что просыпаясь он ничего не помнит. У него наступает полная амнезия и 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;

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

febb: (Default)
febb

March 2022

S M T W T F S
  1 2 345
6 7 89 101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 10th, 2026 04:49 am
Powered by Dreamwidth Studios