新聞中心

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

8051與AndesCore的軟件差異與移植

作者: 時間:2015-07-29 來源:電子產(chǎn)品世界 收藏

  1. TM

本文引用地址:http://m.butianyuan.cn/article/277989.htm

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

  2. 8051與AndesCore常見差異事項(xiàng)

  2.1. 位寬的差異

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

  2.2. 指令差異

  8051 匯編語言共有111 條指令集,AndeStar™的V3m指令集有 157 條,AndeStar™的V3指令集有 200 多條,兩種 CPU的指令集大概可以分為以下幾類:算術(shù)運(yùn)算,如加,減,乘,除等操作;數(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地址,它們用于存放程序運(yùn)行時的代碼和數(shù)據(jù),在AndesCore™上代碼在link 后,程序運(yùn)行的代碼和數(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中所需要的堆棧空間很小。而對于 And esCore™來說,堆??梢栽O(shè)置在任意合適的 RAM上。程序運(yùn)行時所有的局部變量都存放在堆棧中,只需要確保在設(shè)計系統(tǒng)的時候有足夠的堆棧空間。在 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ā)工具中,如K eil,可以通過設(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)的寬度也不同,如下表所示:

  在鏈接完成后數(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處,如下表:

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

  2.7. 指針使用差異

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

  而在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ī)制。對于上層用戶來說是透明的。


上一頁 1 2 3 下一頁

關(guān)鍵詞: 8051 AndesCore

評論


相關(guān)推薦

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

關(guān)閉