国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

8051與AndesCore的軟件差異與移植

發(fā)布時間:2015-10-27 14:06    發(fā)布者:designapp
關(guān)鍵詞: 8051 , AndesCore
  1. 8051與AndesCoreTM
  本文將介紹使用8051與AndesCore?差異事項(xiàng),并對兩種CPU系統(tǒng)相關(guān)事項(xiàng)做說明,后面再介紹從 8051移植到AndesCore ?上注意事項(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?來說,堆棧可以設(shè)置在任意合適的 RAM上。程序運(yùn)行時所有的局部變量都存放在堆棧中,只需要確保在設(shè)計(jì)系統(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è)計(jì)更方便靈活,允許程序代碼和數(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ī)制。對于上層用戶來說是透明的。
                  3. 系統(tǒng)相關(guān)事項(xiàng)說明
  3.1. 操作模式
  8051只有一種mode,AndesCore?有兩種mode,分別是 superuser mode和user mode ,當(dāng)系統(tǒng)上電啟動時是在 superuser mode,或者當(dāng)系統(tǒng)進(jìn)入到中斷或者異常時也進(jìn)入到superuser mode,當(dāng)從中斷或者是異常返回后,會返回到user mode 。由于8051沒有mode切換的問題,所以在移植的時候只需要理解AndesCore?在mode方面的機(jī)制就可以。
  3.2. 系統(tǒng)的啟動
  8051和AndesCore ?的系統(tǒng)啟動過程類似,通常在0 地址存放中斷向量表,第一個向量表是reset,當(dāng)系統(tǒng)上電或者是reset 后,經(jīng)過該向量會跳轉(zhuǎn)到一個啟動函數(shù)中,該啟動函數(shù)會完成系統(tǒng)啟動所必要的步驟,比如設(shè)置CPU,初始化SoC ,清理內(nèi)存,初始化 C 運(yùn)行環(huán)境等, 最后完成所有的準(zhǔn)備后跳轉(zhuǎn)到 main函數(shù)。
  3.3. 中斷處理
  8051有5 個中斷源,通常中斷向量表只是一個跳轉(zhuǎn),會跳到真正的中斷處理函數(shù),8051只能設(shè)置成兩級的中斷優(yōu)先級。

  AndesCore?包含了9 個內(nèi)部異常,中斷向量號對應(yīng)于從 0 到8, 9 之后對應(yīng)于外部中斷,在Internal VIC (IVIC )mode時可支持32個外部中斷,


         當(dāng)External VIC(EVIC) mode時由外部中斷控制器決定, 最多有64個。

  中斷的處理由以下幾部分組成:
  1. 實(shí)現(xiàn)中斷處理函數(shù)
  可以用匯編實(shí)現(xiàn)8051 的中斷處理函數(shù),也可以用C 來實(shí)現(xiàn),在8051中C 實(shí)現(xiàn)的中斷處理函數(shù)會有一個"interrupt" 的關(guān)鍵字,如果有寄存器 bank被使用到,還要加上"using"關(guān)鍵字。如果要將中斷處理函數(shù)固定在特定位置還需要使用"at" 關(guān)鍵字,而 AndesCore?使用的是標(biāo)準(zhǔn)的 C 語法,不需要為中斷處理函數(shù)做這些設(shè)置。
  2. 中斷向量表的產(chǎn)生
  8051 中斷向量表擺放在 0 開始的位置,在AndesCore?中硬件可以設(shè)定啟動地址,通常設(shè)為 0 地址,也可以是非 0 地址,中斷向量表存放在對應(yīng)系統(tǒng)啟動地址處。在程序編寫過程中可以通過標(biāo)準(zhǔn)的gnu 語法再加上link script 的sag 工具,以使產(chǎn)生的中斷向量表在鏈接的時候存放于特定的位置。
  3. 中斷配置
  在8051中,需要做以下設(shè)置
  1. IE 寄存器中Individual Interrupt Enable 位設(shè)1
  2. IE 寄存器中EA(Enable All)位設(shè)1
  3. 當(dāng)是外部中斷時,配置相關(guān)的pin 為輸入,并設(shè)置對應(yīng)的觸發(fā)屬性為edge或level 觸發(fā)。
  而在AndesCore?中需要做以下設(shè)置:
  1 .設(shè)置CPU IVIC 或者 EVIC mode
  2 .設(shè)置INT_MASK位
  3 .設(shè)置中斷的優(yōu)先級
  4. 關(guān)于異常處理差異
  在8051中沒有異常處理向量,所以在8051中并沒有這部分的處理函數(shù),在AndesCore?中有一些系統(tǒng)的exception 中斷向量,比如Machine Error,GeneralException, 建議在AndesCore ?上實(shí)現(xiàn)對應(yīng)的處理函數(shù), 當(dāng)發(fā)生這類異常時做一些基本的處理。
  3.4. 時序和延遲
  在8051中可以采用NOP指令來延遲,在 AndesCore?中也有NOP指令來達(dá)到類似目的。
  3.5. 電源管理
  8051 單片機(jī)中有兩種省電方式,分別是空閑方式和掉電模式, 單片機(jī)處于空閑工作方式時,CPU處于睡眠狀態(tài),它的片內(nèi)其它部件還是會繼續(xù)工作,片內(nèi)RAM的內(nèi)容和所有專用寄存器的內(nèi)容在空閑方式期間都被保存下來了, 可以通過中斷或者硬件復(fù)位來終止空閑工作方式。單片機(jī)處于掉電工作方式時,片內(nèi)的振蕩器停止了工作,因此它的一切都被迫停止了。但片內(nèi) RAM的內(nèi)容和專用寄存器的內(nèi)容一直保持到掉電方式結(jié)束為止。掉電方式的喚醒方式只有一種,就是硬件復(fù)位。
  在AndesCore?上,可以通過軟件standby 指令使CPU進(jìn)入到低功耗模式,通常標(biāo)準(zhǔn)c 代碼并不能直接控制硬件,Andes 的compiler 提供了intrinsic 函數(shù)來做到這點(diǎn)。分別是:__nds32_standby_no_wake_grant(), __nds32_standby_wake_grant(),__nds32_standby_wait_done().指定系統(tǒng)進(jìn)入低功耗模式時被喚醒的方式,分別是外部中斷中斷喚醒,電源管理模塊喚醒,和中斷配合電源管理模塊喚醒,可以根據(jù)系統(tǒng)需要分別設(shè)計(jì)。
  4. 從8051移植到AndesCore上注意事項(xiàng)
  一個8051工程,當(dāng)移植到AndesCore?上時有以下注意事項(xiàng):
  1. 內(nèi)存映射,代碼和數(shù)據(jù)擺放位置相關(guān)的設(shè)置。
  2. 可以不必考慮變量數(shù)目,或者是函數(shù)的overlay, 因?yàn)樵?2bit 的AndesCore?上開發(fā)時內(nèi)存空間通常不會像 8051那樣小。
  3. 如果空間允許,在 AndesCore?上盡量使用32bit的數(shù)據(jù)類型,這樣效率會更高。
  4. 在8051上用于表示內(nèi)存區(qū)域?qū)傩缘臉?biāo)志如(idata, xdata, bdata, pdata 等)在AndesCore?上可以移除。
  5. 在8051上不需要設(shè)置內(nèi)存區(qū)塊模式,比如:small, compact, large 等。
  6. 在8051 上用于表示對像遠(yuǎn)近的屬性"near" 和"far",都可以移除,AndesCore?上的指針的訪問可以達(dá)到所有地址空間。
  7. 在中斷處理函數(shù)中不需要像8051那樣指定哪塊寄存器塊會被用到的關(guān)鍵字"using"。
  8. 在8051上中斷處理函數(shù)就和普通的函數(shù)一樣,中不需要設(shè)置其它的關(guān)鍵字,如interrupt 。
  9. 如果有8051匯編部分移植到 AndesCore?,需要重新實(shí)現(xiàn),盡可能的用c 來實(shí)現(xiàn),便于維護(hù)和調(diào)試。
  10. 在8051中使用到的#progma 相關(guān)部分需要刪除。
  11. 在AndesCore?中函數(shù)不需要聲明為"reentrant" 屬性。
  12. 如果使用了數(shù)學(xué)運(yùn)算,在8051中默認(rèn)是使用32bit單精度浮點(diǎn),如果要
  保持和8051 中相同的精度,需要將函數(shù)名做一些調(diào)整,如將 sin() 改成sinf()。
                  5. 中斷向量及異常處理函數(shù)例子 以中斷向量及中斷處理函數(shù)的例子說明差異及移植。
  5.1. 匯編實(shí)現(xiàn)中段向量表
  [8051]
  該例子顯示怎樣用匯編設(shè)置8051的中斷向量和中斷處理函數(shù),在8051匯編中ORG指定了后面匯編代碼的位置,后面的中斷向量通常是一個跳轉(zhuǎn)語句。如下例第一個向量跳到主函數(shù)MAIN函數(shù)中,另外一個外部中斷1, 也是一個跳轉(zhuǎn)指令:LJMP INT 到后面的用匯編實(shí)現(xiàn)的中斷處理函數(shù) INT 中。

  [ AndesCore?]
  該例子顯示怎樣用匯編設(shè)置AndesCore?的中斷向量表和中斷處理函數(shù), 該例子中exception_vector 是中斷向量表的label, 后面分別表示第0,1,2,3…個中斷向量,它們只是簡單的跳轉(zhuǎn)指令,跳到具體的執(zhí)行實(shí)體中去,如vector 0 跳到_start, 做系統(tǒng)相關(guān)的初始化操作,_start 是系統(tǒng)啟動代碼,用匯編語言來實(shí)現(xiàn)。vector 9 后面對應(yīng)的是外部中斷,中斷處理函數(shù)如OS_Trap_Interrupt_HW0,OS_Trap_Interrupt_HW1… 它通常用C 來實(shí)現(xiàn),可以參考后面5.2 章節(jié)的AndesCore?中斷處理函數(shù)范例。



  在上面用匯編設(shè)置AndesCore?的中斷向量表的例子中,我們需要將中斷向量表最終設(shè)定在0 地址處,可以通過 section語法配合sag 工具實(shí)現(xiàn),例子中我們設(shè)定該段的 section 名為.vector, 所以在sag 中,我們自定義一個
  USER_SECTION 為.vector,并 將.vector放在0 開始的地方并作為第一個 section。

  通過上面的sag 語法,并使用andes 提供的sag 轉(zhuǎn)ld 的工具,可以產(chǎn)生類似以下的ld ,在工程進(jìn)行鏈接的時候選擇該 ld 時就能確保 .vector鏈接的地址位于0 處。



  關(guān)于詳細(xì)的SAG使用,可以參考我們的另一篇文章:《Andes 的分散聚合(SAG)機(jī)制
  5.2. 中斷處理函數(shù)的C 實(shí)現(xiàn)

  6. 適用于MCU的Andes CPUs
  Andes 有三款非常適用于 MCU應(yīng)用的CPU,分別是:N705,N801,N968A,如下圖所列:

  N705和N801分別采用了兩級和三級流水線,都具有很低的功耗和很好的性能,當(dāng)應(yīng)用需要的頻率較低時,使用兩級流水線的N705能發(fā)揮出更好的性能和更低功耗的特性,相比于8051,兩級流水線的 N705 在頻率方面高出許多,比如在TSMC 40nm LP 工藝下能跑到超過240MHz ,所以完全能勝任8051的應(yīng)用需求。N968A使用了五級的流水線,同樣有低功耗的特性和很好的性能,同時該款CPU具有很強(qiáng)的可配置性,如支持多種總線接口,還支持了專門為audio的加速指令,N968A是一個多面手,性能好,功耗低,又具備強(qiáng)大的可配置特性,適合于多種應(yīng)用。
               
