亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1802 | 回復(fù): 1
打印 上一主題 下一主題

初步探討ARM調(diào)試技術(shù) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-01-29 11:29 |只看該作者 |倒序?yàn)g覽
在bootloader的深入學(xué)習(xí)中,深感調(diào)試的重要性。毛德操書中曾提過(guò),在軟件開發(fā)的“生命周期”中,程序調(diào)試(debug)以及調(diào)試手段
的重要性是“怎么強(qiáng)調(diào)也不為過(guò)”的。誠(chéng)然,尤其是在bootloader這樣的底層軟件開發(fā)中,調(diào)試能起到的作用就更為突出了。下面進(jìn)行具體分析。
一、最簡(jiǎn)單的調(diào)試方法---狀態(tài)燈
   
一般地,在ARM開發(fā)板上總會(huì)留幾個(gè)Led燈,在開發(fā)bootloader或者學(xué)習(xí)不帶OS的程序編寫時(shí),就要充分利用這幾個(gè)Led燈了。也就是說(shuō),把
Led燈作為狀態(tài)燈。如果有n個(gè)可以自由支配的Led燈,那么可以表達(dá)2^n個(gè)狀態(tài)。比如,現(xiàn)在的EDUKIT-III實(shí)驗(yàn)箱上,有四個(gè)led,有
GPF[7:4]來(lái)控制,低電平點(diǎn)亮,高電平熄滅,電路就不必畫了,最簡(jiǎn)單的部分。在寫led燈的驅(qū)動(dòng)時(shí),不妨采用查表法,把led的狀態(tài)做成一個(gè)表,這
樣在表達(dá)的時(shí)候要方便的多。這部分實(shí)驗(yàn)在前面已經(jīng)做過(guò),ARM匯編和C版本都有,不再詳述。下面主要談幾點(diǎn)方法:
    ·把流程按照功能分為幾塊,在每塊的結(jié)束放一個(gè)狀態(tài)燈。這樣通過(guò)狀態(tài)燈可以顯示到了第幾個(gè)功能塊,一般要逐塊測(cè)試,放狀態(tài)燈后,加個(gè)死循環(huán)。
    ·利用條件判斷語(yǔ)句來(lái)進(jìn)行邏輯測(cè)試。比如有一個(gè)寄存器狀態(tài),假設(shè)為register1,正常應(yīng)該是value1,那么就可以如下判斷:
               
               
               
if (register1 == value1) {
        led_state1; /* 設(shè)置燈狀態(tài)1 */
} else {
        led_state2; /* 設(shè)置燈狀態(tài)2 */
}
while (1) {
        ;
}
還有很多其他方法,不過(guò)核心還是靠自己的邏輯分析。
二、打印信息,輔助調(diào)試
   
這種方法在PC的程序調(diào)試中也比較常用。比如熟悉的printf,在Linux內(nèi)核的printk,不過(guò)這些都是打印到終端上。在嵌入式系統(tǒng)中則一般是沒(méi)
有終端的,特別是在bootloader階段,就是“裸機(jī)”啊。不過(guò)可以借助于這種思想,利用串口來(lái)實(shí)現(xiàn)打印信息(當(dāng)然,得有串口支持了。現(xiàn)在ARM一般
都會(huì)有UART外設(shè),而且很常用的手段就是把一個(gè)rs232串口作為debug口)。在bootloader階段,可以利用狀態(tài)燈法先簡(jiǎn)單的實(shí)現(xiàn)一個(gè)串口
驅(qū)動(dòng)程序,可以采用簡(jiǎn)單的實(shí)現(xiàn)方式,只實(shí)現(xiàn)查詢發(fā)送就可以了。這樣,就可以需要了解的信息,通過(guò)debug口來(lái)輸出到相應(yīng)的串口調(diào)試助手上。根據(jù)這些信
息,來(lái)確定程序問(wèn)題所在,從而盡快排除故障。
    這種方式就是串口作為底層來(lái)實(shí)現(xiàn)的printf,在ARM中應(yīng)用比較廣泛。在C語(yǔ)言中,可以通過(guò)一個(gè)調(diào)試開關(guān)開控制發(fā)行版/調(diào)試版,如下所示:
#define DEBUG
//#undef DEBUG
#ifdef DEBUG
    uart_printf("debug info\n");
#endif
三 現(xiàn)代調(diào)試技術(shù)
   
