(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