|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
JTAG裝載調(diào)試程序的超級(jí)GUG!! |
| 作者:Chang_HS 欄目:ARM技術(shù) |
在程序中將一個(gè)循環(huán)語(yǔ)句: for(i=0;i<=128;i++) Temp_Buffer[i]=0; 改為:for(i=0;i<128;i++) Temp_Buffer[i]=0; 或者將后者改為前者,只要整個(gè)程序中其他地方不做任何改動(dòng),僅僅將<改成<=或者將<=改成< ,然后用JTAG重新裝載image(thrumb in FLASH 模式),會(huì)發(fā)覺(jué)裝載進(jìn)去的新代碼和原來(lái)的代碼一樣(仍然用的<),也就是說(shuō)將<改成<=不起作用,程序反匯編碼可以看出來(lái)明顯的錯(cuò)誤,程序運(yùn)行結(jié)果也是錯(cuò)的,如果整個(gè)程序中其他任何一個(gè)地方再做一些改動(dòng),再裝載image又能得出正確結(jié)果. 而用ADS12自帶的仿真調(diào)試軟件裝載image沒(méi)有這個(gè)錯(cuò)誤,下面是我用JTAG和仿真軟件裝載同一個(gè)image出現(xiàn)的不同結(jié)果,顯然上面的一段JTAG裝載的是錯(cuò)誤的代碼!! 兩者不同之處 : 匯編碼第7行 JTAG裝載為 bcs 0x3edc ARMU裝載為 bhi 0x3edc for(i=0;i<=128;i++) Temp_Buffer[i]=0; [0x2000] mov r0,#0 [0xab20] add r3,r13,#0x80 [0x8198] strh r0,[r3,#0xc] [0xab20] add r3,r13,#0x80 [0x8998] ldrh r0,[r3,#0xc] [0x2880] cmp r0,#0x80 [0xd20b] bcs 0x3edc ; (CPowerOn::Initial_Meters + 0x7e) [0xe004] b 0x3ed0 ; (CPowerOn::Initial_Meters + 0x72) [0xab20] add r3,r13,#0x80 [0x8998] ldrh r0,[r3,#0xc] [0x3001] add r0,#1 for(i=0;i<=128;i++) Temp_Buffer[i]=0; [0x2000] mov r0,#0 [0xab20] add r3,r13,#0x80 [0x8198] strh r0,[r3,#0xc] [0xab20] add r3,r13,#0x80 [0x8998] ldrh r0,[r3,#0xc] [0x2880] cmp r0,#0x80 [0xd80b] bhi 0x3edc ; (CPowerOn::Initial_Meters + 0x7e) [0xe004] b 0x3ed0 ; (CPowerOn::Initial_Meters + 0x72) [0xab20] add r3,r13,#0x80 [0x8998] ldrh r0,[r3,#0xc] [0x3001] add r0,#1 * - 本貼最后修改時(shí)間:2006-5-10 16:36:28 修改者:Chang_HS |
| 2樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/10 10:19:00 發(fā)布:
程序代碼是直接從調(diào)試軟件的反匯編碼拷貝下來(lái)的, 大家可以逐行比較. |
|
| 3樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/10 15:48:00 發(fā)布:
?? |
|
| 4樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/10 16:33:00 發(fā)布:
超級(jí)BUG,反復(fù)試驗(yàn)都是這個(gè)結(jié)果!!! 做其他改動(dòng)重新裝載image都可以正常運(yùn)行,就是不能改<為<=,改了重新裝載都不起作用!!! |
|
| 5樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/10 16:38:00 發(fā)布:
我用的i是 unsigned SHORT 型的,用unsigned CHAR也一樣! |
|
| 6樓: | >>參與討論 |
| 作者: bbb_ATK 于 2006/5/10 17:07:00 發(fā)布:
RE 對(duì)于匯編來(lái)說(shuō)只是改一條語(yǔ)句,Image的大小并不變,可能是這個(gè)原因?qū)е赂緵](méi)有重裝。我以前也遇到過(guò)。所以我后來(lái)對(duì)于這樣的小的修改都會(huì)先Remove Object Code。然后再編譯一次,可以確保重新編譯了。 |
|
| 7樓: | >>參與討論 |
| 作者: yadog 于 2006/5/10 18:40:00 發(fā)布:
re 樓上說(shuō)得有可能啊 |
|
| 8樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/11 0:20:00 發(fā)布:
Remove Object Code,不是這個(gè)問(wèn)題, Remove Object Code這個(gè)問(wèn)題不是的,整個(gè)TARGET的Object都MOVE掉也不能解決問(wèn)題,查看了整個(gè)目錄,所有的文件都有更新,轉(zhuǎn)載的時(shí)候一樣有這個(gè)問(wèn)題,此外樓上別忘了,用ADS自帶的ARMu仿真軟件裝載同一個(gè)image,得出的結(jié)果卻是正確的,可見(jiàn)生成的文件是沒(méi)有問(wèn)題的。 |
|
| 9樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/11 0:22:00 發(fā)布:
其實(shí)大家都可以試的,將<改成<=,其他程序不變,然后裝載看結(jié)果 |
|
| 10樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/11 11:09:00 發(fā)布:
看帖子的人很多,去試驗(yàn)一下的人卻沒(méi)有一個(gè)! 難道只有我的開(kāi)發(fā)板上有這個(gè)問(wèn)題? |
|
| 11樓: | >>參與討論 |
| 作者: twentyone 于 2006/5/11 17:06:00 發(fā)布:
我晚上試一試 估計(jì)是樓主自己的問(wèn)題.我晚上試一試,然后把試驗(yàn)結(jié)果放上來(lái). |
|
| 12樓: | >>參與討論 |
| 作者: hehuading 于 2006/5/11 17:18:00 發(fā)布:
兄弟,不是JTAG問(wèn)題,是編譯問(wèn)題。 兄弟,不是JTAG問(wèn)題,是編譯問(wèn)題。 |
|
| 13樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/11 19:38:00 發(fā)布:
twentyone 你試驗(yàn)完了就知道了 剛才我的另外一個(gè)同事也試出了這個(gè)問(wèn)題,他用的開(kāi)發(fā)板和我的不一樣,軟件也不一樣,但這個(gè)問(wèn)題是一樣的 |
|
| 14樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/11 19:40:00 發(fā)布:
hehuading,不是編譯的問(wèn)題,如果是編譯問(wèn)題,怎用ARMu裝載沒(méi)有問(wèn)題 此外,編譯完的HEX燒入芯片中,運(yùn)行沒(méi)有問(wèn)題! |
|
| 15樓: | >>參與討論 |
| 作者: xiaoxiao_1 于 2006/5/11 20:33:00 發(fā)布:
深有同感!經(jīng)常毛病百出呀! |
|
| 16樓: | >>參與討論 |
| 作者: twentyone 于 2006/5/12 1:46:00 發(fā)布:
剛試驗(yàn)過(guò),沒(méi)發(fā)現(xiàn)問(wèn)題 LZ,剛試驗(yàn)過(guò),沒(méi)有發(fā)現(xiàn)你說(shuō)的問(wèn)題.LOAD完全正確. |
|
| 17樓: | >>參與討論 |
| 作者: twentyone 于 2006/5/12 2:03:00 發(fā)布:
圖1 * - 本貼最后修改時(shí)間:2006-5-12 2:10:13 修改者:twentyone
|
|
| 18樓: | >>參與討論 |
| 作者: twentyone 于 2006/5/12 2:04:00 發(fā)布:
圖2 * - 本貼最后修改時(shí)間:2006-5-12 2:10:46 修改者:twentyone
|
|
| 19樓: | >>參與討論 |
| 作者: twentyone 于 2006/5/12 2:14:00 發(fā)布:
原因 我LOAD的時(shí)候是LOAD到RAM里面去的. 不知道是不是因?yàn)閾е鬟x擇了"thumb in FLASH.html">FLASH"造成的. 按字面理解,"THUMB IN FLASH"的意思是不是轉(zhuǎn)載到FLASH里面,因?yàn)?a target="_blank" href="http://m.58mhw.cn/stock-ic/FLASH.html">FLASH是只讀的,所以調(diào)試器就沒(méi)有更新內(nèi)容. 不過(guò)看了摟主發(fā)的帖子,還不能確定摟主用的是什么調(diào)試器,是AXD嗎? |
|
| 20樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/12 19:48:00 發(fā)布:
re:twentyone 估計(jì)是FLASH中的問(wèn)題,我的程序較大,沒(méi)有辦法在RAM中試,切記其他任何地方都不要改動(dòng)! 在FLASH中反復(fù)試都是有問(wèn)題,去其他人那里去試了,也是一樣的結(jié)果! |
|
| 21樓: | >>參與討論 |
| 作者: twentyone 于 2006/5/12 20:12:00 發(fā)布:
re 如果你的程序是下載到FLASH里面去,你肯定用的是別的工具吧?難道你用AXD直接把程序下載到FLASH里面去? 如果你用的是別的工具,那就不一定是AXD的問(wèn)題,可能是FLASH燒寫(xiě)的問(wèn)題. 希望你能仔細(xì)測(cè)試一下,看看問(wèn)題到底在那里. |
|
| 22樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/12 20:43:00 發(fā)布:
re:twentyone 此外,我的代碼是在Thrumb模式下的,是用的AXD調(diào)試器,畫(huà)面和你用的是一模一樣的,不同的地方是在FLASH中,thrumb模式 |
|
| 23樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/13 10:03:00 發(fā)布:
re:twentyone 你能不能在FLASH中試驗(yàn)一下? |
|
| 24樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/13 11:17:00 發(fā)布:
在RAM中裝載確實(shí)是沒(méi)有問(wèn)題的! FLASH中裝載不光是<=的問(wèn)題,改一些常數(shù)表格也不重新裝載! |
|
| 25樓: | >>參與討論 |
| 作者: twentyone 于 2006/5/13 13:57:00 發(fā)布:
re 如果是裝載到FLASH里面去的話(huà),和AXD肯定沒(méi)關(guān)系.因?yàn)槟銣y(cè)試也說(shuō)明了,裝載到RAM里面去確實(shí)是沒(méi)問(wèn)題的.我想問(wèn)題應(yīng)該是在你的FLASH燒寫(xiě)工具上.不知道你用的是什么仿真器? 另外,我用自己寫(xiě)的IAP燒寫(xiě)程序燒寫(xiě)FLASH,沒(méi)有問(wèn)題的. |
|
| 26樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/13 17:22:00 發(fā)布:
就沒(méi)有一個(gè)有同感的?怪 |
|
| 27樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/14 8:53:00 發(fā)布:
真希望ZLG的同志能試一下或者回個(gè)貼,有不有問(wèn)題也應(yīng)該發(fā)個(gè)言 |
|
| 28樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/29 12:26:00 發(fā)布:
再讓大家看一眼這個(gè)問(wèn)題,知道了就不算問(wèn)題,不知道很容易迷惑! |
|
| 29樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/29 17:44:00 發(fā)布:
re:twentyone 誰(shuí)說(shuō)AXD只能裝載到RAM? |
|
| 30樓: | >>參與討論 |
| 作者: wlq_9 于 2006/5/30 9:37:00 發(fā)布:
更新表格的時(shí)候,AXD有時(shí)也不重裝. 偶遇到過(guò).是在FLASH下運(yùn)行的,改了常數(shù)表格里的一個(gè)值,怎么改,仿真出來(lái)都是最開(kāi)始那個(gè). |
|
| 31樓: | >>參與討論 |
| 作者: twentyone 于 2006/5/30 10:41:00 發(fā)布:
re Chang_HS 這個(gè)帖子討論了這么久,你好像還沒(méi)有說(shuō)過(guò)你用的是什么仿真器? 你能確定這是AXD的問(wèn)題,還是仿真器的問(wèn)題嗎? AXD本身不能直接將程序下載到FLASH里面,這點(diǎn)是肯定的.AXD只是告訴仿真器需要下載什么數(shù)據(jù),到什么位置上去.從AXD的角度來(lái)說(shuō),AXD并不知道那個(gè)地址是FLASH,那個(gè)地址是SDRAM/RAM.你也做過(guò)試驗(yàn),把程序下載到RAM里面去的話(huà),是沒(méi)有你說(shuō)的那個(gè)更新問(wèn)題的.這就說(shuō)明AXD從AXF文件里提取的數(shù)據(jù)是更新過(guò)的,沒(méi)有錯(cuò)誤的. 如果你現(xiàn)在能直接將程序轉(zhuǎn)載到FLASH里面去,肯定是你的仿真器提供的FLASH下載功能.如果是仿真器提供的FLASH下載功能,你怎么能確定這個(gè)是AXD的BUG,而不是仿真器的問(wèn)題呢? |
|
| 32樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/30 12:34:00 發(fā)布:
re:twentyone 帖子一開(kāi)始就說(shuō)了用的JTAG調(diào)試,也說(shuō)的是JTAG的裝載程序的BUG,調(diào)試器是AXD,用周立功的LPC2114開(kāi)發(fā)板,用周立功的模板程序用JTAG裝載,可以裝載到FLASH中呀,你怎么說(shuō)不可以呢?ThumbRelInFlash |
|
| 33樓: | >>參與討論 |
| 作者: twentyone 于 2006/5/30 12:48:00 發(fā)布:
re Chang_HS 基本上所有的ARM的調(diào)試都是基于JTAG的.都是JTAG調(diào)試.那你用的到底是什么仿真器呢? EASYJTAG, MULTI-ICE?, ULINK? 如果你不說(shuō)清楚,你給誰(shuí)提醒,EASYJTAG的用戶(hù),MULTI-ICE的用戶(hù),還是ULINK的用戶(hù)? 我并沒(méi)有說(shuō)不可以裝載到FLASH里面,我的意思是AXD本身不能直接下載到FLASH去,需要仿真器提供FLASH下載功能.例如,你用AXD+MULTI-ICE,就不能直接下載到FLASH里去調(diào)試. 我沒(méi)有別的意思,只是覺(jué)得,你應(yīng)該把問(wèn)題說(shuō)清楚,問(wèn)題在那里.按你說(shuō)的"JTAG裝載調(diào)試程序的超級(jí)GUG", 一棍子把JTAG調(diào)試都打死了,變成JTAG調(diào)試都有問(wèn)題了. |
|
| 34樓: | >>參與討論 |
| 作者: Chang_HS 于 2006/5/30 15:09:00 發(fā)布:
re:twentyone 在ZLG的論壇上,用的ZLG的LPC2114調(diào)試板,用的ZLG的模板程序,自然是用ZLG的EasyJTAG了,EasyJTAG驅(qū)動(dòng)版本是ZLG目前最新的 |
|
| 35樓: | >>參與討論 |
| 作者: twentyone 于 2006/5/30 16:54:00 發(fā)布:
re Chang_HS 謝謝你的回復(fù).其實(shí)調(diào)試的時(shí)候,我用別的仿真器,也能用ZLG的模板的.模板和仿真器并不是一種必然的聯(lián)系. :-) 按你說(shuō)的,問(wèn)題應(yīng)該是存在的,不過(guò)應(yīng)該是EASYJTAG的問(wèn)題.EASYJTAG針對(duì)LPC系列提供了特殊的支持.所以能把程序下載到FLASH里去.從AXD里送過(guò)來(lái)的數(shù)據(jù)應(yīng)該是正確的,很可能是EASYJTAG燒寫(xiě)FLASH的時(shí)候出了問(wèn)題. 如果你覺(jué)得影響調(diào)試,可以嘗試聯(lián)系ZLG的技術(shù)支持,他們應(yīng)該能幫你解決. |
|
| 36樓: | >>參與討論 |
| 作者: enic1980 于 2006/6/9 11:12:00 發(fā)布:
你編譯修改的文件后用ISP下載下去,再連接調(diào)試就OK 用AXD好象只是建立映射連接,根本都沒(méi)有把程序下載到FLAHS里面去,所以--- |
|
| 37樓: | >>參與討論 |
| 作者: gdtyy 于 2006/6/9 21:16:00 發(fā)布:
AXD+EASYJTAG可以下載和調(diào)試程序 JTAG下載速度比ISP快,還能匯編調(diào)試。enic1980就別用慢吞吞的ISP下載了。 我用GNU的開(kāi)發(fā)工具,生成的ELF格式的執(zhí)行文件不能在AXD里進(jìn)行源代碼調(diào)試,AXD只能識(shí)別AXF格式的文件,因此我直接燒錄bin文件,遇到的現(xiàn)象是燒下去的程序經(jīng)常跑飛,全局變量不能初始化,后來(lái)發(fā)現(xiàn)是程序沒(méi)有燒錄完全造成的,比如:最后部分總是燒不進(jìn)去,或者BSS段全是FF。我的解決辦法是把bin文件補(bǔ)上4K字節(jié)的FF,以后每次燒錄都成功,512K RAM太小,我一直在FLASH里調(diào)試,都燒了上百次了,沒(méi)有問(wèn)題。估計(jì)是小于4K的內(nèi)容EASYJTAG不執(zhí)行寫(xiě)操作,可能你只改變一個(gè)等號(hào)沒(méi)有使文件大小發(fā)生變化,EASYJTAG沒(méi)有被激活。你改變了其他語(yǔ)句導(dǎo)致程序大小變化,激活了EASYJTAG。不管怎么說(shuō),AXD沒(méi)有問(wèn)題,仿真正確,固化的結(jié)果也會(huì)正確,問(wèn)題出在FLASH燒錄上。你改變了<=,編譯器肯定正確編譯了,可惜"整個(gè)程序中其他地方不做任何改動(dòng)",bcs 0x3edc和bhi 0x3edc又恰好一樣長(zhǎng),EASYJTAG根本就沒(méi)有被激活寫(xiě)入,程序還是上次的。另外,還可能是你的程序小于4K。 解決的辦法是加個(gè)無(wú)用的語(yǔ)句改變程序大小,適配EASYJTAG的這個(gè)特性,總之,沒(méi)什么不方便的。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |