Object of the machine
''原題:'マシンオブジェクト'


状態:この文書は現在翻訳中です

原文:NV133.pdf

翻訳者:caskaz

対象読者:オブジェクトについての初歩知識

By Jon Williams
Nuts & Volts コラム#133 2006年5月

先月にPropellerチップを紹介してから頭の中でぐるんぐるんPropellerが回ってたかい?
心配無用、君だけじゃなく皆おんなじさ。

先月、オブジェクト指向のspin言語について話したけれど、実際有利な点はそこじゃない。ちょっと試してみたら考えたこともないような素晴らしい事を始めることになって満面の笑顔になるのは間違いないさ。
みんなで変わろう、そしてPropellerマルチプロセッサのパワーを解き放そう。

僕は自分でもかなりのプログラマーだと思ってる。もちろんアセンブリも使ってるけど、あんまり好きじゃない。誰かが書いたアセンブラコードを使う時は好きじゃないという意味だけどね。それを読むのはちょっとした仕事だからだ。
Propellerユーザに良いニュースがあるよ。
今月は誰かが書いたアセンブラコードを使うのが全く苦にならない事を教えてあげるよ。

でもまずはちょっとしたおさらいをしよう。Propellerチップは8個の32ビットプロセッサ(Cog)が同時に動作するのは覚えているよね?
動作している全てのCogはI/Oに直接アクセスできる。system counter(遅延させる時に利用)に対しても同様だ。
“Hub”と呼ばれるシステムマネージャーがあってそれは各Cogが共有リソース(特にメインシステムRAM[32kB])にアクセスするのをコントロールしている。

CogはSPIN言語インタプリタやアセンブラ言語プログラムを実行している。
実際にはSPINンタプリタは必要な時にシステムROMからロードされるアセンブラ言語プログラムだ。
だから、アセンブラコードの容量の事で各Cogが持つ2KのRAMについて心配する必要がない。SPINコードはメインシステムRAMに置かれるのでそれは32kByteまで大丈夫だ。
(Cogに書き込まれるのはマシン語だがこれは492Longsの制限がある)

もちろん、SPINとアセンブラにはパフォーマンスで差がある。アセンブラはSPINの250倍の実行速度がある。システムクロック80MHzで設定されたPropellerチップは1秒間で8万行のSPINコードを実行できる。これはかなり速い。

さて、Propellerオブジェクトをロードしてアセンブラを使ったSPINプログラムの能力を確かめてみよう。
まず、PCのターミナルに情報を送信する”debug”を作ってみよう。これが組込み関数ではないことに驚く人もいるかもしれない、組込み関数じゃないんだよ。
Propellerは異獣だ。誰でも未使用の関数で浪費されるコードスペースの為に苦労させられるのは嫌だろう。
さて、Chipが書いたTV_terminalオブジェクトを使ってTVに値を表示させる事ができる。
実際、PC_DebugTを作るのにTV_terminalオブジェクトの数値変換ルーチンを借用したよ。

PC_Debugの目的はPCターミナルに情報を送信する事だ。その為にシリアル送信を処理するコードが必要なのでChipが書いたFullDuplex?という高機能なUARTオブジェクトを利用させてもらおう。
PC_DebugはFullDuplex?に便利なラッパーを提供してFullDuplex?のほとんどのメソッドにアクセスできるようにした。有った方がいいと思われる便利な機能も加えた。(数字を文字列に変換するなど)

今月ダウンロード用に準備したZIPファイルは特殊な名前だ。これはPropellerのアーカイブファイル名だ。
アーカイブファイルについては又あとで話すよ。
アーカイブファイルを解凍してPropellerTool?でファイルを開けたらPC_Debugを見られるよ。
このオブジェクトを使うにはOBJブロックで下記のようにするだけだ。

OBJ
	uart : “fullduplex”

PropellerでSIRCSをデコード


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS