(toppers-users 4372) カウンタ最大値2倍+1までカウントする理由について。

hisae @ jp.tdk.com hisae @ jp.tdk.com
2015年 5月 14日 (木) 16:31:50 JST


各位

お世話になっております。

TDK株式会社の久江と申します。

現在、TOPPERS/ATK2のFL850F1L(テセラ・テクノロジー)簡易パッケージ の
ソースコードを解析させて頂いております。

下記ファイル
 ・arch\v850_gcc\tauj_hw_counter.c
のヘッダコメント部分を読みますと、OSのカウンタオブジェクトの一つは、
二つのハードウェアタイマを使用して構成されているようです。
一つが現在値タイマで、もう一つが差分タイマです。

 *  使用するタイマ:
 *    差分タイマ:目的の時間を設定する時の現在時間(現在値タイマ)
 *              と次の満了時間との相対時間をカウントすることで
 *              目的の絶対時間に満了したこととする
 *              count mode:count down once
 *
 *    現在値タイマ:カウンタ周期分のベースタイマを実現
 *              (絶対時間をカウント)
 *              count mode:continuous count down
 *
 *    また上記のタイマは32bitのダウンカウンタタイマである
 *
 *  制御方針:
 *
 *   現在値タイマはユーザ定義カウンタ最大値2倍+1までカウントし,
 *   周期タイマとして連続カウントダウンして,常に現在時刻を
 *   取得する.割込み発生する必要がないため,割込みなしモード
 *
 *   差分タイマは,満了処理を行うため,割込みありモードで動く
 *   アラームなどの満了点とタイマー1で示した現在時刻の差を
 *   現在値タイマに設定する
 *
 *  ポイント:
 *   満了処理は,現在時刻を影響しないため,現在値タイマを設けている>・サン
プルプログラムにて,TAUJ0, TAUJ1を使用.

二つのハードウェアタイマを使用する理由は理解できたのですが、
「制御方針」に書いてある内容で、「現在値タイマはユーザ定義
カウンタ最大値2倍+1までカウント」する必要がある理由が分かりません。

「ユーザ定義カウンタ最大値」とは、コンフィギュレーションファイルに
設定される値、詳しくはtarget_hw_counter.yamlにて記述する、
コンテナOsCounterMaxAllowedValueの値になります。
サンプルでは次のように定義されていますので、
 OsCounterMaxAllowedValue: 0x1FFFFFFF
このカウンタオブジェクトは0から0x1FFFFFFFまでカウントしたら
0に戻るカウンタということになります。

普通に考えれば、現在値タイマは0から0x1FFFFFFFまでカウント
すれば必要十分に思えます。
にも関わらず、「現在値タイマはユーザ定義カウンタ最大値2倍+1
までカウント」する必要がある理由について、ご教示頂きたく
お願い申し上げます。

よろしくお願いいたします。