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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 不用仿真器一樣進行AVR程序開發(fā)

          不用仿真器一樣進行AVR程序開發(fā)

          作者: 時間:2013-12-13 來源:網(wǎng)絡 收藏

          在開發(fā)單片機程序時,有許多人依賴于仿真機,一旦離開了仿真機開發(fā)程序時就感覺無從下手。其實對FLASH存貯器單片機,不要仿真機也能方便快速地開發(fā)程序。具體可以從以下幾方面入手:

          一、盡量使用高級語言開發(fā)系統(tǒng)程序 您有沒有在寫匯編程序時,標錯一個標號而浪費您大把時間找錯或跳轉(zhuǎn)偏移量過大而不得不改動程序結(jié)構的經(jīng)歷。其實您如果使用高級語言開發(fā)程序,就不會有這樣的痛苦。 在開發(fā)程序時,除了建立一個良好的開發(fā)文檔外,使用語言的選擇也很重要。有許多人認為使用匯編寫程序比較精簡,而用高級語言開發(fā)會浪費很多程序空間,其實這是一種誤解。對一個有經(jīng)驗的,而且非常熟悉某種單片機的匯編高手而言,他是能寫出比高級語言更精簡的代碼。而對匯編不是很熟的開發(fā)者、或突然更換了一種新的單片機,您能保證一定可以寫出比高級語言更簡練的代碼嗎? 高級語言的優(yōu)越性是匯編語言不能比的:
          1、程序移植方便
          2、程序的堅固性
          3、對數(shù)學運算的支持
          4、條理清晰的結(jié)構化編程,程序的可維護性
          5、開發(fā)周期短
          現(xiàn)在的高級語言編譯器(如C編譯器)已可以產(chǎn)生代碼效率很高的機器代碼,因此建議大家能用高級語言實現(xiàn)的程序盡可能使用高級語言寫,在對速度和時序要求特嚴的場合可以采用混合編程的方法來解決。

          二、更多的使用軟件模擬仿真環(huán)境 現(xiàn)在許多單片機都提供軟件模擬仿真環(huán)境,如單片機" style="color:blue;text-decoration:none;font-weight:normal;">單片機就可以在ATMEL公司提供的 STUDIO開發(fā)平臺的模擬仿真環(huán)境中進行軟件的模擬調(diào)試。BASCOM-AVR還提供了更加人性化和配合外部圖形界面(鍵盤、標準LCD顯示器等)的軟件模擬調(diào)試環(huán)境。 ATMEL的AVR STUDIO是一個開發(fā)AVR單片機的集成開發(fā)環(huán)境,其支持高級語言和匯編語言的源代碼級軟件模擬調(diào)試。在模擬仿真條件下調(diào)試算法、程序流程等可以說和硬件仿真機是沒有區(qū)別的;而調(diào)試延時程序、計算一段程序運行所花的時間等方面,可以說比硬件更方便,因為許多仿真機(如JTAG ICE)是無法提供程序運行時間等調(diào)試參數(shù)的。 另外,對I/O端口、定時器、UART、中斷響應等,在AVR STUDIO中均可實現(xiàn)模擬仿真,用戶也可以采用軟件的單步運行、設置斷點等手段,分析內(nèi)存和查看AVR中所有的硬件資源的數(shù)據(jù)以及使用情況。 學會使用和以軟件模擬仿真為主、已硬件仿真配合的系統(tǒng)開發(fā)調(diào)試手段可以大大提高項目的開發(fā)效率,縮短開發(fā)周期。因為,一旦系統(tǒng)整體設計完成,硬件PCB板的設計和制作同軟件系統(tǒng)的開發(fā)可同時進行。當硬件系統(tǒng)板完成后,軟件總體的架構也已經(jīng)調(diào)試完成,既可進行實際的調(diào)試階段。

          三、善用目標板上的硬件資源 在許多系統(tǒng)目標板上均有LED、數(shù)碼管、RS232等附件和接口,其實利用好這些附件接口,也能實現(xiàn)和完成程序的調(diào)試開發(fā)。 我們使用的目的是要觀察單片機內(nèi)部的狀態(tài)和數(shù)據(jù),利用這些附件和FLASH存貯器多次可擦寫的特點,完全可以觀察到單片機內(nèi)部的狀態(tài)。 AVR單片機是支持ISP的FLASH單片機,開發(fā)時可以通過下載電纜將其和PC連成一個整體,在程序編譯完后立刻下載到目標MCU中運行。在需要觀察單片機內(nèi)部狀態(tài)時,可以程序的適當位置加入少部分代碼,把MCU的內(nèi)部狀態(tài)和數(shù)據(jù)通過LED、數(shù)碼管等顯示出來。在有RS232通信接口的應用中,可以直接將需要觀察的MCU內(nèi)部狀態(tài)送到PC機,在PC機上用串口調(diào)試器等一些超級終端來顯示數(shù)據(jù)?,F(xiàn)在大部分的開發(fā)環(huán)境本身就提供了超級終端,如ICC、CVAVR、BASC0M-AVR等。 由于單片機采用了支持ISP的Flash技術,因此采用高級語言開發(fā)系統(tǒng)程序,更多的以軟件模擬仿真技術,加上使用串口輸出調(diào)試數(shù)據(jù)的開發(fā)手段已成為開發(fā)單片機和嵌入式系統(tǒng)(如32位ARM的COMMAND調(diào)試手段等)的流行和高效的方法。

          四、舉例
          在開發(fā)AVR的I2C應用例程時,使用串口輸出調(diào)試數(shù)據(jù)的方法介紹。
          首先初始化UART??梢钥闯龀跏蓟疷ART只需要很少的幾行代碼,在完成程序調(diào)試后將可以將其刪除。如果你的系統(tǒng)程序本身就需要使用串口,那么初始化UART就沒有一行多余的代碼了。
          void uart_init(void)
          {
          UCSRB=(1

          然后我們可以寫一個putchar函數(shù),或直接使用標準輸入輸出庫中的putchar函數(shù)。
          void putchar(unsigned char c)
          {
          while (!(UCSRA(1

          接下來只要在需要調(diào)試的程序部分調(diào)用putchar函數(shù)就可以將一些需要查看的
          MCU中硬件資源的數(shù)據(jù)和狀態(tài)送PC機顯示了。如要觀察I2C中斷程序中TWSR寄存器的值,只要在I2C中斷程序中插入兩行代碼就可以了:
          #pragma interrupt_handler TWI_ISR:iv_TWI
          void TWI_ISR(void)
          {
          unsigned char temp = TestAck();
          putchar(temp);
          switch (temp);//調(diào)試完后,本行改為switch(TestAck()),
          //刪除上面兩行就可以了。
          {
          case SR_SLA_ACK:
          {
          fill_rece();
          TWI_STATE=TWI_RD;
          Twi_ACK();
          Break;
          }
          . . .
          }
          }

          在PC機的超級終端軟件中,設置波特率、數(shù)據(jù)格式后打開串口就可以觀察TWSR寄存器的狀態(tài)值了。



          評論


          相關推薦

          技術專區(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); })();