色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 手機與無線通信 > 設(shè)計應用 > 在MAX-IDE中自動初始化數(shù)據(jù)段

          在MAX-IDE中自動初始化數(shù)據(jù)段

          作者: 時間:2011-04-06 來源:網(wǎng)絡(luò) 收藏

          摘要:該應用筆記討論了提供的程序和段的靈活工具,用于MAXQ®微控制器的應用編程。程序和段機制能夠在存儲器聲明變量位置,并以起始值對這些變量進行化。應用程序可以將這些變量值緩存在閃存內(nèi),并在需要時恢復這些數(shù)據(jù)。該方法允許基于匯編語言的應用程序充分利用提供的數(shù)據(jù)段裝載功能,無論微控制器與JTAG調(diào)試器是否連接都能保持工作。MAXQ2000微控制器評估板能夠演示這一方案,本文給出了相應的例程。

          本文引用地址:http://cafeforensic.com/article/156478.htm

          概述
          MAXQ匯編程序的變量可以存儲在工作寄存器(例如累加器A[0]至A[15])或數(shù)據(jù)存儲器(SRAM)。在數(shù)據(jù)存儲器中存儲變量能夠為應用程序變量提供較大的工作區(qū)域,但需要額外的訪問時間。

          MaxQAsm編譯器和環(huán)境提供單獨聲明程序段和數(shù)據(jù)段的機制,對各段產(chǎn)生各自的hex輸出文件。運行時,MAX-IDE將程序段文件裝載到程序存儲器(通常為閃存),將數(shù)據(jù)段文件裝載到數(shù)據(jù)存儲器(通常為RAM)。然而,由于數(shù)據(jù)存儲器為易失存儲器,一旦微控制器掉電,將丟失數(shù)據(jù)段內(nèi)容。

          本文利用MAXQ2000 EV (評估)板首先演示應用程序開始運行時如何將預裝載數(shù)據(jù)存儲器值保存到閃存內(nèi),隨后演示微控制器重新上電時如何從閃存刷新數(shù)據(jù)段。無論應用程序處于開發(fā)階段(連接到JTAG適配器和MAX-IDE)還是在現(xiàn)場運行,這兩個步驟都允許使用相同的數(shù)據(jù)段機制聲明和化變量。

          該應用筆記的例程為MAXQ2000微控制器以及MAXQ2000評估板編寫,但相應程序和原理適用于任何基于MAXQ20、能夠重新編程閃存的微控制器。

          提供最新版本的安裝軟件和關(guān)于MAX-IDE環(huán)境的文檔,可免費下載。

          MAX-IDE安裝程序
          MAXQ核編譯指南
          開發(fā)工具指南
          變量和存儲位置
          嵌入式應用通常需要一定的工作區(qū)域存儲狀態(tài)信息、配置數(shù)據(jù)、中間數(shù)據(jù)、循環(huán)計數(shù)器以及計算結(jié)果。存儲在該工作區(qū)域的數(shù)據(jù)通常作為變量,具有以下特征。

          它們是臨時數(shù)據(jù)。如果應用程序由于電源失效或復位產(chǎn)生中斷,不需要保存這些數(shù)據(jù)。
          它們可頻繁訪問和更新。它們必須存儲在能夠快速讀寫的位置;這些位置的寫入次數(shù)必須沒有限制。
          它們具有定義的值。程序開始運行時,用戶程序必須將它們設(shè)置為特定值。
          用C語言或其它高級語言編寫的程序編譯成匯編代碼,編譯器通常自動為變量分配空間(同時將變量初始化為預先定義的起始值)。這種情況下,用戶只需聲明變量、變量類型及其初始值(可選),其余工作由編譯器處理。

          unsigned int c = 0x1234;

          然而,用MAXQ匯編語言編寫應用程序時,必須明確指定變量分配空間并設(shè)置變量初始值。這些細節(jié)能夠嚴格控制MAXQ微控制器的資源,但增加了系統(tǒng)復雜性。

          對于基于匯編的小型應用程序或不需要大量工作區(qū)域的應用程序,內(nèi)部寄存器可用來存儲所有應用程序變量。這種方法具有兩個重要優(yōu)勢:

          程序結(jié)構(gòu)緊湊、運行速度快。根據(jù)寄存器位置,在一個指令周期內(nèi)可實現(xiàn)寄存器變量的讀取、寫入或復制其它寄存器變量。對基于MAXQ20的微控制器,在最差工作條件下,通常最多占用不超過兩個指令周期。
          直接操作變量??芍苯硬僮饕恍﹥?nèi)部寄存器。例如,可以(使用AP寄存器)選擇16個工作累加器A[0]至A[15]的任何一個作為有效累加器Acc。這就意味著如果需要對這些寄存器存儲的一個變量進行操作時,可直接對寄存器進行操作,無需將數(shù)據(jù)復制出來進行操作后再將數(shù)據(jù)復制回去。同樣,執(zhí)行djnz指令時,存儲在LC[0]和LC[1]寄存器的變量可直接作為循環(huán)計數(shù)器。
          對于大規(guī)模應用程序或者當應用程序需要大量工作變量時,可將其中一些或所有變量存儲在基于SRAM的數(shù)據(jù)存儲器。這種方式允許創(chuàng)建更多的變量,具體受限于數(shù)據(jù)存儲器的空間。按照這種方式存儲的變量可以通過MAXQ20核的標準數(shù)據(jù)指針訪問,該指針用于讀取或?qū)懭胱止?jié)寬度或字寬變量(注意:本應用筆記的例程假定DP[0]配置為工作在字模式)。

          move DP[0], #0010h ; Location of variable in data memory
          move Acc, @DP[0] ; Read variable
          add #1 ; Increment variable value by 1
          move @DP[0], Acc ; Store variable back in data memory

          當對一個變量進行一系列的較長計算操作時,可以將變量值首先復制到工作寄存器,如上述例程所示。所有中間操作可利用該工作寄存器執(zhí)行,完成計算后將變量值復制回來。

          MAX-IDE的段聲明
          決定在基于SRAM的數(shù)據(jù)存儲器存儲應用程序變量時,如何確定變量的存儲地址?

          通常,除了調(diào)試器使用的最高32個字節(jié)的存儲空間外,應用程序可以使用其它所有數(shù)據(jù)存儲器。這意味著聲明一個變量即可定義其在數(shù)據(jù)存儲器中的位置。程序可通過該地址對變量進行讀寫,用#define宏命令將變量地址和符號名稱關(guān)聯(lián)起來。

          #define VarA #0020h
          #define VarB #0021h
          #define VarC #0022h

          move DP[0], VarA ; Point to VarA variable
          move Acc, @DP[0] ; Read value of variable
          move DP[0], VarB ; Point to VarB variable
          move @DP[0], Acc ; Copy VarA to VarB
          move DP[0], VarC ; Point to VarC variable
          move @DP[0], #1234h ; Set VarC = 1234h


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: 數(shù)據(jù) 初始 自動 MAX-IDE

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