2016-08-05 10 views
0

私はこのコード部分を理解できず、誰かが私に何が起こっているのか説明できますか?関数名がuint32_tにキャスト

私は2つの機能を持って:

void timer_irq_handler(void) { 
    .... 
} 

void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) { 
    .... 
} 

はその後、私はこのようなものだ:

NVIC_SetVector(TIM_MST_IRQ, (uint32_t)timer_irq_handler); 

を私は(のuint32_t)に、ボイド機能をキャストするために理解していない

+0

関数ポインタ( 'void(*)(void)'型)を'uint32_t'、おそらくそれをいくつかの割り込みベクタに格納します。 –

+0

すぐに応答していただきありがとうございます。このキャスティングの結果は何ですか?このポインタのアドレスですか? – Wodji

+0

システムが64ビットシステムの場合は、まったく致命的です。 32ビットシステムでは、ポインタは数字として転送されます - 特に良い方法ではありませんが、おそらくはうまくいくでしょう。コードは 'uintptr_t'を使うべきです。 'sizeof(void *)== sizeof(void(*)(void))'というマシンで動作します。 –

答えて

-1

関数名をポインタをキャストすると、uint32_tへのポインタがキャストされます。

+0

64ビットシステムではない:ポインタから 'uint32_t 'へのキャストが一方向です。あなたが半分のビットを投げ捨てたとき、元の価値に戻る方法はありません。 –

+0

@ JonathanLefflerそれはいくつかのビットを削除しますが、まだキャストすることができます。多少の警告。 Cは危険です。 – zzn

+0

私は32ビットアーキテクチャのstm32マイクロプロセッサに関する私の質問を追加したいと思います。 – Wodji

関連する問題