私が理解しなければならない埋め込みコードには、次のコード行があります。
*((void (**) ()) 0x01) = c_int01; /* Write the interrupt routine entry */
関数ポインタで割り込みベクトルを設定していることは把握できますが、c_int01
どのようなキャスト(void (**) ())
を指しているのかわかりません。標準の関数ポインタ表記は知っています(void (*)())
が、他のものは知りません。
次のようにもう少し読みやすくなるように、コードをリファクタリングしようとしました。
// header
typedef void (*interrupt_handler)(); // prototype of an interruption handler
#define INTERRUPT_VECTOR 0x01
#define SET_INTERRUPT_HANDLER( handler ) *((interrupt_handler) INTERRUPT_VECTOR) = (handler)
// code
SET_INTERRUPT_HANDLER( c_int01 );
しかし、組み込みコンパイラは、LHS がオブジェクトではないことについて泣き言を言います。
この表記が何を意味するか知っている人はいますか?(void (**)())
// 編集:
興味のある人にとっては、これをよりよく理解できます。
*( (void (*)())* 0x01) = c_int01;