(toppers-users 2282) Re: 時間計測とsyslog

ykominami ykominami @ nifty.com
2006年 2月 2日 (木) 07:08:56 JST


おはようございます。
小南と申します.

On Thu, 2 Feb 2006 00:56:03 +0900
Tetsuo TAKAHASHI <tetsu-t @ mbd.ocn.ne.jp> wrote:

> 高橋と申します。
> 
> SH4 7750 をターゲットに使用した開発を行っています。
> 今のところターゲットがないので、サンプルとしてMS7750SE01を 
> 用いて試用しています。
 
> ターゲットに載せる予定の処理が、想定している時間内で終了するかど 
> うかを確認する為、
> 以下のようなテストを実施しています。
> 
 (略)
 
> 時間計測の間にsyslog()を入れたのであれば、当然時間が変化す 
> るのは分かるのですが、
> 外側に入れて処理Aの処理時間が変わる(というか時刻の取 
> 得タイミングが変わる?)原因が
> つかめないでいます。

> このような現象について、何かご存知の方はいらっしゃらないでしょう 
> か?
> それとも、そもそも何か間違っているのでしょうか?
 

高橋さんが書かれた範囲から考えて、問題の原因として最も可能性が高い
と思われるのは、

「計測対象の処理中にログタスクへのタスクスイッチが発生した。つまり
 計測した時間は、計測対象の処理時間+ログタスクのシリアルへの出力
 処理の時間ではないか」

ということです。
詳しくは、doc/user.txtに書かれていますが,syslog()自体はカーネル
の機能を呼び出して,メモリ上にログを書き貯めているだけです.
このメモリ上のログを、ログタスクが周期的に読み出して、シリアルなどに
出力しています.

つまり、タスクが1個しか動いていないように見えて,実際はログタスクも
走っているのです。

ログタスクは,アプリケーションのプログラムのC言語ソースプログラム上
には現れず、コンフィギュレーションファイルにしか現れませんし,ログ
タスク用のコンフィギュレーションファイルも、通常はそれをインクルード
するだけですので、ログタスクの存在はあまり意識されていないかもしれま
せん。

上記のことが原因であれば,今回の場合は、計測の前後にdis_dsp(), 
ena_dsp()を入れるという方法が考えられます.
他には、計測したいタスクの優先度を、ログタスクより相対的に高くする,
計測中は、ログタスクをサスペンドさせるなども考えられます.


> PS:
> config/sh3/solution_engine/ms7750se01.h
> 内の記述で、
> /*

> *  キャッシュモードの設定
> *  P0,U0,P1ライトスルーモード
> */
> #define CCR_MODE      0x0000898d

> とありますが、コピーバックモードの設定のように見えるのです 
> が・・・。
> SHの設定は、経験が少ないので勘違いかもしれません。

私が使っているボードはSH3のMS7727CP01なので断言するのは少し自信
がないのですが、ライトスルーモードにするには、0x0000898bではない
かと思います.
-------------------------------
小南 ykominami @ nifty.com