SSブログ

初めてのcog廻し [Propeller]

screen.png
 
お膳立てはそろったし、JUNK-BOXさまにご助言いただいたりで、PropellerでLEDチカチカしてみました。上のスクリーンショットはPropellerのツールのものです。
COM,VER,PUB,PUB...とセクションごとに自動的に色分けされます。
見づらいのでテキストで
 
 
COM


_clkmode = xtal1+pll16x


_xinfreq = 5_000_000


LED0 = 16


LED1 = 17


LED2 = 18


LED3 = 19


LED4 = 20


LED5 = 21


LED6 = 22


LED7 = 23


PUSHBUTTON = 15


VAR


long Stack[10]

PUB Main


repeat


  cognew(LEDBlink(LED0, clkfreq/1),@Stack)


         LEDBlink(LED1, clkfreq/10)


         LEDBlink(LED2, clkfreq/10)


         LEDBlink(LED3, clkfreq/10)


         LEDBlink(LED4, clkfreq/10)


         LEDBlink(LED5, clkfreq/10)


         LEDBlink(LED6, clkfreq/10)


         LEDBlink(LED7, clkfreq/10)

  repeat while (ina[PUSHBUTTON] == 1)

PUB LEDBlink(Pin, Delay)


dira[Pin]~~


  ! outa[Pin]


    waitcnt(Delay + cnt)

 
COMは、共通Resourceの設定で、クロックの設定とピンの設定。
=右辺の数字はポート番号です。
 
VERはグローバル変数の設定。今回はcogのためのスタック領域(って受け売りです。)
 
PUBはCで言う関数ですね。まずcog0にロードされ、mainの方のcognewでcogを順次(←間違いです。JUNK-BOXさまのコメント参照してください)起動して、PUSHBUTTONが0になるまで空転、1になると動き出す...と動いているはずです。
各cogはLEDBlinkを実行します.....してるみたいです。
 
実行したところ 
 

 
 
nice!(0)  コメント(2)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 0

コメント 2

JUNK-BOX

cog2個使いですね
最初のcognewで、あいているcogがLEDBlinkを実行しはじめるので
LED0が反転してウェイトして終了。
以降のLEDBlinkはcog0で逐次処理なので、1個反転して少しウェイト
して戻ってきて、次のLEDBlinkを実行してって具合でシフトみたいに
なってるんですね。

全部LEDBlinkをcognewに置き換ると、いかにも並列処理っぽくなると
思います。
by JUNK-BOX (2008-03-03 09:24) 

doggie

JUNK-BOXさまこんにちは

ご指摘ありがとうございます。ワンショット動作なので変だなぁと思ってはいたのですが...。
Language Reference見てみると確かに連続指定みたいなのは無く、私の早とちりでした。
{}の代わりにインデントだったりとか、新鮮味いっぱいです。
by doggie (2008-03-03 14:37) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。