調(diào)試的基礎(chǔ)是檢測(cè),而檢測(cè)有“無(wú)損(non-intrusive)”和“無(wú)損(intrusive)”之分。理想的檢測(cè)手段應(yīng)該是不使被測(cè)對(duì)象的狀態(tài)(包
括時(shí)序)因此而造成任何改變,否則測(cè)到的數(shù)據(jù)就不準(zhǔn)確了?墒,嚴(yán)格意義上的無(wú)損檢測(cè)不可能實(shí)現(xiàn),因此實(shí)際上是“測(cè)不準(zhǔn)”的。人們所能做到的只是盡量減少
對(duì)被測(cè)對(duì)象的狀態(tài)改變,將誤差減少到可以接受的程度。這還是比較容易理解的。不過(guò)原來(lái)看ARM資料的時(shí)候,調(diào)試手段一大堆,但是都沒(méi)有深刻的印象,以致于
以前還一直在懷疑,為什么下載的jflash-s3c2410,不能通過(guò)仿真器下載呢?現(xiàn)在想想,其實(shí)對(duì)于什么是調(diào)試器,什么是仿真器,調(diào)試的模型是什么
都是非常模糊的,所以下決心首先從概念上理解調(diào)試模型。之后隨著技術(shù)深入,可以逐步深入理解調(diào)試技術(shù)。
    現(xiàn)代調(diào)試技術(shù)大致可以歸為指令級(jí)仿真調(diào)試和硬件仿真調(diào)試兩種。
1 指令級(jí)仿真調(diào)試
   
我想這個(gè)比較容易理解。指令集仿真調(diào)試屬于純軟件仿真,比如ARM公司的ARMulator。因?yàn)橛械臅r(shí)候嵌入式軟件的開發(fā)需要在目標(biāo)系統(tǒng)(硬件)并不存
在的條件下進(jìn)行,所以需要這種通過(guò)軟件來(lái)模擬目標(biāo)系統(tǒng)的CPU。現(xiàn)在有個(gè)開源項(xiàng)目skyeye,也是這樣一個(gè)指令級(jí)仿真調(diào)試工具。這一系列的軟件以數(shù)據(jù)結(jié)
構(gòu)來(lái)模擬目標(biāo)機(jī)CPU中各個(gè)寄存器和其他資源,以及目標(biāo)系統(tǒng)的有關(guān)資源(比如內(nèi)存等),并且通過(guò)軟件模擬,即逐條指令地解釋執(zhí)行目標(biāo)機(jī)可執(zhí)行映象中的程
序。例如,“mov r1,
#0”,就代表往寄存器r1的數(shù)據(jù)結(jié)構(gòu)中寫0,如此。模擬執(zhí)行的速度當(dāng)然慢一些,但是可以驗(yàn)證邏輯,在某些條件下是一種重要的手段。
2 硬件仿真調(diào)試
    這才是探討的重頭戲。在這里,就要從歷史的角度去看一下了。
   
從前的時(shí)候,元器件的面積和pcb的面積普遍較大,pcb板的層數(shù)較少,并且元器件只是安裝于pcb的一面,也就是單面板。這樣調(diào)試并不困難,加工工藝不
復(fù)雜。pcb的加工制造者可以專門為具體的pcb配套制造用于測(cè)試的模板。模板上有許多觸針,將pcb板和配套的測(cè)試模板疊在一起,模板上的觸針正好與
pcb“焊接面”許多監(jiān)測(cè)點(diǎn)接觸,從而可以監(jiān)測(cè)pcb板上各點(diǎn)的邏輯電平及其變化。另一方面,pcb板的“元件面”也可以方便的將示波器或邏輯分析儀的探
針連接到元器件的引線上。還有,當(dāng)時(shí)的許多芯片,像cpu一類的大規(guī)模芯片,都不是直接焊接在pcb上,而是采用芯片插座。這樣就可以作出特殊插頭,冒充
芯片插到其插座,而用外部的儀器來(lái)“仿真”這種芯片(通常是cpu)在整個(gè)目標(biāo)系統(tǒng)中的作用和運(yùn)行,就是“在線仿真ICE(In-Circuit
Emulation)”。無(wú)論對(duì)于軟件還是硬件,ICE在當(dāng)時(shí)都是一種非常有效的開發(fā)/調(diào)試手段。我在本科時(shí)用的51單片機(jī),但是就是采用ICE,記得有
個(gè)仿真頭,插到插座上。ICE還有一種方式,就是使用真實(shí)的cpu芯片,可以用特制的插頭騎到芯片背上,以監(jiān)測(cè)芯片的各條引線上的邏輯電平。
    可以隨著pcb板和元器件的面積越來(lái)越小,pcb板層數(shù)也越來(lái)越多,特別是“表面貼焊”式芯片的出現(xiàn)打破了元件面和焊接面的劃分,并且直接將芯片的引線焊接(而不是穿透),在pcb上,以前的那些手段都用不上了。
   
