&size(20){&color(,#FFE9C8){''Object of the machine''};}; //邦題タイトル &size(15){''原題:'マシンオブジェクト'}; //洋題タイトル ----- 状態:''この文書は現在翻訳中です'' //もしくは''この文書の翻訳作業は完了しています'' 原文:NV133.pdf //原文へのリンクなど 翻訳者:caskaz //翻訳協力者のTwitterID,ハンドル名 例:@ksksue 対象読者:オブジェクトについての初歩知識 //誰向けの文書か簡単に。例:アセンブラ超初心者 #contents //自動的に目次が生成されます //最初のページ製作者は以下目次のタイトルを先に翻訳しておいてください。 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をデコード [#p892ba0d]