今天發現了一個會疏忽的bug,
原程式如下 :
if( i == 0 )
READ_MSFR( MSFR_ICH, current );
else if( i == 1 )
READ_MSFR( MSFR_IAH, current );
else
READ_MSFR( MSFR_IBH, current );
看似沒問題, 但是READ_MSFR是一個macro, 內容如下:
#define READ_MSFR(addr, data) {MSFRADR = addr; data = MSFRDAT;}
直接帶入上面會變成:
if( i == 0 )
MSFRADR = MSFR_ICH;
current= MSFRDAT;
else if( i == 1 )
MSFRADR = MSFR_IAH;
current= MSFRDAT;
else
MSFRADR = MSFR_IBH;
current= MSFRDAT;
這樣就會跟預想的結果不同, 所以..... 括號是很重要的, 千萬別偷懶.
正確的程式:
if( i == 0 )
{
READ_MSFR( MSFR_ICH, current );
}
else if( i == 1 )
{
READ_MSFR( MSFR_IAH, current );
}
else
{
READ_MSFR( MSFR_IBH, current );
}