第一階段
是先瀏覽教科書里的硬件部分,大至了解單片機的硬件結(jié)構(gòu)。如ROM、RAM、地址、I/O口等,以及看一些廠家的MCU資料(Data Sheet),來加強MCU所提供各項資源的印象。
第二階段
就是了解二進(jìn)位數(shù)字、十六進(jìn)位數(shù)和軟件方面的內(nèi)容。盡管有很多高級語言可用于單片機的編程,但我覺得初學(xué)還是以匯編語言為好,更有利于和硬件結(jié)合,掌握硬件結(jié)構(gòu)。知道匯編語言、機器語言、
指令、
程序等概念后,就從MOV指令開始,學(xué)習(xí)匯編語言和編程,在此如51的MCU匯編語言系統(tǒng)有111條指令,簡單又好理解它們怎
樣和硬件聯(lián)系,更有助于一般學(xué)習(xí)單片機的指令整合與運用.因此其方法可先了
解幾條基本的MOV指令和它的機器語言,大致建立起單片機的硬件和軟件概念,
來知道單片機的硬件是由指令控制指揮的。
第三階段
按照編程環(huán)境的使用手冊,熟悉使用編程環(huán)境。現(xiàn)在的編程環(huán)境一般都和電腦相連,只要具備基本電腦知識的人都可很快掌握操作步驟。
第四階段
以下內(nèi)容含腳本,或可能導(dǎo)致頁面不正常的代碼 |
---|
說明:上面顯示的是代碼內(nèi)容。您可以先檢查過代碼沒問題,或修改之后再運行. |
以下內(nèi)容含腳本,或可能導(dǎo)致頁面不正常的代碼 |
---|
說明:上面顯示的是代碼內(nèi)容。您可以先檢查過代碼沒問題,或修改之后再運行. |
#define TaskStkLengh 512 //Define the Task0 stack length 定義用戶任務(wù)0的堆棧長度
OS_STK Main_Stack[TaskStkLengh]; //主任務(wù)堆棧
//任務(wù)1 OS_STK Task1_Stack[TaskStkLengh];//任務(wù)1堆棧
//任務(wù)2 OS_STK Task2_Stack[TaskStkLengh];//任務(wù)2堆棧
///任務(wù)3 OS_STK Task3_Stack[TaskStkLengh];//任務(wù)3堆棧
#define LED2 (1 << 19) // P1.18控制LED2 #define LED3 (1 << 20) // P1.18控制LED3 #define LED4 (1 << 21) // P1.18控制LED4
//任務(wù)1函數(shù)定義 void Task1_Task(void *pdata) { uint32 i; pdata=pdata; while (1) { i++; OS_ENTER_CRITICAL(); IO1CLR = LED2; //點亮LED2 OSTimeDly(OS_TICKS_PER_SEC / 2); OS_EXIT_CRITICAL(); OSTimeDly(1000); //延時掛起 } }
//任務(wù)2函數(shù)定義 void Task2_Task(void *pdata) { uint32 i; pdata=pdata; while (1) { i++; OS_ENTER_CRITICAL(); IO1CLR = LED3; //點亮LED3 OSTimeDly(OS_TICKS_PER_SEC / 2); OS_EXIT_CRITICAL(); OSTimeDly(1000); //延時掛起 } }
//任務(wù)3函數(shù)定義 void Task3_Task(void *pdata) { uint32 i; pdata=pdata; while (1) { i++; OS_ENTER_CRITICAL(); IO1CLR = LED4; //點亮LED4 OSTimeDly(OS_TICKS_PER_SEC / 2); OS_EXIT_CRITICAL(); OSTimeDly(1000); //延時掛起 } }
//主任務(wù)的定義 void Main_Task(void *pdata) { pdata=pdata; TargetInit (); //在此處開放定時中斷 IO1SET = 0xffffffff; OSTimeDly(100); IO1CLR = 0x00040000; OSTimeDly(OS_TICKS_PER_SEC/2); OSTaskCreate(Task1_Task,(void *)0,&Task1_Stack[TaskStkLengh-1],12); OSTaskCreate(Task2_Task,(void *)0,&Task2_Stack[TaskStkLengh-1],14); OSTaskCreate(Task3_Task,(void *)0,&Task3_Stack[TaskStkLengh-1],16); while(1) { OSTimeDly(1000); } }
//主函數(shù)開始 int main() { //這里寫對目標(biāo)初始化函數(shù) OSInit(); //千萬不要在此處開放定時中斷,即調(diào)用TargetInit(); PINSEL1=0X00000000; //引腳設(shè)為GPIO功能 IO1DIR =0XFFFFFFFF; //引腳設(shè)為輸出模式 IO1SET =0Xffffffff; //引腳全部設(shè)為滅狀態(tài) OSTaskCreate(Main_Task,(void *)0,&Main_Stack[TaskStkLengh-1],10); OSStart(); //此函數(shù)永遠(yuǎn)不會返回 return 0; }
]]>做一個真正的單片機開發(fā)高手,然后逐步的學(xué)習(xí)ARM 成功走入嵌入式開發(fā)行列成為能手!
]]> 一. JTAG仿真器的實質(zhì)
JTAG (Joint Test Action Group) 編程調(diào)試實質(zhì)上是利用了MCU/MPU片上自帶的跟蹤調(diào)試功能(需MCU/MPU硬件支持)。JTAG編程板一端與PC的并口相連,另一端連接至目標(biāo)板,由于通常的MCU/MPU的工作電壓在1.8V-3.6V之間,而PC機并口輸出的電平邏輯為5V,因此需做電平轉(zhuǎn)換,通常使用一枚緩沖/驅(qū)動器(如: 74××244/74××541)作隔離,并通過電阻分壓,限制進(jìn)入目標(biāo)板的電平。因PC并口沒有電壓輸出,所以編程板上的IC要由目標(biāo)板供電,即: JTAG接口中的VCC腳是必須恰當(dāng)連接的。
二. JTAG接口的管腳定義
主流的JTAG接口有14針和20針兩種,管腳分配如圖一
14針的JTAG接口為老式接口。
JTAG中的非地管腳定義如下圖二。
三. 第一種線序的JTAG編程板電路
實測我所使用的SAMSUNG ARM7 S3C44B0開發(fā)套件中的JTAG編程板電路如圖
但將該編程板與S3C2440相連后卻無法正確載入程序。
依據(jù)244的輸入輸出關(guān)系,可整理PC并口與JTAG接口管腳的對應(yīng)關(guān)系如下:
PC并口引腳
2 3 8 4
JTAG引腳
TCK TMS TDI nSRST
四. 第二種線序的JTAG編程板電路
經(jīng)查閱S3C2440的官方JTAG編程板SJF2440的USER’S GUIDE中的編程板電路,整理PC并口與JTAG接口管腳的對應(yīng)關(guān)系如下:
PC并口引腳
2 3 4 11
JTAG引腳
TCK TDI TMS TDO
據(jù)此推測,使用S3C44B0 JTAG編程板對S3C2440的JTAG調(diào)試失敗是因PC并口控制管腳的分配有區(qū)別。即,S3C2440的JTAG調(diào)試代理模擬JTAG時序所用到的并口管腳與S3C44B0的調(diào)試代理所用到的不同。
據(jù)此,在S3C44B0 JTAG編程板上靈活飛線,再次使用該編程板對S3C2440調(diào)試成功。
五. 一點推測
在JTAG相關(guān)搜索里,發(fā)現(xiàn)網(wǎng)友李杰給出的一個JTAG編程板電路,如圖五。
該電路中的JTAG管腳與PC并口管腳的對應(yīng)關(guān)系與S3C2440 JTAG編程板中的此對應(yīng)關(guān)系相同,而作者稱,該電路適用于所有的ARM芯片。據(jù)此推測:大多公司開發(fā)的ARM調(diào)試軟件支持兩種不同線序的并口模擬 JTAG調(diào)試,并且在調(diào)試開始時能自動偵測出編程板硬件連接并實施控制。官方給出的S3C2440 JTAG調(diào)試軟件僅支持一種線序。
說明:本信息
以下是我在實踐中的一些積累,發(fā)現(xiàn)這點是因為我在嘗試用對SAMSUNG S3C44B0 JTAG適用的編程板電路給SAMSUNG的另一款A(yù)RM9內(nèi)核MPU S3C2440 JTAG編程時出現(xiàn)問題,查閱了一些資料后最終解決。希望這些對那些在自制ARM JTAG編程器上遇到困難的朋友一點幫助。
一. JTAG仿真器的實質(zhì)
JTAG (Joint Test Action Group) 編程調(diào)試實質(zhì)上是利用了MCU/MPU片上自帶的跟蹤調(diào)試功能(需MCU/MPU硬件支持)。JTAG編程板一端與PC的并口相連,另一端連接至目標(biāo)板,由于通常的MCU/MPU的工作電壓在1.8V-3.6V之間,而PC機并口輸出的電平邏輯為5V,因此需做電平轉(zhuǎn)換,通常使用一枚緩沖/驅(qū)動器(如: 74××244/74××541)作隔離,并通過電阻分壓,限制進(jìn)入目標(biāo)板的電平。因PC并口沒有電壓輸出,所以編程板上的IC要由目標(biāo)板供電,即: JTAG接口中的VCC腳是必須恰當(dāng)連接的。
二. JTAG接口的管腳定義
主流的JTAG接口有14針和20針兩種,管腳分配如圖一
14針的JTAG接口為老式接口。
JTAG中的非地管腳定義如下圖二。
三. 第一種線序的JTAG編程板電路
實測我所使用的SAMSUNG ARM7 S3C44B0開發(fā)套件中的JTAG編程板電路如圖
但將該編程板與S3C2440相連后卻無法正確載入程序。
依據(jù)244的輸入輸出關(guān)系,可整理PC并口與JTAG接口管腳的對應(yīng)關(guān)系如下:
PC并口引腳
2 3 8 4
JTAG引腳
TCK TMS TDI nSRST
四. 第二種線序的JTAG編程板電路
經(jīng)查閱S3C2440的官方JTAG編程板SJF2440的USER’S GUIDE中的編程板電路,整理PC并口與JTAG接口管腳的對應(yīng)關(guān)系如下:
PC并口引腳
2 3 4 11
JTAG引腳
TCK TDI TMS TDO
據(jù)此推測,使用S3C44B0 JTAG編程板對S3C2440的JTAG調(diào)試失敗是因PC并口控制管腳的分配有區(qū)別。即,S3C2440的JTAG調(diào)試代理模擬JTAG時序所用到的并口管腳與S3C44B0的調(diào)試代理所用到的不同。
據(jù)此,在S3C44B0 JTAG編程板上靈活飛線,再次使用該編程板對S3C2440調(diào)試成功。
五. 一點推測
在JTAG相關(guān)搜索里,發(fā)現(xiàn)網(wǎng)友李杰給出的一個JTAG編程板電路,如圖五。
該電路中的JTAG管腳與PC并口管腳的對應(yīng)關(guān)系與S3C2440 JTAG編程板中的此對應(yīng)關(guān)系相同,而作者稱,該電路適用于所有的ARM芯片。據(jù)此推測:大多公司開發(fā)的ARM調(diào)試軟件支持兩種不同線序的并口模擬 JTAG調(diào)試,并且在調(diào)試開始時能自動偵測出編程板硬件連接并實施控制。官方給出的S3C2440 JTAG調(diào)試軟件僅支持一種線序。
本信息來源:CAD教育網(wǎng) www.cadedu.com
Java已 經(jīng)在各個領(lǐng)域得到了廣泛的應(yīng)用,尤其是無線移動領(lǐng)域,全球超過100個移動運營商已經(jīng)推出了Java下載服務(wù)。Java也正成為其它嵌入式設(shè)備的支持標(biāo) 準(zhǔn),如機頂盒。Java應(yīng)用的快速增長源于以下幾點:盡管Java的可移植性一直有爭論,但無庸置疑的是其快速上市的優(yōu)勢,開發(fā)和發(fā)布Java應(yīng)用都很便 捷;Java有著廣泛的支持網(wǎng)絡(luò),眾多的第三方在開發(fā)各色各樣的Java應(yīng)用;Java平臺固有的安全性適合網(wǎng)絡(luò)下載。
可以說,現(xiàn)在Java游戲已經(jīng)發(fā)展成一項產(chǎn)業(yè),三維圖像、多人連線等更高級的支持也不鮮見。網(wǎng)絡(luò)運營商和手機制造商希望出現(xiàn)更具可玩性的游戲,甚至跳出游戲應(yīng)用發(fā)展諸如商務(wù)、定位、視頻等各種各樣的增值服務(wù),以帶來更多的收入。
為支持這些新的服務(wù),J2ME平臺必須快速發(fā)展,集成新的API(如移動3D),融入新的特性,比如能夠運行多個MIDlet。移動設(shè)備上運行Java需要處理好這兩個問題:Java分化和在資源有限的設(shè)備上如何保證Java的性能。
運營商和手機制造商為標(biāo)準(zhǔn)Java API加入了許多擴展,造成了一定程度上的“Java分化”,影響到了Java的進(jìn)一步應(yīng)用,產(chǎn)業(yè)鏈上各個環(huán)節(jié)的廠家不得不做額外投入以支持各種擴展。于 是Sun公司建立了JCP(Java Community Process)試圖減少這種分化,同時努力能夠跟上嵌入式設(shè)備上Java應(yīng)用和變化的步伐。現(xiàn)在很多JSR擴展規(guī)范都是通過JCP提出的,證明JCP起 著正面的促進(jìn)作用,能根本上解決分化問題。
嵌入式Java虛擬機的設(shè)計限制
目前市場上已經(jīng)有大量宣稱支持Java的手機,從技術(shù)上來看,許多中低端手機基本上是在30~50MHz ARM7TDMI處理器上運行一個小型的軟件字節(jié)碼(bytecode)解釋器,相對較慢。這對許多的Java小游戲是夠用了,因為其性能是由系統(tǒng)的圖形 處理能力決定的,對Java的要求不是特別高。但是市場發(fā)展變化很快,越來越多的Java應(yīng)用需要更強的圖形處理能力,以及一個強大的Java虛擬機。
圖1:指令流水線示意圖。 |
幾種加快Java執(zhí)行速度的傳統(tǒng)方法包括幾種軟件方案,如字節(jié)碼解釋器優(yōu)化、即時(JIT, just-in-time)編譯器、預(yù)先(AOT, ahead-of-time)編譯器等;硬件方案有專用Java處理器和Java協(xié)處理器。這些方法在提高性能的同時,通常也會增加對功耗、內(nèi)存的需求, 影響到了系統(tǒng)平臺的成本,尤其是硬件方案。
JIT或AOT編譯器是把字節(jié)碼動態(tài)地編譯成目標(biāo)平臺的本地碼,然后直接執(zhí)行。顧名思義,AOT編譯方案就是在應(yīng)用下載完后編譯所有代碼,而實際上 某些代碼很有可能根本就執(zhí)行不到。JIT編譯方案則是運行到某段代碼之前,只對這一段作即時的編譯。這種即時處理策略會讓用戶在選擇啟動應(yīng)用程序后,不得 不等待很長的一段時間程序才真正運行起來。另外,研究顯示動態(tài)編譯會導(dǎo)致代碼膨脹4~6倍。因此,除了減慢應(yīng)用程序啟動速度,無論JIT還是 AOT方案,都需要很大的額外內(nèi)存來保存編譯生成的本地碼。
動態(tài)編譯技術(shù)
有一種彌補JIT編譯器缺點的方法就是采用通常被稱為動態(tài)自適應(yīng)編譯(DAC)的混合軟件方案,它可以看成是JIT編譯器和字節(jié)碼解釋器的組合。在 開始階段,程序解釋執(zhí)行,同時軟件對代碼作分析并決定哪些關(guān)鍵代碼需要被編譯,這些關(guān)鍵代碼被鑒別出來后,即被編譯成本地碼運行。
采用了DAC方案,JIT編譯的一些負(fù)面影響可能會減少,但是JIT畢竟無法提供最好的速度性能,啟動時間和代碼膨脹的問題仍會比較突出。
在完成關(guān)鍵代碼分析前,程序得運行于慢速的解釋器模式,然后暫停再進(jìn)行編譯。應(yīng)用程序啟動時,許多函數(shù)方法僅運行一次,理想情況下不應(yīng)該編譯這些代碼。從用戶體驗角度來看,影響是很明顯的,尤其是程序啟動階段會感覺到較長時間內(nèi)程序沒有任何用戶響應(yīng)。
因為純軟件的解釋器很慢,大多數(shù)DAC方案實際上很少做代碼分析,而編譯幾乎所有的函數(shù)方法,就像賭博一樣,賭這個函數(shù)方法接下去會執(zhí)行很多次。如果賭錯,將會付出更多的代價—不但花費了更多的編譯時間,而且編譯產(chǎn)生的那些不再運行的代碼耗費了寶貴的內(nèi)存資源。
編譯的代碼會占用內(nèi)存資源,DAC必須從內(nèi)存中刪掉以前編譯好的代碼,為新的編譯讓出空間,接下去如果運行到剛被刪掉的代碼,又得重新編譯。這樣產(chǎn) 生了性能平滑度問題,因為在編譯新代碼或重編譯過程中,程序得暫停執(zhí)行。比如在切換游戲場景時,玩家會感覺到難以忍受的等待。
盡管動態(tài)編譯存在一些缺點,可現(xiàn)在嵌入式設(shè)備的硬件配置也越來越高,尤其是RAM或ROM,因此諸如DAC甚至一些AOT方案變得很有吸引力。然 而,我們也看到一個系統(tǒng)平臺中許多的組件是用Java開發(fā)的,越來越多的可下載應(yīng)用是用Java寫,多個Java程序并行執(zhí)行的需求也開始產(chǎn)生。這些發(fā)展 趨勢意味著Java對內(nèi)存的需求是無止境的。
硬件加速
硬件Java加速方案通常需要增加額外的芯片以及更多的功耗。專用Java處理器支持直接執(zhí)行Java字節(jié)碼,這雖然看起來性能不錯,但是系統(tǒng)集成和開發(fā)的復(fù)雜度卻大幅上升。Java處理器不會支持已有的很多操作系統(tǒng)和應(yīng)用程序,它需要和其他的嵌入式處理器配合使用。
圖2:采用ARM處理器的Java應(yīng)用嵌入式系統(tǒng)架構(gòu)。 |
Java協(xié)處理器是把Java字節(jié)碼翻譯成主處理器的指令。這當(dāng)然需要許多軟硬件集成工作,要在操作系統(tǒng)加入對協(xié)處理器的支持尤其困難。同樣協(xié)處理 器需要額外的板上空間和額外的功耗,而且本身也很貴。另外,協(xié)處理器和主內(nèi)核之間的松耦合連接方式?jīng)Q定了其運行速度相對較慢。
硬件架構(gòu)擴展和Jazelle DBX技術(shù)
在已有處理器架構(gòu)上加硬件擴展可以同樣支持直接運行Java字節(jié)碼,而且保持了操作系統(tǒng)和應(yīng)用程序的兼容性。架構(gòu)擴展方案相當(dāng)于為處理器附加了一套 指令集,重用已有的處理器資源不會增加額外的硬件成本和功耗。帶擴展的內(nèi)核能夠同時執(zhí)行Java字節(jié)碼及本地碼,開發(fā)者可以充分利用已有的操作系統(tǒng)、應(yīng)用 程序開發(fā)技術(shù),在Java程序可移植性和性能之間取得很好的平衡。
傳統(tǒng)的ARM處理器都支持兩套指令集:32位ARM指令集和16位Thumb指令集。通常使用Thumb指令集的代碼大小約為ARM代碼的 35~40%,但會輕微降低程序性能。指令集支持在ARM和Thumb代碼之間互相作函數(shù)調(diào)用,程序員可以在編譯時分別從性能和代碼密度的角度考慮,以決 定不同部分的代碼編譯成ARM或是Thumb(圖1)。
Jazelle DBX是一種硬件架構(gòu)擴展技術(shù),為ARM處理器引入了第三套指令集—Java字節(jié)碼。新指令集建立了一種新的狀態(tài),處理器在此狀態(tài)下處理Java字節(jié)碼取指、譯碼和維護(hù)Java操作數(shù)棧。
為了降低芯片尺寸并提高性能,Jazelle DBX沒有設(shè)計成傳統(tǒng)形式的微引擎,而是融入流水線中的一個有限狀態(tài)機。和協(xié)處理器或?qū)S锰幚砥髟O(shè)計不同的是,Jazelle DBX和主處理器共用緩存,這都會對功耗和性能帶來益處。另一個重要的設(shè)計考慮是確保Jazelle DBX技術(shù)不會影響實時中斷性能,仍保持與操作系統(tǒng)中已有ARM異常處理代碼的兼容。
Jazelle DBX技術(shù)增加了一條新的“Branch-to-Java”指令來進(jìn)入Java狀態(tài)。此指令支持條件執(zhí)行,先檢查條件標(biāo)志,如果條件滿足,處理器進(jìn)入Java狀態(tài),跳轉(zhuǎn)到指定目標(biāo)地址,開始執(zhí)行Java字節(jié)碼。
在Java狀態(tài)下,PC寄存器仍是32位尋址Java字節(jié)代碼。字節(jié)碼取指、譯碼分別在兩個流水級完成(對應(yīng)ARM/Thumb狀態(tài)下為一個譯碼流水級)。32位取指操作一次性可以取4個Java字節(jié)碼,性能優(yōu)勢明顯。
當(dāng)前處理器狀態(tài)寄存器(CPSR)新定義了一個位,用來記錄處理器的狀態(tài)。這很重要,因為在處理中斷或其它異常時,CPSR會自動保存或恢復(fù)程序運行狀態(tài)。
Jazelle DBX技術(shù)允許所有的Java指令是“可重新開始”的。這樣在執(zhí)行Java指令過程中,即刻響應(yīng)中斷,從而減少中斷延遲,確保實時性能。
在Java狀態(tài)下,有若干個ARM寄存器可以功能復(fù)用(包括棧指針、棧頂四項(top4 elements of stack)、局部變量0等)。正是這些硬件復(fù)用設(shè)計,才使得只用了很少的額外邏輯(約一萬兩千門)就實現(xiàn)了一個Java機。把所有Jazelle DBX擴展所需的狀態(tài)用ARM寄存器保存,也保證了和現(xiàn)有操作系統(tǒng)、中斷處理程序和異常處理代碼的兼容性。
把棧頂四項保存在ARM寄存器中也能提高Java性能。大量的程序分析顯示,大多數(shù)程序的棧深度是很小的,所以這項策略可以盡量減少內(nèi)存訪問,硬件也可自動處理棧溢出或下溢。
Jazelle DBX技術(shù)的性能
對于一個高度優(yōu)化的商業(yè)Java虛擬機,運行評測程序或復(fù)雜的MIDP2.0應(yīng)用,Jazelle DBX技術(shù)通常可帶來約2~4倍的性能提升,而且對實時性不會產(chǎn)生任何影響。
對于嵌入式設(shè)備來說,運行速度還不是唯一的考慮因素,功耗、存儲器占用、集成的難度、系統(tǒng)成本和用戶體驗等都很重要,需要很好的平衡。
Jazelle DBX技術(shù)把Java字節(jié)碼分為3類:直接執(zhí)行、模擬執(zhí)行(emulated)和未定義。大多數(shù)Java字節(jié)碼(ARM926EJ-S支持134個)可由 硬件直接執(zhí)行,余下的由一些簡短的高度優(yōu)化的ARM指令序列模擬執(zhí)行。把原先虛擬機中的解釋器去掉,替換以ARM專有的代碼(稱為VMZ,這些代碼甚至比 替掉的代碼更小)。
統(tǒng)計分析表明,在一段典型的程序代碼中,需要模擬執(zhí)行的字節(jié)碼不會超過5%。這就是為什么ARM決定Jazelle DBX硬件擴展只支持直接執(zhí)行部分的字節(jié)碼,而非全部。Jazelle DBX硬件擴展的實現(xiàn)約為一萬兩千門的規(guī)模,而大多數(shù)的專用Java處理器或協(xié)處理器通常有6萬到10萬門的規(guī)模。這樣的設(shè)計策略把硬件邏輯的復(fù)雜度減到 最小、功耗低、系統(tǒng)集成難度低,卻仍能表現(xiàn)出很高的整體Java性能。
未定義的字節(jié)碼與模擬執(zhí)行的字節(jié)碼截然不同。一旦執(zhí)行到未定義的字節(jié)碼,處理器退出Java狀態(tài),進(jìn)入ARM狀態(tài)執(zhí)行異常處理。有了這樣的機制,就可以以軟件補丁的方式實現(xiàn)對未來可能會擴展的Java字節(jié)碼支持。
為幫助用戶使用Jazelle DBX,ARM公司提供了JTEK件包,其中包含了VMZ源代碼,為一個現(xiàn)有的Java虛擬機和操作系統(tǒng)集成JTEK通常只需幾天時間。ARM也和主流的 Java平臺供應(yīng)商合作,如Aplix/iasolution和Sun等,在他們的軟件產(chǎn)品中加入了Jazelle DBX支持。另外,ARM和眾多操作系統(tǒng)廠商合作,主流的如WindowsCE、SymbianOS、PalmOS、Linux,以及許多實時專有的操作 系統(tǒng)都支持Jazelle DBX。
本文小結(jié)
移動Java游戲促進(jìn)了Java在無線設(shè)備上的應(yīng)用,Java固有的端對端的安全性和Java應(yīng)用開發(fā)的快捷性使Java成為新的收入增長點。在資 源有限的嵌入式設(shè)備上也需要高性能的Java平臺,Jazelle DBX這樣的加速技術(shù)正是應(yīng)對了這樣的需求,其他一些硬件或純軟件加速方案將受益于Jazelle DBX,并避免原有的各種缺點。
通過融合各種新特性的加入,ARM將在未來架構(gòu)發(fā)展中繼續(xù)支持Jazelle DBX以及后續(xù)的新技術(shù)。Jazlle技術(shù)和相應(yīng)的JTEK軟件包將更廣泛的促進(jìn)Java在嵌入式設(shè)備上的應(yīng)用,更多更新的移動Java應(yīng)用將隨之涌現(xiàn)。
以下內(nèi)容含腳本,或可能導(dǎo)致頁面不正常的代碼 |
---|
說明:上面顯示的是代碼內(nèi)容。您可以先檢查過代碼沒問題,或修改之后再運行. |
由于有周立公開發(fā)板的影響,LPC系列的開發(fā)板在工程師心目中一般是入門的最好型號之一。這次剛好有STM32的競賽,正好將兩者的資源進(jìn)行比較一下(LPC系列以LPC213X為例)。
LPC213X包括LPC2131、2132、2138等, 是基于一個支持實時仿真和跟蹤的16/32位ARM7TDMI-STM CPU,并帶有32kB、64kB和512kB嵌入的高速Flash存儲器。128位寬度的存儲器接口和獨特的加速結(jié)構(gòu)使32位代碼能夠在最大時鐘速率下運行。對代碼規(guī)模有嚴(yán)格控制的應(yīng)用可使用16位Thumb模式將代碼規(guī)模降低超過30%,而性能的損失卻很小。
而STM32則大致分為兩類,一種是基本型,一種是增強型。這同51內(nèi)核的單片機有點類似,51系列的單片機也有普通型和增強型。基本型STM32系列ARM包括STM32F101x6、STM32F101x8、STM32F101xB等,它是32位基于ARM核心的帶閃存微型控制器,有六個16位定時器、ADC、7個通信接口;而增強型STM32系列的ARM包括STM32F103x6、STM32F103x8、STM32F103xB等,它是32位基于ARM核心的帶閃存的、USB、CAN總線的微控制器,它有七個16位定時器、2個ADC、9個通信接口。
內(nèi)核方面,LPC213X是ARM7TDMI-S內(nèi)核,而STM32則是Cortex-M3?CPU
片內(nèi)存儲方面,LPC213X有8/16/32kB的片內(nèi)靜態(tài)RAM和32/64/512kB的片內(nèi)Flash程序存儲器。而STM32則有從32K字節(jié)至128K字節(jié)閃存程序存儲器,從6K字節(jié)至16K字節(jié)SRAM。
LPC有如下特征:
??通過片內(nèi)boot裝載程序?qū)崿F(xiàn)在系統(tǒng)編程/在應(yīng)用編程(ISP/IAP)。單扇區(qū)或整片擦除時間為400ms。
256字節(jié)行編程時間為1ms。
?? EmbeddedICE?RT和嵌入式跟蹤接口通過片內(nèi)RealMonitorTM軟件對代碼進(jìn)行實時調(diào)試和高速跟
蹤。
?? 1個(LPC2131/2132)或2個(LPC2138)8路10位的A/D轉(zhuǎn)換器,共提供16路模擬輸入,每
個通道的轉(zhuǎn)換時間低至2.44us。
1個10位的D/A轉(zhuǎn)換器,可產(chǎn)生不同的模擬輸出。(僅適用于LPC2132/2138)
2個32位定時器/計數(shù)器(帶4路捕獲和4路比較通道)、PWM單元(6路輸出)和看門狗。
實時時鐘具有獨立的電源和時鐘,可在節(jié)電模式中極大地降低功耗。
多個串行接口,包括2個16C550工業(yè)標(biāo)準(zhǔn)UART、2個高速I2C接口(400 kbit/s)、SPITM和具有
緩沖作用和數(shù)據(jù)長度可變功能的SSP。
向量中斷控制器。可配置優(yōu)先級和向量地址。
小型的LQFP64封裝上包含多達(dá)47個通用I/O口(可承受5V電壓)。
多達(dá)9個邊沿或電平觸發(fā)的外部中斷管腳。
通過片內(nèi)PLL(100us的設(shè)置時間)可實現(xiàn)最大為60MHz的CPU操作頻率。
片內(nèi)晶振頻率范圍:1~30 MHz。
低功耗模式:空閑和掉電。
可通過個別使能/禁止外部功能和外圍時鐘分頻來優(yōu)化功耗。
通過外部中斷將處理器從掉電模式中喚醒。
單電源,具有上電復(fù)位(POR)和掉電檢測(BOD)電路:
CPU操作電壓范圍:3.0V~3.6 V (3.3 V±10﹪),I/O口可承受5V的電壓。
STM32有如下特征:
■能夠有單周期乘法和硬件除法
■存儲器
從32K字節(jié)至128K字節(jié)閃存程序存儲器
從6K字節(jié)至16K字節(jié)SRAM
■時鐘、復(fù)位和供電管理
2.0至3.6伏供電和I/O管腳
上電/斷電復(fù)位(POR / PDR)、可編程電壓監(jiān)測器(PVD)
內(nèi)嵌4至16MHz高速晶體振蕩器
內(nèi)嵌經(jīng)出廠調(diào)校的8MHz RC振蕩器
內(nèi)部40kHz的RC振蕩器
PLL供應(yīng)CPU時鐘
帶校準(zhǔn)的32kHz RTC振蕩器
■低功耗
睡眠、停機和待機模式
VBAT為RTC和后備寄存器供電
■調(diào)試模式
串行線調(diào)試(SWD)和JTAG調(diào)試接口
■DMA
7通道DMA控制器
支持的外設(shè):定時器、ADC、SPI、I2C和USART
■1個12位模數(shù)轉(zhuǎn)換器,1us轉(zhuǎn)換時間(16通道)
■多達(dá)80個快速I/O口
26/37/51/80個多功能雙向5V兼容的I/O口
所有I/O口可以映像到16個外部中斷
■多達(dá)6個定時器
多達(dá)3個16位定時器,每個定時器有多達(dá)4個用于輸入捕獲/輸出比較/ PWM或脈沖計數(shù)的通道
2個16位看門狗定時器(獨立的和窗口型的)
系統(tǒng)時間定時器:24位自減型
■多達(dá)7個通信接口
多達(dá)2個I2C接口(SMBus/PMBus)
多達(dá)3個USART接口,支持ISO7816,LIN,IrDA接口和調(diào)制解調(diào)控制
多達(dá)2個SPI同步串行接口(18兆位/秒)