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

鴫原一人 ksigihar @ fsi.co.jp
2015年 5月 14日 (木) 17:03:58 JST


久江様

お世話になっております。
富士ソフト 鴫原です。


現在値タイマを、ユーザ定義カウンタ最大値2倍+1までカウントする理由は、
GetElapsedValueの以下の仕様を実現するためです。

[SWS_Os_00533] Caveats of GetElapsedValue():
If the timer already passed the <Value> value a second (or multiple) time,
the result returned is wrong. The reason is that the service can not detect
such a relative overflow.

例えば、カウンタ最大値が10で、現在値が5であるとします。
この時に、経過時間の基準値に3を指定してGetElapsedValueを
呼び出した際、経過時間が単純に2なのか、1回ラップアラウンドが
発生していて8なのか、を区別できるようにしています。
SWS_Os_00533の通り、2回以上基準値(Value)を通過していた場合
(2回ラップアラウンドしていた場合)は、不正値が返ることになりますが、
1回のラップアラウンドでは正しい値を返すために、OS内部では、
「ユーザ定義カウンタ最大値2倍+1」で管理しています。


以上、宜しくお願いします。


2015年5月14日 16:31 <hisae @ jp.tdk.com>:

> 各位
>
> お世話になっております。
>
> 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
> までカウント」する必要がある理由について、ご教示頂きたく
> お願い申し上げます。
>
> よろしくお願いいたします。
>
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.toppers.jp/pipermail/users/attachments/20150514/e01a5d7c/attachment.html>