在到后來(lái),“集成電路級(jí)”向“集成系統(tǒng)級(jí)”發(fā)展,現(xiàn)在的芯片大多是SoC,原有的測(cè)試手段就更用不上了。這些芯片設(shè)計(jì)者都是重點(diǎn)考慮的問(wèn)題。專業(yè)上成為
DFT(design-for-test,可測(cè)試性設(shè)計(jì)),也就是在設(shè)計(jì)一款SoC,必須要考慮它的可測(cè)試性能。另外,為什么要在對(duì)資源要求比較苛刻的情
況下,把調(diào)試電路集成到SoC中,看似矛盾,實(shí)際上,SoC集成調(diào)試電路已經(jīng)成了普遍的共識(shí):只有這樣,才能減少調(diào)試成本,方便開發(fā)者進(jìn)行調(diào)試,從而吸引
開發(fā)者選擇使用SoC。如果沒(méi)有良好的調(diào)試手段,我想很少有開發(fā)者會(huì)選擇使用的。好了,現(xiàn)在介紹調(diào)試檢測(cè)技術(shù),F(xiàn)在比較成熟的技術(shù)有如下四種:
    ·Ad-hoc test
    ·Scan-based test
    ·Build-in-self test
    ·Boundary-scan test
    因?yàn)椴皇菍I(yè)研究這個(gè)方向,對(duì)這四個(gè)測(cè)試技術(shù)的區(qū)別也沒(méi)大有必要深究,F(xiàn)在重點(diǎn)來(lái)看第四種技術(shù),Bounary-scan
test,即邊界掃描技術(shù)。ARM普遍采用了邊界掃描技術(shù),協(xié)議標(biāo)準(zhǔn)為IEEE
1149.1,簡(jiǎn)介原來(lái)的文章也談到過(guò)了,就不必多說(shuō)了。關(guān)于JTAG,它的作用主要有如下兩個(gè)方面:
   
·映象的下載。嵌入式系統(tǒng)軟件的開發(fā),在Host上完成目標(biāo)映象之后,要在“裸機(jī)”上實(shí)現(xiàn)第一個(gè)程序的“自舉”下載固化到flash中,就需要通過(guò)
JTAG接口下載。當(dāng)然,完成bootloader之后,也可以采用JTAG接口下載,另外也可以采用USB或者TFTP下載。后續(xù)的下載方式就多了。但
是現(xiàn)在看來(lái),“自舉”下載方式還是比較單一的,ARM一般還得依賴于JTAG接口下載bootloader。
   
·軟件(以及硬件)的調(diào)試。更重要的是,目標(biāo)系統(tǒng)的調(diào)試也要在宿主機(jī)的控制/輔助下進(jìn)行,而JTAG接口為宿主機(jī)與目標(biāo)系統(tǒng)之間的通信、控制提供了重要的
手段!镜切枰⒁獾氖牵@并不是絕對(duì)的。通信手段倒是還可以借助于網(wǎng)絡(luò)實(shí)現(xiàn),調(diào)試也可以通過(guò)gdb遠(yuǎn)程串口調(diào)試。這里的意思是,它是當(dāng)前采用的調(diào)試的
一種重要的手段!
    現(xiàn)在可以分析基于JTAG技術(shù)的ARM Debug Architecture。下面給出一個(gè)結(jié)構(gòu)圖:
    ·Debug Host
    ·    Protocol converter
    ·        Debug Target
    也就是ARM Debug Architecture分為三層,這也可以認(rèn)為是一個(gè)完整的調(diào)試系統(tǒng)。當(dāng)然這是理論上的劃分,在實(shí)際實(shí)現(xiàn)中也可以在形式上有所變通。下面先解釋一下這三層結(jié)構(gòu)。
    ·Debug Host
    Host computer running ARM or third party toolkit.
    這是調(diào)試系統(tǒng)的Host前端。也就是我們常見(jiàn)到的IDE的debugger,比如ARM提供的ADW(ARM Debugger
for Windows,相應(yīng)的unix版本為ADU,即ARM Debugger for
Unix)。它所提供的功能是提供一個(gè)良好的圖形交互界面,使用戶可以方便的進(jìn)行調(diào)試操作,也可以完成下載等。另外,它實(shí)際上完成調(diào)試命令的驅(qū)動(dòng)部分。
ARM制定了一個(gè)協(xié)議,就是ADP(Angel Debug
Protocol),這是一個(gè)比較復(fù)雜的協(xié)議,分為三層,主要就是保證可靠穩(wěn)定的與目標(biāo)機(jī)進(jìn)行通信。
    · Protocol converter
    for example, multi-ICE。
    這部分完成host端協(xié)議到j(luò)tag協(xié)議的轉(zhuǎn)換。轉(zhuǎn)換過(guò)程是雙向的。這個(gè)在這里也不太容易說(shuō),可以通過(guò)后面仿真器來(lái)進(jìn)行分析。
    ·debug target
    development system containing an ARM7TDMI processor
    也就是你的目標(biāo)SoC。
    有了這個(gè)模型作為基礎(chǔ),就可以對(duì)現(xiàn)有的調(diào)試工具進(jìn)行一個(gè)大體的分析了。在這里,仿真器又可以稱為調(diào)試代理,它充當(dāng)了protocol converter的角色。
    ·第一層次 簡(jiǎn)易JTAG小板
    市場(chǎng)上有不少提供簡(jiǎn)易JTAG小板,大多只是具備下載功能。其中,debug
