在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 8051 與 AndesCoreTM 的軟件差異與移植

            8051 與 AndesCoreTM 的軟件差異與移植

            作者: 時間:2015-07-29 來源: 收藏

            1. 與 AndesCoreTM

            本文引用地址:http://www.biyoush.com/article/277992.htm

            本文將介紹使用 與 AndesCore?差異事項,并對兩種 CPU 系統(tǒng)相關(guān)事 項做說明,后面再介紹從 移植到 AndesCore?上注意事項,舉中斷向量表 及異常處理函數(shù)的例子說明差異及移植,最后簡要介紹 AndesCore?在 應(yīng) 用的三款CPU:N705,N801 和 N968A。

            2. 8051 與 AndesCoreTM 常見差異事項

            2.1.  位寬的差異

            位寬是指處理器一次執(zhí)行指令的數(shù)據(jù)帶寬。8051 是 8 位寬的處理器, 而 AndesCore?是 32 位寬的處理器,支持 32 位與 16 位的混合指令集,位數(shù)越寬, 在數(shù)據(jù)的處理方面就更有效率。

            8051 指令例子:
            MOV A, Rn    ; 寄存器傳送到累加
            INC A    ; 累加器加 1
            AndesCore?指令例子:
            1.   32 位指令
            MOVI    Rt, imm20s    ; 將一個立即數(shù) imm20s 賦于寄存器 Rt
            ADDI    Rt, Ra, imm15s ; 將一個立即數(shù) imm15s 與 Ra 相加結(jié)果賦于 Rt
            2.   16 位指令: 在操作數(shù)范圍較小時,可以被編譯成 16 位指令
            MOVI55    Rt5, imm5s    ;
            ADDI333     Rt3, Ra3, imm3u ;

            2.2.  指令差異

            8051 匯編語言共有 111 條指令集,AndeStar?的 V3m 指令集有 157 條, AndeStar?的 V3 指令集有 200 多條,兩種 CPU 的指令集大概可以分為以下幾 類:算術(shù)運算,如加,減,乘,除等操作;數(shù)據(jù)傳送,如數(shù)據(jù)在寄存器,內(nèi)存間 的傳送,賦值等;邏輯跳轉(zhuǎn),如函數(shù)呼叫,無條件跳轉(zhuǎn),條件跳轉(zhuǎn),中斷返回等; 在 AndesCore?中還有特權(quán)模式的指令部分,關(guān)于兩種指令集的具體差別,可 以分別參考對應(yīng)的指令集介紹文檔。

            2.3.  地址空間映像差異

            AndesCore?使用 memory map 方式映像地址空間,主要有兩種,內(nèi)存的空 間映射,如其中的 RAM 或 ROM 地址,它們用于存放程序運行時的代碼和數(shù)據(jù), 在 AndesCore?上代碼在 link 后,程序運行的代碼和數(shù)據(jù)地址會最終確定, Andes 提供了一個簡便的 link script 工具 sag,可以很方便的對系統(tǒng)中可用的內(nèi) 存空間進(jìn)行分配設(shè)定。

            另一個是外設(shè)所對應(yīng)的地址空間,可以通過查看 SoC 對應(yīng)的手冊了解對應(yīng)的 外設(shè)映射的空間范圍及相應(yīng)的使用方法。

            2.4.  堆棧設(shè)置差異

            8051 的堆棧的起始位置是固定的(部分衍生 8051 可以做程序設(shè)定),它通 常固定在片內(nèi)的 RAM 中,8051 內(nèi)存空間有限,非常小,程序中所使用的變量 存放于特定的數(shù)據(jù)空間中,并不會放在堆棧空間,所以在 8051 中所需要的堆棧 空間很小。而對于 AndesCore?來說,堆??梢栽O(shè)置在任意合適的 RAM 上。程 序運行時所有的局部變量都存放在堆棧中,只需要確保在設(shè)計系統(tǒng)的時候有足夠 的堆??臻g。在 AndesCore?中有$sp 寄存器表示棧頂位置,這需要在系統(tǒng)上電 或者是系統(tǒng) reset 后初始化時進(jìn)行設(shè)置。

            2.5.  代碼和數(shù)據(jù)的存儲差異

            在 8051 系列單片機(jī)中,數(shù)據(jù)存儲區(qū)可以分為內(nèi)部數(shù)據(jù)存儲區(qū)以及外部數(shù)據(jù) 存儲區(qū)。

            內(nèi)部數(shù)據(jù)存儲區(qū)有幾個區(qū)別:data,bdata,idata。

            data : 片內(nèi) RAM 直接尋址區(qū)。bdata: 片內(nèi) RAM 位尋址區(qū)。idata: 片內(nèi) RAM

            間接尋址區(qū)。

            外部數(shù)據(jù)存儲區(qū)又有:xdata,pdata。

            xdata 和 pdata:是外部存儲區(qū),有些芯片會帶有 XRAM。

            在有些開發(fā)工具中,如 Keil,可以通過設(shè)置存儲模式來處理,存儲模式?jīng)Q定 了默認(rèn)的存儲器類型,此存儲器類型將應(yīng)用于函數(shù)參數(shù),局部變量和定義時未包含 存儲器類型的變量。

            SMALL 所有的變量存放在片內(nèi) RAM(data 區(qū)間)

            COMPACT 所有的變量存放在外部存儲區(qū)(pdata 區(qū)間)

            LARGE 所有的變量存放在外部存儲區(qū)(xdata 區(qū)間)

            AndesCore?以內(nèi)存映射的方式,內(nèi)存空間不會有特別的限制,就是說不會 像 8051 那樣需放在某處區(qū)間,這樣的設(shè)計更方便靈活,允許程序代碼和數(shù)據(jù)在 可用的空間里自由放置。

            有時候需要將某段代碼或者數(shù)據(jù)存放在指定的位置上,在 8051 中,可以在 代碼中使用"at"關(guān)鍵字,但該關(guān)鍵字是 8051 中所特有的,會造成可移植性和維 護(hù)的問題,在 AndesCore?上,提供了一種簡便的 link script 工具,如上所提到 的 sag 工具,在 C 代碼中使用 GNU 標(biāo)準(zhǔn)的語法格式,在 link 之后相應(yīng)的代碼和 數(shù)據(jù)將存放于指定的位置,這樣可以避免在代碼中使用"at"該平臺相關(guān)的屬性設(shè) 置。

            2.6.  數(shù)據(jù)類型及對齊差異

            8051 和 AndesCore?是不同類型的 CPU,它們所使用的數(shù)據(jù)類型所對應(yīng)的寬 度也不同,如下表所示:

            Type    AndesCore?8051Notes
            char8-bit signed8-bit signed
            short16-bit16-bit
            int32-bit16-bitint is smaller on 8051
            long32-bit32-bit
            long long64-bitN/A
            float32-bit32-bit
            double64-bit32-bit8051 has no 64-bit floating point type
            long double64-bitN/A

            在鏈接完成后數(shù)據(jù)通常都會按照本身的屬性對齊,比如 int 類型則會 4 bytes對齊,short 則會 2 bytes 對齊。這樣的存放方式可以提高 CPU 對數(shù)據(jù)讀取時的 效率。雖然 AndesCore?是 32bit 的 CPU, 在只需要 8bit 和 16bit 的數(shù)據(jù)時能 節(jié)省存儲空間,但在處理 16bit 和 32bit 的數(shù)據(jù)上則有更高效。

            在 8051 中有 sbit 關(guān)鍵字用于設(shè)置對特殊功能寄存器 SFR 的直接訪問,8051的特殊功能寄存器分布在內(nèi)存地址 0x80 到 0xFF 處,如下表:

            F8H






            FFH
            F0HB *





            F7H
            E8H






            EFH
            E0hACC *





            E7H
            D8H






            DFH
            D0HPSW *





            D7H
            C8HT2CON *
            RCAP2LRCAP2HTL2TH2
            CFH
            C0h






            C7H
            B8HIP *





            BFH
            B0hP3 *





            B7H
            A8hIE *





            AFH
            A0HP2 *





            A7H
            98HSCON *SBUF




            9FH
            90HP1 *





            97H
            88hTCON *TMODTL0TL1TH0TH1
            8FH
            80HP0 *SPDPLDPH

            PCON87H

            sbit 是 8051 擴(kuò)展的變量類型,非標(biāo)準(zhǔn) C 語法,移植的時候需要將其修改成標(biāo)準(zhǔn) C 操作語法,另外在 AndesCore?中,所有的寄存器都是單獨存在的,不 會占用內(nèi)存的空間。

            2.7.  指針使用差異

            8051 中兩種類型的指針,分別是存儲器指針和通用指針,通用指針由 3 個字 節(jié)組成,第一個字節(jié)用來指明對應(yīng)的內(nèi)存類型,所以這種類型的指針類型占用空 間更大也更慢,存儲器指針只能用來訪問指定類型的存儲器空間。

            通用指針:
            通用指針的聲明和標(biāo)準(zhǔn) C 語言中一樣
            char *s;    /* string ptr */
            int *numptr; /* int ptr */ long *state; /* long ptr */
            存儲器指針:
            char data *str;    /* ptr to string in data */
            int xdata *numtab; /* ptr to int(s) in xdata */              

            而在 AndesCore?上指針不會有這方面的限制,它是一個 32bit 的數(shù)據(jù),普通的寄存 器就 可以 存放指針 內(nèi)容 ,可 以訪問到 系統(tǒng)  4G  范圍內(nèi)的 空間 (N705,N801 地址空間只有 16M,N968A 以上的 CPU 地址空間可達(dá) 4G)。

            2.8.  函數(shù)聲明差異

            在 8051 中由于堆棧空間有限,如果有函數(shù)是可重入的,需要在函數(shù)聲明的 時候用關(guān) 鍵字  reentrant  做說明。 8051  的中斷處理 函數(shù)則 需要 使用關(guān)鍵字 interrupt 聲明,中斷處理函數(shù)有時也需要用 using 關(guān)鍵字指明哪一寄存器組會被 使用到。

            在 AndesCore?中,都采用標(biāo)準(zhǔn)的 C 語法,在聲明函數(shù)時并不需要這些附加 的聲明。AndesCore?遵行底層的 ABI 機(jī)制,編譯器處理底層的寄存器及堆棧相 關(guān)機(jī)制。對于上層用戶來說是透明的。

            存儲器相關(guān)文章:存儲器原理



            上一頁 1 2 3 下一頁

            關(guān)鍵詞: andes andescore 8051 MCU

            評論


            相關(guān)推薦

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

            關(guān)閉