5

TickGetDiv256();こんにちは、関数がどのように機能するかの例を誰かに教えてもらえないでしょうか 。Tick.cのMicrochipから来ました

私は 2 時間を数えようとしています。フルフィルドの場合、エンジンは停止します。

threshold = tick + TICKS_PER_SECOND * 60;「 」関数を使用できるかもしれません。しかし、この時間に使用するのが良いかどうかはわかりません: threshold = tick + (TICKS_PER_SECOND * 60 * 60)*2;

敬具

4

2 に答える 2

2

MPLAB C ガイドから判断すると、C コンパイラがサポートする最大の整数データ型は 32 ビットです。他の場所で収集できるものから、ティックカウンターは6バイトです-TickGetDiv256これらのバイトの「中間の4」を返します。

ティック カウンターの完全な 6 バイトは 32 ビット整数に収まらないため、使用TickGetDiv256して中間バイトを抽出し、カウンターが開始されてから経過した「256 ティック」間隔の数をカウントします。もちろん、ティック カウンターの最上位バイトを無視しているため、これは厳密には正しくありません。ティック カウンターの下位 4 バイトが、関心のあるタイムスパンに対して十分な範囲を提供しない場合は、この関数を使用します。

于 2010-08-29T12:30:17.577 に答える
0

多分私はこのようにすることができます:

// 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;
于 2010-08-29T12:31:06.890 に答える