フォーラム: 雑談 (スレッド #3853)

OSは乗るか (2003-11-26 21:59 by srw #6776)

マイコン向けのOSを使ったことが無いので言いきれませんが、
OSのようなプログラムを動作させるのは、
今現在のh8emuの仕様では無理かもしれません。
といいますのも、ディスアセンブル時に命令の解析(フェッチ?)を
全て終らせてしまう構造になっているからです。
要するにスタティックな方法になっています。
内臓RAMや外付RAMに動的にプログラムをロードして
実行するということができないので、このへんを解決すると
したらどうすればいいやら、今日歩きながら考えていたところです。
すぐ思いつくのは、インタープリタ型のエンジンも乗せてしまうか、、。

RE: OSは乗るか (2003-11-28 02:36 by ysato #6793)

はじめまして。OSいじってます。
H8MLに書こうと思ったら、こっちに引っ越したようなのでこっちに書きます。

OSといっても、小規模なものはアプリケーションプログラムにリンクされて
一つのプログラムになるので、こういったものは現状の構造でも問題なく実行できます。
いわゆるRTOSは大体このタイプです。
MLで名前が出ていたeCosも基本的にはこれです。

で、linuxのほうは心配されている通り動的にプログラムを読み込んで実行できないと
何も出来ません。
今の構造を使って対応するとすれば、OS側から必要に応じて命令解析を要求
出来れば、なんとかなりそうな気がします。

参考までに。
#6776 への返信

RE: OSは乗るか (2003-11-28 02:49 by srw #6794)

どうもはじめまして。

>OSといっても、小規模なものはアプリケーションプログラムにリンクされて
>一つのプログラムになるので、こういったものは現状の>構造でも問題なく実行できます。
>いわゆるRTOSは大体このタイプです。
>MLで名前が出ていたeCosも基本的にはこれです。

なるほど、一応実行できるOSもあるのですね。
しかしlinuxはやはり無理ですか。

おそらく、インタープリタ型を乗せると
速度に差が出てしまうでしょうね。
ysatoさんの仰るとおり、未解析領域か、
内容が更新された領域にプログラムカウンタ
が入ったら実行を一旦停止して解析させる方法の
方がいいかもしれませんね。

とても参考になりました。
#6793 への返信

RE: OSは乗るか (2003-11-28 07:21 by mac #6799)

Windowsのdllや、Linuxのlib*.soように、
動的にLinkされるものをサポートすると、
Linkが変わるごとに、再編成しなおすか、
本当に全部、機械語を読みながら、
インタプリタを実行するかになり、
せっかく、「本物のH8の速度」もしくは、
それ以上で実行できるシミュレータという、
大変すばらしい特長を多分犠牲にすることに、
多分なってしまいますね。

H8/300Hが利用されている現在の組込み用ソフトの、
ほとんどは、Staticにリンクされた、
モノリシックなオブジェクトなので、
「実時間動作」の特長を捨ててまで、
Dynamic Linkをサポートするのは、
「ショッキングな宣伝文句」では、
良いかもしれませんが、実用性は、
天秤にかけるまでもなく「没」でしょう (^^)

それよりは、DMAをどう料理するか?
のほうが、結構実用面では、
懸案のひとつじゃないでしょうか?

スイッチや、ADCなら御手軽ですが、
DMAの大量データをそれも実時間で、
入れるとなれば、専用ハードが、
必要になりそうです。

それでは、汎用機でも動くこれまた、
大きな「売り」を棄却することになるので、
Disk上に用意した、Data Fileを読み込むことで、
シミュレートするのが良いかなあと、
勝手に思っています。
#6794 への返信

RE: OSは乗るか (2003-11-28 20:59 by srw #6813)

>H8/300Hが利用されている現在の組込み用ソフトの、
>ほとんどは、Staticにリンクされた、
>モノリシックなオブジェクトなので、

なるほど。
とりあえずダイナミックリンクされた組み込みソフトの
ことは後にするとしましょうか。
もっとも、そこまで頻繁にやるような方は
ICEとかお持ちでしょうし。

ところでDMAというと、DirectMemoryAccess
かと思うんですが、あ、そうか、これは
CPUとは別に動作するんでしたっけ(それも激速?)。
前途多難かも、、。

PS>
ソースUPしました。
実時間動作に関して、今後追加していくと重くなって
実時間以下で動作するようなことになるかと思いますが、
一応、ネイティブコードコンパイルも少し試してありまして、
これをONにすると2倍以上の速度ではしらせれます(対応してる命令だけですが)。
cpu/inst/compile_ope/ 下です。
ONにするにはたしかmain_subで
g.flag.compile っぽい変数に真を入れてビルドすればOKです。
#6799 への返信

DMA (2003-11-30 00:28 by mac #6838)

そのとおり、Direct Memory Accessです。

一般的には、デバイスが、
CPUに「ちょっとバスをを貸してくださいな。」
CPUはアトミックナ命令が終了すると、
「はい、空けましたよ、用事がすんだら教えてね。」と、
バスを開放するんで、DMA Deviceは、
自分でアドレス、データ―バス、R/W, ASを制御してメモリーをRead/Writeすして、
CPUに「はい終わりました」といって終了します。

ところがH8/300Hは内部にDMACを内蔵しているので、
InputかOutputなのか、
Inputまたは、Outputするアドレス、メモリーの始点、
転送個数をセットし、DMEQをだすと、
一見CPUが動いているかのように、
Bus Acccessが行われ、CPUが目覚めたときには、
メモリーが書き換えられてるとか、メモリ―データが、
外部に持ち出されていることになります。

外部8bit Data Busサイクルスチルモードで、9φ。
外部16bit Data なら5φ。
バーストモードで16bit Data Busだと、
4φで転送するため、非常に高速です。
25MHz clockだと12.5 M byte/secの転送速度ですから...

プログラムは思いのほか簡単ですが、
ハード屋は、「胃薬」が、必要になったり (^^;
でも、DMACが組み込まれる前は、もっともっと、
大変で、Dual port RAMや、FIFOで交わして、
何とかDMAをよけて通っていましたね。

あ、本当に雑談モードになってしまいましたが、
シミュレーターで、この部分をハードウエアで…
となると、USB1.1では、間に合わないので、
USB2.0か、i-linkで、専用ハードを作る羽目になり、
現実的ではないように思います。

まあ、オプテマイズさんのFX2 USB 2.0
http://optimize.ath.cx/FX2_USB/index.html
を標準I/Oとして採用し、CPUはvirtual、
でも、I/OはRealというのも、
かなりいけてて、ハードウエア完成前に、
ソフトウエア―完成済み。
というのも、かなり理想的ですね。
#6813 への返信

RE: DMA (2003-11-30 21:01 by srw #6852)

どうも、とても勉強になります。
実は秋月の3048Fのキットを2度買ったことが
あるだけで、マイコン等に関しては素人なので
質問しかできません(汗)。
DMAに関して、「H8マイコン完全マニュアル」で
少し調べてみました。時間のあるときに実機で
試してみようと思います。

OSに関しては、これまた素人考えなので間違っている
かもしれませんが、ITUがつけば最小限のものは
乗るのではないかと。
それすらもかなり先になりそうですが、、。

プロジェクトに関して、近々求人を出してみようと思います。
プロジェクトリーダーも私以外に必要です。
とりあえず必要な作業は、ソースの修正(3048以外に対応など)
になると思います。
#6838 への返信