Docs/E2J/NV133.pdf
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
&size(20){&color(,#FFE9C8){''マシンオブジェクト''};};
//邦題タイトル
&size(15){''原題:'Object of the machine'};
//洋題タイトル
-----
状態:''この文書の翻訳作業は完了しています''
//もしくは''この文書の翻訳作業は完了しています''
原文:NV133.pdf
//原文へのリンクなど
翻訳者:caskaz
//翻訳協力者のTwitterID,ハンドル名 例:@ksksue
対象読者:オブジェクトについての初歩知識
//誰向けの文書か簡単に。例:アセンブラ超初心者
#contents
//自動的に目次が生成されます
//最初のページ製作者は以下目次のタイトルを先に翻訳してお...
By Jon Williams
Nuts & Volts コラム#133 2006年5月
先月にPropellerチップを紹介してから頭の中でぐるんぐるんPr...
心配無用、君だけじゃなく皆おんなじさ。
先月、オブジェクト指向のspin言語について話したけれど、実...
みんなで変わろう、そしてPropellerマルチプロセッサのパワー...
僕は自分でもかなりのプログラマーだと思ってる。もちろんア...
Propellerユーザに良いニュースがあるよ。
今月は誰かが書いたアセンブラコードを使うのが全く苦になら...
でもまずはちょっとしたおさらいをしよう。Propellerチップは...
動作している全てのCogはI/Oに直接アクセスできる。system co...
“Hub”と呼ばれるシステムマネージャーがあってそれは各Cogが...
CogはSPIN言語インタプリタやアセンブラ言語プログラムを実行...
実際にはSPINンタプリタは必要な時にシステムROMからロードさ...
だから、アセンブラコードの容量の事で各Cogが持つ2KのRAMに...
(Cogに書き込まれるのはマシン語だがこれは492Longsの制限が...
もちろん、SPINとアセンブラにはパフォーマンスで差がある。...
さて、Propellerオブジェクトをロードしてアセンブラを使った...
まず、PCのターミナルに情報を送信する”debug”を作ってみよう...
Propellerは異獣だ。誰でも未使用の関数で浪費されるコードス...
さて、Chipが書いたTV_terminalオブジェクトを使ってTVに値を...
実際、PC_DebugTを作るのにTV_terminalオブジェクトの数値変...
PC_Debugの目的はPCターミナルに情報を送信する事だ。その為...
PC_DebugはFullDuplexに便利なラッパーを提供してFullDuplex...
今月ダウンロード用に準備したZIPファイルは特殊な名前だ。こ...
アーカイブファイルについては又あとで話すよ。
アーカイブファイルを解凍してPropellerToolでファイルを開け...
このオブジェクトを使うにはOBJブロックで下記のようにするだ...
OBJ
uart : “fullduplex”
プロジェクト内でuartの名前でFullDuplexオブジェクトを使え...
uartは別のCogでシリアル通信のデータをバッファに保存してく...
(これはメインプログラムを実行中のCogは影響されないという...
これはつまり通信用のcoprocessorを持ってるみたいな・・・
かなりクールだろう?
Parallaxの方針はオブジェクトをサポートする事、stand alone...
大抵startメソッドはコードの処理に基いてTrur(-1)かFalse(0)...
これは厳格なルールではない、現状ではその方が便利だからだ。
PC_Debugはオブジェクトをサポートするようにも作っていて、...
PUB start(baud) : okay
okay := uart.start(31,30, baud)
これは簡単なメソッドだがまだなにも起こっていない。PUB宣言...
又、リターンする値はコロンのあとに続く変数名(okay)に代入...
リターン値もLong変数だが必要ならWordやByteなどにダウンサ...
今はコードはたったの1行だ:okayがuart.startメソッドのリタ...
uart.startメソッドは3個のパラメータを指定できる。:(受信...
ここですることはPropeller standard pinを使ってuartオブジ...
しかし、PCに余ってるポートがあるのか、未使用の2本のI/Oピ...
問題はない。別のメソッドを作るだけだ。
PUB startx(rx_pin, tx_pin, baud) : okay
okay := uart.start(rx_pin, tx_pin, baud)
staretx(x付き)メソッドはボーレートと使用するピン番号を...
このメソッドのように同時に1つ以上ののターミナルをオープ...
Spinでは下記のようにオブジェクトの配列を定義することもで...
OBJ
terminal[2] : “ “pc_debug”
' Now we just need to asign the terminal to ddifferent P...
PUB main
terminal[0] : start(9600)
terminal[1] : startx(1, 0, 57600)
上記でterminal[0]は9600baudでdefaultのピン(31,30)を使用し...
terminal[1]は 57600baudでrx_pin(1), tx_pin(0)を使用してい...
Terminalオブジェクトの下層は1個のCogを使うFullDuplex UART...
PC_Debugオブジェクトに戻ろう。これは送信データをターミナ...
PUB stop
uart.stop
上記は冗長なようにみえる、でも実際は違う。PC_Debugを使う...
Figure133.1で完成したプロジェクトの階層を示している。PC_D...
PC_Debugオブジェクトを見ることでFullDuplexのオブジェクト...
それらは自明なのでの詳細を述べる必要はないと思う。
プロジェクトの目的であるカスタムメソッドの説明をしよう。
大抵10進数を使うのでターミナルに表示する為に数値を文字列...
PUB dec(value) | div, zpad
if (value < 0)
-value
out(“-”)
div := 1_000_000_000
zpad~
repeat 10
if (value => div)
out(value / div + “0”)
value //= div
zpad~~
elseif zpad or (div == 1)
out(“0”)
div /= 10
オーケー、これは初見だと少し秘密っぽく見えるけどSpinでは...
先月話したようにSpinは他の言語、いくつかのオペレータはCか...
いくつか新しい事があるのでそのそこから始めよう。
1個の引数のあとに垂直線と2つのシンボル(div zpad)がある。...
コードの最初は単純だ:引数が負なら引数を正数にして”-”キャ...
いくつかcoolなことがある、32bitなので大きな数字(-2,147,48...
そしてSpinでは普通コンマを使う箇所に”_”キャラクタを使って...
zpad~
これは下記と同じだ
zpad := 0
さて、今度はdecメソッドの意味を考えよう。
このメソッドで最大値は10桁なので変換ループを10回繰り返す。
もう一度簡単なrepeat 10文に注目してくれ。これはBASICのfor...
リピートループの制御変数について不思議に感じるかもしれな...
値が除数より大きいか等しいか検査して、もしそうなら除数で...
除数で割った余りを被除数として取り出す。数字出力の為に演...
演算子post set(~~)を覚えておいてね。
この演算子は変数の全部のビットを”1”にセットする(値を”-1”...
値が除数より小さければzpad flagまたは除数がゼロでないかを...
どちらかがtrueならゼロを表示する。最後のステップは除数を1...
オーケー、今度はbinary-hex変換メソッドを見てみよう。この...
PUB bin(value, digits)
digits := 1 #> digits <# 32
value <<= 32 – digits
repeat digits
out((value <-= 1) & %1 + “0”)
このメソッドは digitsの桁数を必要としている点がdecとは少...
演算子#>と<#を使ったdigitsについて考えてみよう。この部分...
それからビット31にMSBがくるように左ビットシフトしている。...
実際の処理はここだ:表示するdigitsの数だけループしている...
だから1ビット左ローテート(<-)するとbit31はbit0となる。
%1とANDしてそれをASCIIに変換して表示している。
僕はこのルーチンはナイスだと思う。
オーケー、16進変換の準備はできたかい?2進とおんなじだよ。
でも4ビットずつ扱うのでコードは少し増えるけどね。
PUB hex(value, digits)
digits := 1 #> digits <# 8
value <<= (8 – digits) << 2
repeat digits
out(lookupz((value <-= 4) & %1111 : “0”..”9”, “A”..”F””))
16進の1桁は4ビットで構成されるので必要桁数digitsに応じた...
これは4を掛けるより効果的な方法だ。Repeat loopはbinメソ...
最後に正しいdigitsキャラクタを表示するためにlookupz(ゼロ...
コンマでアイテムと複合リストを分けて混合リストを生成する。
PC_Debugオブジェクトが表示出力する時間のことを考えよう。...
プログラム本体は既に述べたとおりだ。CON,OBJセクションはと...
PUB main | idx
debug.start(460_800)
debug.str(string(FF, “Debug Test”, CR, LF, LF))
repeat
debug.hex(idx, 2)
debug.out(Space)
if (( ++idx // 16) == 0)
debug.crlf
until (idx == $100)
debug.crlf
debug.dec(-1)
debug.crlf
debug.ibun(-1, 32)
debug.crlf
debug.ihex(-1, 8)
ebug.stop
プログラムには一つだけpublicメソッドがあり、それはmainと...
始めのpublicメソッドはSpinプログラムが起動した時最初に動...
最初にする事はdebugオブジェクトをスタートさせることだ。ボ...
ChipのFullDuplexオブジェクトは「ハイパフォーマンス」と言...
僕が話したことがわかっただろう。
5MHzのクリスタルを接続したPropellerチップの実力だ。
最初の行はフォームフィードキャラクタ(HyperTerminalでは画...
これら全部が文字列を作りそのポインタ(メモリのアドレス)...
これは一度だけなら充分だ。でも、一度以上同じテキストを使...
DAT
titl byte “Nuts & Volts rocks!”, 0
ゼロターミネータに注意!
これは重要だから忘れてはいけない。この文字列を出力するに...
debug.str(@title)
プログラム本体は$00から$FFまでの16進数を縦16横16で表示す...
数字とスペースを表示したあと、idx値をインクリメントして現...
Idx値はループの最後で終わりかどうかテストしている。
もちろん、同じ事をするのに色んな方法がある。このループの...
repeat idx from $00 TO $FF
終了処理も下記のように置き換えられる。
If (idx == $100)
quit
僕はrepeatは自由度が大変大きくてオプションも多様性がある...
オーケー、これでPCの通信プログラムにデータ送信できるツー...
Spin言語のプログラミングで充分な経験をしたから外部ハード...
**Propeller アーカイブ [#p892ba0d]
今月のZIPファイルは特殊な名前だと気付いていると思う。この...
IDEを含むアーカイブの特徴でもある
アーカイブフォルダを数年先に開けてもプロジェクトを再構成...
Propellerで楽しんでください、次回まで・・楽しくブン回そう!
もちろん又すぐにBASIC StampとSXのプログラミングもするよ。
終了行:
&size(20){&color(,#FFE9C8){''マシンオブジェクト''};};
//邦題タイトル
&size(15){''原題:'Object of the machine'};
//洋題タイトル
-----
状態:''この文書の翻訳作業は完了しています''
//もしくは''この文書の翻訳作業は完了しています''
原文:NV133.pdf
//原文へのリンクなど
翻訳者:caskaz
//翻訳協力者のTwitterID,ハンドル名 例:@ksksue
対象読者:オブジェクトについての初歩知識
//誰向けの文書か簡単に。例:アセンブラ超初心者
#contents
//自動的に目次が生成されます
//最初のページ製作者は以下目次のタイトルを先に翻訳してお...
By Jon Williams
Nuts & Volts コラム#133 2006年5月
先月にPropellerチップを紹介してから頭の中でぐるんぐるんPr...
心配無用、君だけじゃなく皆おんなじさ。
先月、オブジェクト指向のspin言語について話したけれど、実...
みんなで変わろう、そしてPropellerマルチプロセッサのパワー...
僕は自分でもかなりのプログラマーだと思ってる。もちろんア...
Propellerユーザに良いニュースがあるよ。
今月は誰かが書いたアセンブラコードを使うのが全く苦になら...
でもまずはちょっとしたおさらいをしよう。Propellerチップは...
動作している全てのCogはI/Oに直接アクセスできる。system co...
“Hub”と呼ばれるシステムマネージャーがあってそれは各Cogが...
CogはSPIN言語インタプリタやアセンブラ言語プログラムを実行...
実際にはSPINンタプリタは必要な時にシステムROMからロードさ...
だから、アセンブラコードの容量の事で各Cogが持つ2KのRAMに...
(Cogに書き込まれるのはマシン語だがこれは492Longsの制限が...
もちろん、SPINとアセンブラにはパフォーマンスで差がある。...
さて、Propellerオブジェクトをロードしてアセンブラを使った...
まず、PCのターミナルに情報を送信する”debug”を作ってみよう...
Propellerは異獣だ。誰でも未使用の関数で浪費されるコードス...
さて、Chipが書いたTV_terminalオブジェクトを使ってTVに値を...
実際、PC_DebugTを作るのにTV_terminalオブジェクトの数値変...
PC_Debugの目的はPCターミナルに情報を送信する事だ。その為...
PC_DebugはFullDuplexに便利なラッパーを提供してFullDuplex...
今月ダウンロード用に準備したZIPファイルは特殊な名前だ。こ...
アーカイブファイルについては又あとで話すよ。
アーカイブファイルを解凍してPropellerToolでファイルを開け...
このオブジェクトを使うにはOBJブロックで下記のようにするだ...
OBJ
uart : “fullduplex”
プロジェクト内でuartの名前でFullDuplexオブジェクトを使え...
uartは別のCogでシリアル通信のデータをバッファに保存してく...
(これはメインプログラムを実行中のCogは影響されないという...
これはつまり通信用のcoprocessorを持ってるみたいな・・・
かなりクールだろう?
Parallaxの方針はオブジェクトをサポートする事、stand alone...
大抵startメソッドはコードの処理に基いてTrur(-1)かFalse(0)...
これは厳格なルールではない、現状ではその方が便利だからだ。
PC_Debugはオブジェクトをサポートするようにも作っていて、...
PUB start(baud) : okay
okay := uart.start(31,30, baud)
これは簡単なメソッドだがまだなにも起こっていない。PUB宣言...
又、リターンする値はコロンのあとに続く変数名(okay)に代入...
リターン値もLong変数だが必要ならWordやByteなどにダウンサ...
今はコードはたったの1行だ:okayがuart.startメソッドのリタ...
uart.startメソッドは3個のパラメータを指定できる。:(受信...
ここですることはPropeller standard pinを使ってuartオブジ...
しかし、PCに余ってるポートがあるのか、未使用の2本のI/Oピ...
問題はない。別のメソッドを作るだけだ。
PUB startx(rx_pin, tx_pin, baud) : okay
okay := uart.start(rx_pin, tx_pin, baud)
staretx(x付き)メソッドはボーレートと使用するピン番号を...
このメソッドのように同時に1つ以上ののターミナルをオープ...
Spinでは下記のようにオブジェクトの配列を定義することもで...
OBJ
terminal[2] : “ “pc_debug”
' Now we just need to asign the terminal to ddifferent P...
PUB main
terminal[0] : start(9600)
terminal[1] : startx(1, 0, 57600)
上記でterminal[0]は9600baudでdefaultのピン(31,30)を使用し...
terminal[1]は 57600baudでrx_pin(1), tx_pin(0)を使用してい...
Terminalオブジェクトの下層は1個のCogを使うFullDuplex UART...
PC_Debugオブジェクトに戻ろう。これは送信データをターミナ...
PUB stop
uart.stop
上記は冗長なようにみえる、でも実際は違う。PC_Debugを使う...
Figure133.1で完成したプロジェクトの階層を示している。PC_D...
PC_Debugオブジェクトを見ることでFullDuplexのオブジェクト...
それらは自明なのでの詳細を述べる必要はないと思う。
プロジェクトの目的であるカスタムメソッドの説明をしよう。
大抵10進数を使うのでターミナルに表示する為に数値を文字列...
PUB dec(value) | div, zpad
if (value < 0)
-value
out(“-”)
div := 1_000_000_000
zpad~
repeat 10
if (value => div)
out(value / div + “0”)
value //= div
zpad~~
elseif zpad or (div == 1)
out(“0”)
div /= 10
オーケー、これは初見だと少し秘密っぽく見えるけどSpinでは...
先月話したようにSpinは他の言語、いくつかのオペレータはCか...
いくつか新しい事があるのでそのそこから始めよう。
1個の引数のあとに垂直線と2つのシンボル(div zpad)がある。...
コードの最初は単純だ:引数が負なら引数を正数にして”-”キャ...
いくつかcoolなことがある、32bitなので大きな数字(-2,147,48...
そしてSpinでは普通コンマを使う箇所に”_”キャラクタを使って...
zpad~
これは下記と同じだ
zpad := 0
さて、今度はdecメソッドの意味を考えよう。
このメソッドで最大値は10桁なので変換ループを10回繰り返す。
もう一度簡単なrepeat 10文に注目してくれ。これはBASICのfor...
リピートループの制御変数について不思議に感じるかもしれな...
値が除数より大きいか等しいか検査して、もしそうなら除数で...
除数で割った余りを被除数として取り出す。数字出力の為に演...
演算子post set(~~)を覚えておいてね。
この演算子は変数の全部のビットを”1”にセットする(値を”-1”...
値が除数より小さければzpad flagまたは除数がゼロでないかを...
どちらかがtrueならゼロを表示する。最後のステップは除数を1...
オーケー、今度はbinary-hex変換メソッドを見てみよう。この...
PUB bin(value, digits)
digits := 1 #> digits <# 32
value <<= 32 – digits
repeat digits
out((value <-= 1) & %1 + “0”)
このメソッドは digitsの桁数を必要としている点がdecとは少...
演算子#>と<#を使ったdigitsについて考えてみよう。この部分...
それからビット31にMSBがくるように左ビットシフトしている。...
実際の処理はここだ:表示するdigitsの数だけループしている...
だから1ビット左ローテート(<-)するとbit31はbit0となる。
%1とANDしてそれをASCIIに変換して表示している。
僕はこのルーチンはナイスだと思う。
オーケー、16進変換の準備はできたかい?2進とおんなじだよ。
でも4ビットずつ扱うのでコードは少し増えるけどね。
PUB hex(value, digits)
digits := 1 #> digits <# 8
value <<= (8 – digits) << 2
repeat digits
out(lookupz((value <-= 4) & %1111 : “0”..”9”, “A”..”F””))
16進の1桁は4ビットで構成されるので必要桁数digitsに応じた...
これは4を掛けるより効果的な方法だ。Repeat loopはbinメソ...
最後に正しいdigitsキャラクタを表示するためにlookupz(ゼロ...
コンマでアイテムと複合リストを分けて混合リストを生成する。
PC_Debugオブジェクトが表示出力する時間のことを考えよう。...
プログラム本体は既に述べたとおりだ。CON,OBJセクションはと...
PUB main | idx
debug.start(460_800)
debug.str(string(FF, “Debug Test”, CR, LF, LF))
repeat
debug.hex(idx, 2)
debug.out(Space)
if (( ++idx // 16) == 0)
debug.crlf
until (idx == $100)
debug.crlf
debug.dec(-1)
debug.crlf
debug.ibun(-1, 32)
debug.crlf
debug.ihex(-1, 8)
ebug.stop
プログラムには一つだけpublicメソッドがあり、それはmainと...
始めのpublicメソッドはSpinプログラムが起動した時最初に動...
最初にする事はdebugオブジェクトをスタートさせることだ。ボ...
ChipのFullDuplexオブジェクトは「ハイパフォーマンス」と言...
僕が話したことがわかっただろう。
5MHzのクリスタルを接続したPropellerチップの実力だ。
最初の行はフォームフィードキャラクタ(HyperTerminalでは画...
これら全部が文字列を作りそのポインタ(メモリのアドレス)...
これは一度だけなら充分だ。でも、一度以上同じテキストを使...
DAT
titl byte “Nuts & Volts rocks!”, 0
ゼロターミネータに注意!
これは重要だから忘れてはいけない。この文字列を出力するに...
debug.str(@title)
プログラム本体は$00から$FFまでの16進数を縦16横16で表示す...
数字とスペースを表示したあと、idx値をインクリメントして現...
Idx値はループの最後で終わりかどうかテストしている。
もちろん、同じ事をするのに色んな方法がある。このループの...
repeat idx from $00 TO $FF
終了処理も下記のように置き換えられる。
If (idx == $100)
quit
僕はrepeatは自由度が大変大きくてオプションも多様性がある...
オーケー、これでPCの通信プログラムにデータ送信できるツー...
Spin言語のプログラミングで充分な経験をしたから外部ハード...
**Propeller アーカイブ [#p892ba0d]
今月のZIPファイルは特殊な名前だと気付いていると思う。この...
IDEを含むアーカイブの特徴でもある
アーカイブフォルダを数年先に開けてもプロジェクトを再構成...
Propellerで楽しんでください、次回まで・・楽しくブン回そう!
もちろん又すぐにBASIC StampとSXのプログラミングもするよ。
ページ名: