<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 中斷函數(shù)寫法的比較

          中斷函數(shù)寫法的比較

          作者: 時間:2016-11-13 來源:網(wǎng)絡 收藏
          單片機程序,中斷是免不了的。我比較喜歡用C寫單片機程序,簡單而且可讀性高,當然程序效率沒有匯編的高。目前寫過51單片機跟AVR單片機的C程序,最近在看MSP430的書。用C寫不同的單片機程序其實都是大同小異,因此能對不熟悉的單片機也能很快上手寫程序。不過中斷函數(shù)寫法,各個編譯器往往都會有些差別。

          最早寫的C程序是51單片機的,用的編譯器自然是大名鼎鼎的keil c了。Keil的功能還是非常強勁的,不僅能編譯,還有軟件仿真調(diào)試與硬件調(diào)試的功能。由于條件簡陋,沒用過什么仿真器,一直都是靠軟件仿真調(diào)試程序的。Keil 中的中斷函數(shù)一般格式如下:

          本文引用地址:http://www.ex-cimer.com/article/201611/316268.htm

          void 函數(shù)名() interrupt n using n

          {

          …….

          }

          其中函數(shù)名可以任意取,關鍵字interrupt用來指明這是一個中斷服務函數(shù),后面的n表示中斷號,關鍵字using加后面的n表示使用哪一組寄存器。

          后然接觸到AVR的單片機,該單片機開發(fā)環(huán)境一般用ICC或者是GCC。由于ICC是商用軟件,而GCC是免費的,因此我一般用GCC來寫AVR的C程序。現(xiàn)在版本的GCC for AVR有了一些改進,對于中斷函數(shù)支持兩種關鍵字ISR與SIGNAL,其格式如下:

          ISR(vect)

          {

          ………

          }

          SIGNAL(vect)

          {

          ……..

          }

          其中的vect就是中斷向量名,根據(jù)不同的型號的AVR單片機的不同的中斷源都會有相對應的中斷向量名,比如外部中斷0對于ISR格式的中斷向量名為INT0_vect,對SIGNAL則為SIG_INTERRUPT0。

          最近在看TI的MSP430系列單片機的資料,看到該單片機采用C430寫的中斷服務函數(shù)有點像前兩種的綜合,其格式如下:

          interrupt [vect] void 函數(shù)名(void)

          {

          …….

          }

          其中vect也是中斷向量名,函數(shù)名可以任取。

          比較這幾種法,本人更傾向于AVR的GCC的寫法。首先對于中斷函數(shù)來說即不能有輸入?yún)?shù)又沒有返回值,沒必要再給它加個“void 函數(shù)名(void)”的形式的函數(shù)。而且光看中斷向量名一般都能知道是哪個中斷源產(chǎn)生,再寫個中斷函數(shù)名作解釋似乎有點重復。對于keil c用中斷向量號的形式來表示中斷源,感覺有點麻煩,記住中斷源的中斷號比記中斷向量要難多了。不過可能標準51的中斷緣比較少,而且keil應該出來的比較早,所以才會采用這種方式。



          關鍵詞: 中斷函數(shù)寫

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();