我在使代碼更加通用時面臨一個問題,我想用宏代替硬編碼值,但我面臨這個問題 :
原來的代碼:
#define io_dir_in(port, pin) NRF_P##port-> PIN_CNF[pin] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) /span>
io_dir_in(0, 0) 。
我添加了 :
#define A_Port 0
#define A_Pin 0
并且替換了 :
io_dir_in(A_Port, A_Pin)。
但是我得到一個錯誤 identifer "NRF_PA_Port" is undefined 因為 NRF_P 和 A_Port 被連接起來了。
uj5u.com熱心網友回復:
問題是,"標記的連接 "是在標記的擴展之前完成的。你需要在兩者之間增加一個額外的擴展步驟。
#define io_dir_in_impl(port, pin) NRF_P##port-> PIN_CNF[pin] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) /span>
#define io_dir_in(port, pin) io_dir_in_impl(port, pin)
現在在io_dir_in_impl()被展開之前,它的所有引數都被展開。因此,A_Port將被替換為0。
通過這個調整,io_dir_in(A_Port, A_Pin);擴展為:
NRF_P0->PIN_CNF[0] = (GPIO_PIN_CNF_DIR_Input < < GPIO_PIN_CNF_DIR_Pos) (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322471.html
標籤:
