独自言語 picle のコンパイラ化(その12) [PIC]
picleコンパイラを使って実際にワンボードのアプリケーションを作ってみるとスイッチ入力処理等でどうしてもタイマー割込みのようにバックグランドで定期的に動く処理が欲しくなります。
また、picle言語では従来から時間管理機能として Timer_ 変数が非ゼロの場合、10ms毎のタイマー割込み処理で Timer_ 変数をデクリメントする機能を実装していますが時間的に管理したい対象が複数ある場合、実装が面倒でした。
その都度、コンパイラ自体に組込み処理としてC言語でタイマー処理を実装するのも面倒なので今回はpicle言語だけでタイマー処理を実装できるようにしました。
使用方法としては picleソース内に proc Tint_() を組み込むと定期的(10ms間隔)に Tint_() 処理がコールされます。実現方法としては10ms毎のタイマー割込み処理内から picleで記述した Tint_()をコールするようにしているのでタイマー割込み処理の一部として Tint_()が実行されます。
今回のタイマー処理の機能追加はコンパイラのソース的には数ステップの追加ですが、picle 言語の使い勝手としては大きな追加になるのではないかと思います。
上記の対応をした picle コンパイラは「独自言語 picle compiler on PIC24FJ」からダウンロードできます。
タイマー処理テスト結果
[TOP] [ 前へ ] 連載記事 [ 次へ ]
また、picle言語では従来から時間管理機能として Timer_ 変数が非ゼロの場合、10ms毎のタイマー割込み処理で Timer_ 変数をデクリメントする機能を実装していますが時間的に管理したい対象が複数ある場合、実装が面倒でした。
その都度、コンパイラ自体に組込み処理としてC言語でタイマー処理を実装するのも面倒なので今回はpicle言語だけでタイマー処理を実装できるようにしました。
使用方法としては picleソース内に proc Tint_() を組み込むと定期的(10ms間隔)に Tint_() 処理がコールされます。実現方法としては10ms毎のタイマー割込み処理内から picleで記述した Tint_()をコールするようにしているのでタイマー割込み処理の一部として Tint_()が実行されます。
今回のタイマー処理の機能追加はコンパイラのソース的には数ステップの追加ですが、picle 言語の使い勝手としては大きな追加になるのではないかと思います。
上記の対応をした picle コンパイラは「独自言語 picle compiler on PIC24FJ」からダウンロードできます。
:l 1:# Tint_ test by skyriver 2017/05/26 2:var Count; 3:var SecCnt; 4: 5:proc Tint_() { 6: if ( SecCnt < 99 ) { 7: SecCnt = SecCnt + 1; 8: } else { 9: SecCnt = 0; 10: Count = Count + 1; 11: } 12:} 13: 14: 15:proc main() { 16: while (1) { 17: while ( Timer_ ) {} 18: Timer_ = 100; 19: PrnStr_( "\n Count = " ); 20: PrnDec_( Count ); 21: } 22:} :run Count = 0 Count = 1 Count = 2 Count = 3 Count = 4 Count = 5 Count = 6 Count = 7 |
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コメント 0