イベントをイベントキューに投稿するこのマクロを入手しました。
POST_(myTarget, event)
イベントは、ローカルキューに直接送信されるか、シリアル化されて、イベントを別のマイクロコントローラに送信するI2Cサービスのイベントキューに送信されます。受信サービスがローカルかリモートかは、次のように定義されます。
#define myTarget_REMOTE
#define anotherTarget_LOCAL
私がやりたいのは次のようなものです(これは確かに許可されていません):
#define POST(target, e) \
#ifdef target##_REMOTE \
/* create a i2c request-event with serialized(e)
as parameter and post to I2c-Manager */
#else \
/* post directly */
POST_(target, event) \
#endif
したがって、すべての情報はコンパイル時に存在しますが、プリプロセッサに何をすべきかを指示する方法がわかりません。
- ローカル/リモート定義に応じて、ターゲットごとに2つのマクロを作成できますが、これは面倒です。
- 実行時にテストを行うこともできますが、これも悲しい話です。
編集:
プログラムがより明確に見える例:
#define target1_LOCAL
#define target2_REMOTE
POST(target1, e) ==preprocessor==> POST_(target1, e)
POST(target2, e) ==preprocessor==>
do { \
req = createI2cRequest(serialize(e)); \
POST_(I2cManager, req); \
}while(0)
したがって、プログラムでは、私が使用するだけPOST(target, event)
で、ターゲットの場所は完全に透過的です。