2016-08-05 124 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在C中是好的。

+0

不在64位系統上:從指向'uint32_t'的指針是單向的;當你丟掉一半位數時,沒有辦法回到原來的值。 –

+0

@JonathanLeffler雖然會掉落一些,但仍然可以施展。也許有些警告。 C是危險的。 – zzn

+0

我想補充一點,我的問題是有關32位架構的stm32微處理器。 – Wodji