重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

SH704x-10MHzでiTRONのお勉強を始めました。

従来のシングルスレッドだった時、
タッチパネルに加工処理したデータを表示させるのに約0.5秒ほどかかっていた処理が
今回Taskとして組み込むと約4.5秒かかるようになってしまいました。
(この時アイドルTaskと上位優先順位Task有り。但し上位優先順位Taskはデータ表示処理を起床させ自らはスリープ)
更にタッチパネルの状態をチェックするTaskも同じ優先順位で組み込むと67秒もかかるようになってしまいました。
サンプルプログラムはCMT0の1msec割込み毎にirot_rdqを実行していたのですが、10msec経過してからirot_rdqを実行する方法に変更したところ5.6秒に劇的に短縮されました。
が、本来の速さにはまだまだ程遠い状況です。
irot_rdqは100msecにもしてみましたが10msecの時より若干速くなっただけでした。

CMT0処理(irot_rdq含むとき)はトレースを追ってみると約0.2msecかかっているのですが
CMT0内の処理が多すぎるのでしょうか?

それともirot_rdqは「こういうもの」なのでしょうか。

ネットでは同件のような情報が見つからず。
書籍を購入するにも知りたい事が書かれているのか調べられず。
サンプルプログラムは簡単すぎて参考にならず。

どなたかご存知の方いらっしゃいましたら是非
ご指導お願いいたします。

A 回答 (2件)

こんばんは。



CMT0の処理、とおっしゃっているのは、おそらくコンペアマッチタイマーによる割り込み処理のことだと思いますが、割り込み処理の中にいろいろ書き込まれているのでしょうか? 

割り込み処理の最中はOS(タスクスケジューラの)管轄外になります。割り込み処理中は、イベントフラグを立てたり、タスクを起こしたりするだけにとどめて、極力軽量化して、処理に時間がかかるものはタスク内で実行することをお勧めします。
    • good
    • 0
この回答へのお礼

Interestさん。回答ありがとうございます。
CMT=コンペアマッチタイマーの事です。
TRONを始めてまもなく、またハード面の細かい所まで考えてプログラミングした事が無かった為
ハードウェアマニュアルに記載されていた記号をそのまま使ってしまいました。

コンペアマッチタイマ割込み処理は従来から有った
CMT0フラグクリア処理
時間カウント用変数のインクリメント
タッチパネルの押下のチェック
今回追加したのは
10msec毎にirot_rdq用の変数1個インクリメント
末尾に
sys_clk();sys_tim();ret_int();の処理です。
(3つはサンプルのままコピー)

> 極力軽量化して
CMT0内部での処理を別タスクを分けられるか検討してみます。
ありがとうございました。

お礼日時:2005/12/14 20:01

ANo.1 = Interest です。


予想通り、割り込み処理の中にいろいろ書き込んでらしたのですね。

> CMT=コンペアマッチタイマーの事です。

私はSH系のマイコンをさわったことがあるのでわかりましたが、他のマイコンになると同じ機能でも名称が異なることにご注意ください。

miyuyuさんが使用されているITRONがどこのものでどう実装されているかわかりませんが、おそらくCMT0割り込みはITRONのシステムクロックを作っているものと思います。(私が個人で使用しているミスポのNOIRi3ではそうなっています。)これにはまったく手を加えないのが得策です。

もし一定の時間間隔で何らかの処理をしたいのでしたら、「周期起動ハンドラ」を使ってタスクをwakeupします。(周期起動ハンドラは”ハンドラ”ですからタスクではありません。極力軽く作りましょう。)

この回答への補足

/*--------------------*/

Interestさん
コンペアマッチタイマー(CMT0)に有った従来処理を
周期起動ハンドラにするため、色々な波及が出てしまい手間取ってしまいました。
連絡送れて申し訳ありません。

昨日最も速かった条件で3.5secだったのを
0.9secまで短縮する事ができました。
本当にありがとうございました。

もしよろしければもう少しInterestさんの知識を分けて頂きたいのですが
よろしければご教示ください。

1.CMTは何秒周期でご使用されていますか?
2.その時irot_rdqは何秒毎に実行していますか?
3.CMTと同じインターバルで周期起動ハンドラは動かせないのでしょうか?
(同じインターバルにすると動かなくなってしまいました)
4.有用だった書籍などあったら紹介してください。

■ありがとうございました。(^^♪

補足日時:2005/12/15 16:12
    • good
    • 0
この回答へのお礼

> 他のマイコンになると同じ機能でも名称が異なる~
そうなのですか。以後気をつけます。勉強になりました。

> 「周期起動ハンドラ」を使って
なるほど、そのような使い方をするのですね。
まだ試していませんが、期待できそうな気がします。

結果が出たらご報告いたします。

お礼日時:2005/12/15 09:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!