PICAXEのpause命令は他のタスクに影響するか?

    PICAXE
    10 /27 2013
    PICAXEの調査はいいかげんウンザリなのだが.....

    まさかpause, waitも他のタスクに影響するなんて事はないよな?
    という疑問が浮かんでしまった。 <(ToT)>
    もし影響があるとすると多用するので大変なことになる!

    マニュアルには書いてないし、PICAXEでマルチタスクをやってる人なんて日本には他にいない?ので自分で調べるしかない。
    あ~、しょうがないな~。 調べて見るか~。

    結論
     問題ない。
      タイマーを8個使っても問題ないことからかなり高度に管理されているような気がする。(調べた限りでは & 割り込みを使わない限りは)
    追記
     この試験ではpause時間自体は調べていない。
     後の時間でpause時間が短くなるのが観測された。
     この記事の真ん中あたりを参照。
    追記終わり

    詳細は下記。
    ・タスク0にpause, wait命令を埋め込み、
     タスク7のトグル周期が変わるか調べる。
    ;*** Task0 ***
    start0:
    main0:
       ; pause 10  ; ms
       ; pause 100  ; ms
       ; pause 1000 ; ms
       ; pause 10000 ; ms
       ; wait 1   ; s
       ; wait 10   ; s
       goto main0

    ;*** Task1~6 ***
    start:
    main: goto main

    ;*** Task7 ***
    start7:
    main7: toggle B.3
          goto main7

    結果
    pause, waitなし:112Hz
    pause 10  :112Hz
    pause 19  :112Hz
    pause 20  :122Hz
    pause 100  :126Hz
    pause 1000 :126.5Hz
    pause 10000 :126.5Hz
    wait 1   :126.5Hz
    wait 10   :126.5Hz

    pause 10付近が遅いのは恐らく「goto main」の回数が多く、そのオーバーヘッドが大きいためだと思われる。
    ただ19msと20msで急に変わる理由が分からない
     何かの切り変わり目のような気がするが不明。
    ただ、いずれにしろ「goto main」だけのときより遅くなることはないので問題ない。


    ・タスク7にもタイマーを入れると?
    ;*** Task0 ***
    start0:
    main0:
       ; pause 10  ; ms
       ; pause 100  ; ms
       ; pause 1000 ; ms
       ; pause 10000 ; ms
       ; wait 1   ; s
       ; wait 10   ; s
       goto main0

    ;*** Task1~6 ***
    start:
    main: goto main

    ;*** Task7 ***
    start7:
    main7: pause 25
          toggle B.3
          goto main7

    結果:
    pause, waitなし 25Hz
    pause 10  ;25Hz
    pause 100  ;25Hz
    pause 1000 ;25Hz
    pause 10000 ;25Hz
    wait 1   ;25Hz
    wait 10   ;25Hz
    問題なし。


    ・タスク全部にタイマーを入れる。
    #picaxe 14m2

    ;*** Task0 ***
    start0:
    main0: pause 10
          goto main0
    ;*** Task1 ***
    start1:
    main1: pause 127
          goto main1
    ;*** Task2 ***
    start2:
    main2: pause 139
          goto main2
    ;*** Task3 ***
    start3:
    main3: pause 157
          goto main3
    ;*** Task4 ***
    start4:
    main4: pause 173
          goto main4
    ;*** Task5 ***
    start5:
    main5: pause 191
          goto main5
    ;*** Task6 ***
    start6:
    main6: pause 199
          goto main6
    ;*** Task7 ***
    start7:
    main7: pause 25
          toggle B.3
          goto main7
    結果:25Hz
    「タスク7もタイマーだと?」と変わらないので問題ない。

    以上
    関連記事

    コメント

    非公開コメント

    マルチタスクでのPause

    最近になって秋月のプログラマブルタイマーキットでPICAXEを知り、使い始めました。
    電子工作自体が初心者みたいなものなので、色々と参考にさせていただいています。
    週末はBASICの罠にはまったりしながら悪戦苦闘していました。(ま、それが楽しいのですがw)
    さて、PICAXEでマルチタスクを使用する場合、PAUSEは20msecの精度(だったかな?)となるような記述をマニュアルのどこかに書いてあった気がします。
    (今、探してみたのですが見つからずorz)

    Re:マルチタスクでのPause

    PICAXEはとっつき易いのですがチョット複雑なことをすると罠に掛かりますね。
    (引き算してマイナスになると不定とか)

    マルチタスクでpause命令は20ms精度なんですか。
    確かに全然合わないことがありました...

    Friendship 7

    浅く広くのハード屋です。
    コメントへの返信には過大な期待をしないで下さい。 非公開コメントは停止しております。 不適切なコメントはFC2で自動的にはじかれます。
    リンクフリーですが盗作は禁止です。
    本ブログの内容を参考にされる場合はあくまで自己責任でお願い致します。