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

          新聞中心

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

          8051 與 AndesCoreTM 的軟件差異與移植

          作者: 時(shí)間:2015-07-29 來(lái)源: 收藏

          1. 與 AndesCoreTM

          本文引用地址:http://www.ex-cimer.com/article/277992.htm

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

          2. 8051 與 AndesCoreTM 常見(jiàn)差異事項(xiàng)

          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    ; 將一個(gè)立即數(shù) imm20s 賦于寄存器 Rt
          ADDI    Rt, Ra, imm15s ; 將一個(gè)立即數(shù) imm15s 與 Ra 相加結(jié)果賦于 Rt
          2.   16 位指令: 在操作數(shù)范圍較小時(shí),可以被編譯成 16 位指令
          MOVI55    Rt5, imm5s    ;
          ADDI333     Rt3, Ra3, imm3u ;

          2.2.  指令差異

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

          2.3.  地址空間映像差異

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

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

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

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

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

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

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

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

          間接尋址區(qū)。

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

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

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

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

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

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

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

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

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

          8051 和 AndesCore?是不同類型的 CPU,它們所使用的數(shù)據(jù)類型所對(duì)應(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ù)通常都會(huì)按照本身的屬性對(duì)齊,比如 int 類型則會(huì) 4 bytes對(duì)齊,short 則會(huì) 2 bytes 對(duì)齊。這樣的存放方式可以提高 CPU 對(duì)數(shù)據(jù)讀取時(shí)的 效率。雖然 AndesCore?是 32bit 的 CPU, 在只需要 8bit 和 16bit 的數(shù)據(jù)時(shí)能 節(jié)省存儲(chǔ)空間,但在處理 16bit 和 32bit 的數(shù)據(jù)上則有更高效。

          在 8051 中有 sbit 關(guān)鍵字用于設(shè)置對(duì)特殊功能寄存器 SFR 的直接訪問(wèn),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 語(yǔ)法,移植的時(shí)候需要將其修改成標(biāo)準(zhǔn) C 操作語(yǔ)法,另外在 AndesCore?中,所有的寄存器都是單獨(dú)存在的,不 會(huì)占用內(nèi)存的空間。

          2.7.  指針使用差異

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

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

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

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

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

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

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



          上一頁(yè) 1 2 3 下一頁(yè)

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

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁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); })();