Applilet EZ PL for RL78 V1.0J, V2.00J を試してみました。
デジタル回路版電子ブロックという感じで興味深いツールと思いましたが、少々使いづらい点もあったので改善要望として挙げておきます。
> 本ツールは評価版です。本ツールに関するテクニカルサポートは受け付けておりません。
と明記されていることは理解しており、返答等を求めているものではありません。
・ユーザーパネルについて要望
ユーザーパネルをソース作成で新規作成すると、パネル編集で
/*--- Variable declaration ---*/ /* ここに変数を記述してください */ /* 例 UCHAR work; */ /*--------------------------------*/ /* Function Declaration */ void PANEL_hoge(UCHAR In_1, UCHAR *Out_1) { /* ここに処理を記述してください */ }
のようなテンプレートが用意されこれを編集することとなりますが、用意されるのが変数と関数の定義のみです。
例えば標準で用意されるロジック IC のコード 74hc.c では
#if defined IC74HC77_USED /******************************************************************************* * Function Name: IC_74HC77 * Description : Bistable Latch * Arguments : D_in D-terminal input value (HIGH or LOW) * G_in G-terminal input value (HIGH or LOW) * Return Value : Q-terminal output value (HIGH or LOW) ********************************************************************************/ UCHAR IC_74HC77( UCHAR D_in, UCHAR G_in ) { UCHAR Q_out; UCHAR lastQ; lastQ = BitMemGet(g74HC77_LastQ, g74HC77_Count); if (G_in == HIGH) Q_out = D_in; else Q_out = lastQ; /* G_in == LOW */ BitMemSet(g74HC77_LastQ, g74HC77_Count, Q_out); return Q_out; } /******************************************************************************* * Function Name: IC74HC77_Initialize * Description : IC74HC77 Panel Initialize. * Arguments : none * Return Value : none ********************************************************************************/ void IC74HC77_Initialize( void ) { memset(g74HC77_LastQ, 0, (IC74HC77_USED / 8) + 1); } /******************************************************************************* * Function Name: IC74HC77_Counter_Clear * Description : IC74HC77 Panel Counter Clear. * Arguments : none * Return Value : none ********************************************************************************/ void IC74HC77_Counter_Clear( void ) { g74HC77_Count = 0; } /******************************************************************************* * Function Name: IC74HC77_Counter * Description : IC74HC77 Panel Counter. * Arguments : none * Return Value : none ********************************************************************************/ void IC74HC77_Counter( void ) { g74HC77_Count ++; } #endif /* end of defined IC74HC77_USED */
処理の関数の他、初期化とカウンタのクリア/インクリメントの関数が用意され、複数個の同じ IC に個々の状態を持つことを実現しています。現在ユーザパネルに提供されている機能では作成したユーザーパネルを複数個用意して個々に状態を持つことは難しく、ロジック IC に提供されている機能と同等のものが提供されればと思います。
あと、複数のユーザーパネルを定義してそれぞれを使用すると config.h に
#define UPANEL_USED (5)
上記のように総使用数が定義されますが、別々のユーザーパネルについては、
#define UPANEL_hoge_USED (3) #define UPANEL_piyo_USED (2)
使用数はそれぞれ別にカウントされるべきと思います。ユーザーパネル別に数が参照できると
/*--- Variable declaration ---*/ static UCHAR initialized; static UCHAR index; static UCHAR work[UPANEL_hoge_USED]; /*--------------------------------*/ /* Function Declaration */ void PANEL_hoge(UCHAR In_1, UCHAR *Out_1) { if (!initialized) { // 初期化 memset(work, 0, UPANEL_hoge_USED); index = 0; initialized = 1; } // 処理 ~ // インデクスを次に進める if (++index >= UPANEL_hoge_USED) { index = 0; } }
ひとつの関数に初期化と、呼ばれる毎にインデクス値を更新することで複数のユーザーパネルの状態に対応することも可能となります。