> メインプログラムはほとんどなくて、プログラムのほとんどが
> 割り込み処理と言うのも少なくないのです。
>
> 私が考えつく問題としては、Aと言う割り込み処理が長くなればその間は
> 他の割り込み処理は出来なくなりますので、あまりいいことではありません。
>
> それに、プログラムの大部分が割り込み処理とでメインは無限ループ
> (けっこう私のプログラムにはあります。)
> というのもエレガントでないかなと思ってます。
>
> やはり、割り込み処理は短くしたほうがよいような気がするのですが
> 皆様方がプログラムする際はなにかそのための定石のようなものがあるん
> でしょうか?
> ケースバイケースのようなものかもしれませんが
> 何かアドバイスがあればよろしくお願いします。
>
基本的に、ワーストケース の、タイミング配分、実行の優先順位を決定し、
(NMI、WDI リカバリー等)
次に、通常の、イベント タイマー 起動処理の割り込み内での、実行の可
否を判断し、問題があれば タイマー起動の バックグラウンド処理マネー
ジャーに 委ねます。 メインループは、各イベント処理の動作番号の
モニターをさせて置けば、デバッグ時、ログを作成するなど、プログラマー
の、負担を著しく軽減できます。 ブロック処理は、パワーダウンする場合
以外では、コストが高くつきすぎます。 ステイトマシン テクニック(実行順
序 番号で、コールされた時点の動作内容をコントロールするやり方)を併用
すれば、割り込み処理で無くとも出来る処理を任せられます。
RS232C では、1文字の送信のみとする、RS485 では送信キャリア処
理までをタイマーイベントと組み合わせ割り込み内で処理します。
Ethernet でも、データ転送は 割り込み機動とせず、下で、詳述する、
バッ
クグラウンド タイマードリブン 処理内で行います。
モーター制御、パルス発生など 一刻の遅れが著しく性能低下を招くものが
イベント割り込みの再優先実行権を行使出来る様、時間に余裕の有る処理
は道を明けねばなりません。
ちなみに、1msのタイマー起動で、1ms 以上要する処理を行う場合、割り
タイマーの再セット、多重割り込みバックグラウンド処理中フラグのセット、割
込み禁止フラグの解除 で、 処理に取りかかります。 もちろん、処理中
に、タイマー 割り込みが発生しても、ターマーの値の更新のみで、バックグ
ラウンド処理は 再起動させません。 他の割り込みは、全く問題無く実行さ
れる訳です。
H8は、私が 以前 フォーラムで質問し、割り込み許可フラグを 立てれば、
多重動作するとの動作実績を、示唆していただき、現在、タイマー(1msec
タイマー更新、割り込み許可後、IP、ICMP,UDP,TCP を処理)、Ether
net(フラグ確認)、RS232C (115200BPSで完動) とする事が出来、Ping
応答速度 32バイト1mS、1472バイト14mS,1473バイト 17mS、 30
0
0バイト 31mS で、動作しています。 SH2 7045F28では、1472
バ
イトで、4mS、V53A 6MHz では、 9mS です。 10BASE-Tで、十分な
速度がH8で達成できたと考えています。
結果報告を兼ね、フォーラムの皆様に感謝致します。
、
〒226-0002 横浜市緑区
東本郷 6-17-1-602
オンボード tel 045-473-7678
fax 045-474-5351
WEB ---
http://www02.so-net.ne.jp/~ob_henry