本文地址:http://m.qingdxww.cn/thread-154748-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 利用SAM E54 Xplained Pro評估工具包演示CAN轉(zhuǎn)USB橋接器以及基于CAN的主機(jī)和自舉程序應(yīng)用程序
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频黄 | 亚洲国产高清视频在线观看 | 色综合合久久天天综合绕视看 | 日韩免费在线视频 | 69视频永久免费观看下载 | 两个人的高清在线观看 | 男女做视频网站免费观看 | 一区二区三区四区视频在线 | 国产欧美日韩在线观看精品 | 噼里啪啦免费视频高清观看 | 久久综合草 | 亚洲第一夜 | 国产一区二区在线视频播放 | 国内毛片视频 | 欧美一区二区三区视频在线观看 | 毛片区| 99re视频在线观看 | 天天插一插 | 97香蕉网| 日本在线视频网址 | 4hu四虎永久免在线视 | 天天上天天操 | 四虎影院精品在线观看 | 欧美中文在线 | 日韩手机视频 | 黑人粗长大战亚洲女 | 搞基小说| 色免费视频 | 国产麻豆媒一区一区二区三区 | 99视频在线看观免费 | 狠狠色丁香久久婷婷综合_中 | 国产一区二区三区日韩 | 免费大片黄在线观看日本 | 在线观看麻豆国产精品 | 国产高清在线观看视频 | 久久精品福利 | 国产精品视频一区牛牛视频 | 在线麻豆 | 国产香蕉在线观看 | 欧美人体在线 | 韩国精品一区二区 |