close

今天發現了一個會疏忽的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 );
      }

全站熱搜
創作者介紹
創作者 喵一拳 的頭像
喵一拳

喵一拳的隨手筆記

喵一拳 發表在 痞客邦 留言(0) 人氣()