アプリケーションの目盛りを表示するカウンターを処理する必要があります。カウンターは32ビットなので、ラップするときの対処方法を知っておく必要があります。例えば:
aを返す関数と(timestamp + shifttime)
、時間が経過したかどうかに応じて1または0を返す関数がありますが、カウンターがどのようにラップする可能性がありますか?これに対処しますか?
すべての回答者に感謝します。この編集でさらに詳しく説明します。
STM32Cortex-M3を使用しています。RTCカウンターを使用して、アプリケーションが特定の間隔で発生する必要のあるタスクをスケジュールするための目盛りとして使用したいと思います。RTCはオーバーフロー割り込みを生成できるため、割り込みの検出に問題はありません。私が抱えている主な問題(または少なくとも私が問題だと思う)は、特定のタスクがIEを取得するとき(timestamp+shift)
です
int main( void )
{
FlashLedTimeStamp = ReturnCounter( 20 ); // currentcounter value + a shift of 20
StatusLedTimeStamp = ReturnCounter( 3 ); // currentcounter value + a shift of 3
// then later on ....
while(1)
{
/* other tasks could go here */
if( HasTimeElapsed( FlashLedTimeStamp ) )
{
/* do something and get another timestamp value */
FlashLedTimeStamp = ReturnCounter( 20 ); // currentcounter value + a shift of 20
}
if( HasTimeElapsed( StatusLedTimeStamp ) )
{
/* do something and get another timestamp value */
FlashLedTimeStamp = StatusLedTimeStamp( 3 ); // currentcounter value + a shift of 3
}
}
}
計算を簡単にするために、私のRTCカウンターの長さがわずか8ビットであると仮定しましょう。
タイムスタンプを取得したときに現在のカウンターが250になっている場合、それはそれを意味しFlashLedTimeStamp = 14
、それが期限切れになっているStatusLedTimeStamp = 253
ことを確認するにはどうすればよいですか?FlashLedTimeStamp
現在のカウンターが何であるか、特定のタイムスタンプが期限切れになっているかどうかを確認するために、必ずしも常にチェックするわけではないことに注意してください。これにより、私が抱えている問題が明確になることを願っています。