host可以是jflash-s3c2410這樣的工具,它實(shí)際上就是用軟件實(shí)現(xiàn)JTAG時(shí)序,完成“串并”和“并串”轉(zhuǎn)換。即把目標(biāo)JTAG向量中的每
個(gè)字節(jié)都逐位地轉(zhuǎn)換成JTAG接口各條引線上的串行的波形,或者反過(guò)來(lái)。而jtag小板,只是完成一個(gè)基本的電平轉(zhuǎn)換電路,最差的只有幾個(gè)電路,普通的就
是一個(gè)74HC244做驅(qū)動(dòng)。簡(jiǎn)單的說(shuō),就是:host(jflash-s3c2410等)--> 并口 --> jtag小板
--> SoC
JTAG接口。這樣完成了下載功能。如果在host端軟件增強(qiáng),可以完成一些調(diào)試功能。相對(duì)而言,這樣技術(shù)是用純軟件去實(shí)現(xiàn)JTAG時(shí)序,效率比較低。市
場(chǎng)上的wiggle、H-jtag、2410jtag等都是如此,只是在對(duì)應(yīng)的引腳設(shè)置和host軟件上有所不同。
    ·第二層次 cpld/fpga實(shí)現(xiàn)jtag狀態(tài)機(jī)
    用軟件模擬jtag時(shí)序效率低,那么可以通過(guò)cpld等可編程器件實(shí)現(xiàn)jtag時(shí)序,那么host的軟件只要簡(jiǎn)單的寫字節(jié)就可以了。這樣,效率就高的多了。
    ·第三層次 mcu+cpld/fpga實(shí)現(xiàn)基于以太網(wǎng)/USB的仿真器
    其中,mcu用來(lái)實(shí)現(xiàn)tcp/ip協(xié)議,完成host調(diào)試協(xié)議的解析,cpld/fpga實(shí)現(xiàn)jtag狀態(tài)機(jī)。這種組合方式的效率又遠(yuǎn)遠(yuǎn)高于第二層次,F(xiàn)在的realview就是采用這種方案,原有的ads系列則不提供更新了。
   
我把使用的powerICE拆開看了一下,發(fā)現(xiàn)里面核心芯片就是cpld。由此可見(jiàn),這個(gè)簡(jiǎn)化版的仿真器也只是第二層次的產(chǎn)品,硬件實(shí)現(xiàn)jtag時(shí)
序,host IDE進(jìn)行調(diào)試協(xié)議處理。原來(lái)的jflash-s3c2410不能夠使用就很明顯了,不同層次,也不會(huì)兼容。
    如果要深入研究,可以參考:
    ·IEEE 1149.1協(xié)議
    ·《嵌入式系統(tǒng)--采用公開源代碼和StrongARM/XScale處理器》
    ·OpenJTAG論壇
    ·ARM7TDMI Datasheet
---------------------------------------
幾個(gè)名詞:
spp: standard parallel protocol 標(biāo)準(zhǔn)并口協(xié)議
epp: enhanced parallel protocol 增強(qiáng)并口協(xié)議
dft: design for test  可測(cè)試性設(shè)計(jì)
tap: test access port 測(cè)試訪問(wèn)口
tdi: test data input  測(cè)試數(shù)據(jù)輸入
tdo: test data output 測(cè)試數(shù)據(jù)輸出
tms: test mode select 測(cè)試模式選擇
tck: test clock  測(cè)試時(shí)鐘
trst: test reset  測(cè)試復(fù)位
wdm: win32 driver model win32驅(qū)動(dòng)模型
isp: in system programming 在系統(tǒng)編程
isc: in system config  在系統(tǒng)配置
adp: angel debug protocol 調(diào)試代理協(xié)議
rsp: remote serial protocol gdb的遠(yuǎn)程串行協(xié)議
rdi: remote debug interface ARM的遠(yuǎn)程調(diào)試接口

本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u3/92500/showart_2163894.html

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-03-23 21:32 |只看該作者
不懂ARM,學(xué)習(xí)了,,,,
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP