Как работает TickGetDiv256 ()? - PullRequest
       6

Как работает TickGetDiv256 ()?

5 голосов
/ 29 августа 2010

Привет, интересно, кто-нибудь может привести пример того, как работает функция TickGetDiv256();?Он был получен от Microchip в Tick.c

Я пытаюсь сосчитать 2 часа, если заполненный двигатель будет остановлен.

Я мог бы использовать функцию "threshold = tick + TICKS_PER_SECOND * 60;".Но я не знаю, было бы хорошо использовать его в течение этого времени: threshold = tick + (TICKS_PER_SECOND * 60 * 60)*2;

С уважением

Ответы [ 2 ]

2 голосов
/ 29 августа 2010

Судя по MPLAB C guide , самый большой целочисленный тип данных, поддерживаемый компилятором C, - 32-битный. Из того, что я могу найти в другом месте, счетчик тиков составляет шесть байтов - TickGetDiv256 возвращает «среднюю четверку» этих байтов.

Поскольку полные шесть байтов счетчика тиков не могут вписаться в 32-разрядное целое число, вы должны использовать TickGetDiv256 для извлечения средних байтов и, таким образом, иметь количество прошедших интервалов «256 тиков» так как счетчик был запущен. Конечно, это не совсем верно, так как он игнорирует старший байт счетчика тиков. Вы бы использовали эту функцию, если младшие четыре байта счетчика тиков не обеспечивают достаточный диапазон для интересующего вас промежутка времени.

0 голосов
/ 29 августа 2010

Может быть, я могу сделать так:

// if (Ts1/GTsy1) is under 40 and have'nt increased within 2h
    if (AD0 < 40 && (TickGetDiv256() - (startingTick + (TICKS_PER_SECOND * 7200)/256)) >= 7200)
    {
        sip.PL = 0; 
        sip.PU = 0;
        // Failure(code);
    }

    // if (Ts1/GTsy1) is under 40, start countdown
    if (AD0 < 40)
    {
        if (!alflags.ColdTimer)
            startingTick = TickGetDiv256(); //Start timer
        alflags.ColdTimer = 1;
    }
    else
        alflags.ColdTimer = 0;
...