nrf51822驅動文件中NRF_MODULE_ENABLED()的含義

在nrf51822的SDK12.3.0這個版本中,裏面的很多驅動文件的C文件中都會有#if NRF_MODULE_ENABLED(xx)這個條件編譯,NRF_MODULE_ENABLED()的原型是

#define NRF_MODULE_ENABLED(module) \
    ((defined(module ## _ENABLED) && (module ## _ENABLED)) ? 1 : 0)

這是一個宏定義,其中的##表示將將module這個變量的值與_ENABLE連接起來,比如NRF_MODULE_ENABLED(I2S)就表示((defined(I2S_ENABLED) && (I2S_ENABLED)) ? 1 : 0),意思是如果定義了I2S_ENABLED,並且I2S_ENABLED值不爲0,那麼這個式子的值就爲1,否則就爲0,所以只要定義了I2S_ENABLED,並且I2S_ENABLED不爲0,那麼#if NRF_MODULE_ENABLED(I2S)這個條件編譯就能通過,否則#if到#endif之間的代碼就不會被編譯,相應的函數就不能使用。這個寫法就可以通過宏定義來控制相應驅動的使能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章