中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

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

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

        這種方案可以很好地工作,但是有幾個問題需要注意。

        本文引用地址:http://www.antipu.com.cn/article/156478.htm

        必須事先定義每個變量的地址,這項工作比較耗時,特別是確定隨后將所有變量移至不同的存儲區(qū)域時。
        必須注意一個以上的變量不要占用同一地址,如果發(fā)生這種錯誤將很難追蹤這些故障。
        變量的(開始)值必須通過應(yīng)用程序裝載,如上述程序的最后一行。如果有多個變量按照這種方式化將會占用大量的程序空間。
        比較有效的方案是利用機(jī)制分別聲明程序段和段。這種方法允許編程人員指定匯編程序的哪一部分定義為程序空間,哪一部分定義為空間。

        segment code

        move DP[0], #VarA ; Point to VarA
        move Acc, @DP[0] ; Get current value of VarA
        add #1 ; Increment it
        move @DP[0], Acc ; Store value back in VarA

        segment data

        VarA:
        dw 0394h ; Initial value for VarA


        利用上述方案,在數(shù)據(jù)段聲明的變量地址由編譯器解析文件時指定,用同樣方法為程序空間分配地址標(biāo)簽。標(biāo)簽用于對變量地址指定符號名稱,dw和db聲明可以在化變量時用于設(shè)置字寬或字節(jié)寬度初始值。這種情況下,假定匯編文件中事先沒有segment data指令,編譯器將從0000h地址起始數(shù)據(jù)段。這意味著VarA將存儲在字地址0000h。對于程序空間,org聲明將強(qiáng)制變量從指定的起始地址開始存儲。

        數(shù)據(jù)段初始化
        在先前的程序清單中,變量VarA定義(用dw聲明)的初始值為0394h。但是,該值在程序中并不裝載到VarA。那么,如何初始化這一數(shù)值? 答案是在編譯和運行工程時,執(zhí)行數(shù)據(jù)段初始化。

        MaxQAsm編譯器通過產(chǎn)生一個二級hex輸出文件響應(yīng)segment data指令。通常,為工程產(chǎn)生的hex文件包含程序數(shù)據(jù)。例如,如果編譯工程example.prj,將產(chǎn)生一個名稱為example.hex的hex文件,并包含通過編譯工程文件產(chǎn)生的程序數(shù)據(jù)。如果定義了數(shù)據(jù)段,則將產(chǎn)生一個名稱為example_d.hex的附加hex文件,該文件包含該段編譯數(shù)據(jù)。

        執(zhí)行工程時,檢查是否在工程編譯中產(chǎn)生了數(shù)據(jù)段文件(以_d.hex結(jié)尾)。如果存在數(shù)據(jù)段文件,MAX-IDE通過標(biāo)準(zhǔn)的JTAG裝載器將該段數(shù)據(jù)裝載到器件的數(shù)據(jù)SRAM。該過程在標(biāo)準(zhǔn)的hex文件裝載到程序存儲器之后執(zhí)行。

        這種方案能夠很好地工作在開發(fā)階段,當(dāng)器件連接到JTAG適配器,在應(yīng)用程序運行之前,MAX-IDE重新裝載程序數(shù)據(jù)和段數(shù)據(jù)。但是,一旦器件掉電并重新上電,而且允許獨立運行(沒有連接調(diào)試器),在每次運行前MAX-IDE將無法正確裝載數(shù)據(jù)段。變量也無法設(shè)置在所要求的數(shù)值,導(dǎo)致應(yīng)用程序不能正確執(zhí)行。這種故障很難分析,因為一旦器件重新連接到調(diào)試器,MAX-IDE將在每次運行前重新開始裝載數(shù)據(jù)段,問題也就消失了。

        保存和恢復(fù)數(shù)據(jù)段
        一個遺留問題是:如何使應(yīng)用程序在連接調(diào)試器(每次運行前MAX-IDE重新裝載程序和數(shù)據(jù))和獨立運行(上電后RAM內(nèi)容不確定)時都能保持工作。顯然,解決方法需要兩個步驟:應(yīng)用程序?qū)⒆兞恐?一旦經(jīng)過初始化)保存到閃存,每次復(fù)位或上電后重新裝載這些數(shù)值。

        對于第一步,應(yīng)用程序必須將數(shù)值保存到閃存。每次主機(jī)擦除或裝載程序后第一次運行應(yīng)用程序時執(zhí)行該操作。

        應(yīng)用程序檢測“標(biāo)志”位置以驗證變量之前是否復(fù)制到閃存內(nèi)。該標(biāo)志可以存儲在特殊功能、非易失存儲器,或與變量共用存儲器,只要變量具有非零初始值(與空RAM地址區(qū)分開)。
        應(yīng)用程序?qū)⒚總€變量值從數(shù)據(jù)RAM復(fù)制到閃存,絕大多數(shù)帶有可重復(fù)寫操作閃存的MAXQ微控制器(如MAXQ2000)利用UROM_flashWrite函數(shù)實現(xiàn)。
        應(yīng)用程序在閃存中寫一個標(biāo)志,表明已經(jīng)存儲變量。
        對于第二步,在后續(xù)的程序運行中,應(yīng)用程序必須將變量從閃存重新裝載到預(yù)先規(guī)定的數(shù)據(jù)RAM地址。

        應(yīng)用程序檢測閃存的標(biāo)志位置,以驗證已經(jīng)存儲變量。
        應(yīng)用程序利用UROM_copyBuffer子程序?qū)⒆兞繌拈W存復(fù)制到數(shù)據(jù)RAM的正確位置。
        以下程序清單展示了利用MAXQ2000評估板的保存-恢復(fù)方案,該程序中,變量值存儲在閃存的7000h–71FFh地址內(nèi)。

        $include(maxQ2000.inc)

        ;; Code memory (flash) : 0000h-7FFFh (word addr)
        ;; Data memory (RAM) : 0000h-03FFh (word addr)

        org 0000h

        ljump start ; Skip over password area

        org 0020h

        start:
        move DPC, #1Ch ; Set all pointers to word mode
        move DP[0], #0F000h ; Check first variable value (flag)
        lcall UROM_moveDP0 ; 'move GR, @DP[0]' executed by Utility ROM
        move Acc, GR
        cmp #1234h
        jump NE, copyToFlash



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

        評論


        相關(guān)推薦

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

        關(guān)閉