新聞中心

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

        在MAX-IDE中自動初始化數據段

        作者: 時間:2011-04-06 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/156478.htm

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

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

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

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

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

        MAX-IDE安裝程序
        MAXQ核編譯指南
        開發工具指南
        變量和存儲位置
        嵌入式應用通常需要一定的工作區域存儲狀態信息、配置數據、中間數據、循環計數器以及計算結果。存儲在該工作區域的數據通常作為變量,具有以下特征。

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

        unsigned int c = 0x1234;

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

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

        程序結構緊湊、運行速度快。根據寄存器位置,在一個指令周期內可實現寄存器變量的讀取、寫入或復制其它寄存器變量。對基于MAXQ20的微控制器,在最差工作條件下,通常最多占用不超過兩個指令周期。
        直接操作變量。可直接操作一些內部寄存器。例如,可以(使用AP寄存器)選擇16個工作累加器A[0]至A[15]的任何一個作為有效累加器Acc。這就意味著如果需要對這些寄存器存儲的一個變量進行操作時,可直接對寄存器進行操作,無需將數據復制出來進行操作后再將數據復制回去。同樣,執行djnz指令時,存儲在LC[0]和LC[1]寄存器的變量可直接作為循環計數器。
        對于大規模應用程序或者當應用程序需要大量工作變量時,可將其中一些或所有變量存儲在基于SRAM的數據存儲器。這種方式允許創建更多的變量,具體受限于數據存儲器的空間。按照這種方式存儲的變量可以通過MAXQ20核的標準數據指針訪問,該指針用于讀取或寫入字節寬度或字寬變量(注意:本應用筆記的例程假定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

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

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

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

        #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 下一頁

        關鍵詞: 數據 初始 自動 MAX-IDE

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 虞城县| 福安市| 蒙城县| 通榆县| 寿阳县| 白银市| 利川市| 金川县| 凤庆县| 辉县市| 大城县| 大足县| 新昌县| 盐源县| 九台市| 安塞县| 嫩江县| 云安县| 化隆| 嵊州市| 高台县| 长子县| 潮安县| 镇安县| 安国市| 石楼县| 上杭县| 连江县| 郯城县| 南阳市| 咸宁市| 济南市| 嘉祥县| 合山市| 衡阳市| 沈丘县| 深泽县| 托里县| 汉川市| 凤城市| 陆川县|