|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
6713的CMD怎樣設置才可以將程序放到SDRAM中運行 |
| 作者:polarstars 欄目:DSP技術 |
我的6713的CMD怎樣設置才可以將程序放到SDRAM中運行(先不考慮執(zhí)行速度的問題),試了半天都不行,僅把堆棧設置在SDRAM中程序都不運行,只有全部使用內(nèi)部RAM時程序才正常,SDRAM是好的,寫進去的數(shù)據(jù)和讀出來的一致!哪位能在關鍵的地方給點一下? 這個CMD無法運行,到底哪里有錯? MEMORY { IPRAM : origin = 0x0, len = 0x10000 SDRAM : origin = 0x80000000, len = 0x10000 } SECTIONS { .vecs > IPRAM .text > IPRAM .bss > SDRAM .cinit > SDRAM .const > SDRAM .far > SDRAM .stack > SDRAM .cio > SDRAM .sysmem > SDRAM } |
| 2樓: | >>參與討論 |
| 作者: simple_head 于 2006/10/13 13:02:00 發(fā)布:
具體怎樣不行? 講具體一點。是編譯不通過?鏈接不通過?程序下載失?還是運行失敗? |
|
| 3樓: | >>參與討論 |
| 作者: sly1982 于 2006/10/14 10:55:00 發(fā)布:
.text > SDRAM .text > IPRAM 改成 .text > SDRAM 可以么? |
|
| 4樓: | >>參與討論 |
| 作者: sly1982 于 2006/10/14 13:16:00 發(fā)布:
二次搬移程序 剛才看了自己的程序 我的6713是在自己的內(nèi)部RAM里運行的 但是要在外面的RAM里運行應該需要修改二次搬移程序吧 把FLASH里的源程序搬移到外部RAM之后再運行 |
|
| 5樓: | >>參與討論 |
| 作者: tmhy2000 于 2006/10/16 13:42:00 發(fā)布:
二次搬移程序 同意樓上的說華,在2812中也是這樣的,需要自己將程序搬移到外部RAM之后再運行 |
|
| 6樓: | >>參與討論 |
| 作者: iversonma 于 2006/10/16 13:44:00 發(fā)布:
lz已經(jīng)解決問題了吧~ 也不回來看看,呵呵 |
|
| 7樓: | >>參與討論 |
| 作者: polarstars 于 2006/10/17 10:27:00 發(fā)布:
我是用仿真器把程序裝入SDRAM的,需要二次搬移? .text > IPRAM 改成 .text > SDRAM 程序就當?shù)袅耍?br>只有全部在內(nèi)部才正常! |
|
| 8樓: | >>參與討論 |
| 作者: simple_head 于 2006/10/17 10:53:00 發(fā)布:
SDRAM正確初始化沒有? 在你的程序運行c_int00之前,有沒有SDRAM初始化的代碼先運行?如果你是在C程序中(也就是c_int00之后)才初始化SDRAM,是沒用的。 以我的方法,應該在BootLoader中加入SDRAM的初始化代碼,BootLoader是在c_int00之前運行的,那么在PC指針跳轉(zhuǎn)到外部SDRAM空間后,C的code部分才可以正確讀出,這樣程序才可以正確運行。 |
|
| 9樓: | >>參與討論 |
| 作者: polarstars 于 2006/10/17 11:31:00 發(fā)布:
T0:simple_head GEL已經(jīng)把SDRAM初始化了 我現(xiàn)在還沒用bootload,用仿真器直接把.out下載到板子上就運行不了! |
|
| 10樓: | >>參與討論 |
| 作者: simple_head 于 2006/10/17 12:04:00 發(fā)布:
to polarstars: 你將.text設為SDRAM,其他全部為內(nèi)部RAM。build和download之后,將PC指針設為reset中斷出,這時PC指向的是內(nèi)部ram,單步運行應該不會有錯,然后觀察是否在跳轉(zhuǎn)到_c_int00時出錯,并且觀察SDRAM中的數(shù)據(jù),是否為正確的指令代碼。 |
|
| 11樓: | >>參與討論 |
| 作者: polarstars 于 2006/10/17 13:52:00 發(fā)布:
能運行到c_int00:但到不了main MEMORY { VECS : origin = 0x0, len = 0x200 IPRAM: origin = 0x200, len = 0x20000 IDRAM : origin = 0x80000000, len = 0x20000 } SECTIONS { .vecs > VECS .text > IPRAM .bss > IPRAM .cinit > IPRAM .const > IPRAM .far > IPRAM .stack > IPRAM .cio > IPRAM .sysmem > IPRAM } Count : 1 Count : 2 Count : 3 Count : 4 Count : 5 Count : 6 Count : 7 Count : 8 Count : 9 Count : 10 Count : 11 Count : 12 Count : 13 Count : 14 Count : 15 Count : 16 Count : 17 Count : 18 Count : 19 Count : 20 TEST PASSED 運行正常! MEMORY { VECS : origin = 0x0, len = 0x200 IPRAM: origin = 0x200, len = 0x20000 IDRAM : origin = 0x80000000, len = 0x20000 } SECTIONS { .vecs > VECS .text > IPRAM .bss > IDRAM .cinit > IDRAM .const > IDRAM .far > IDRAM .stack > IDRAM .cio > IDRAM .sysmem > IDRAM } 胦u铘 : 1 胦u铘 : 2 胦u铘 : 3 胦u铘 : 4 胦u铘 : 5 胦u铘 : 6 胦u铘 : 7 胦u铘 : 8 胦u铘 : 9 胦u铘 : 10 胦u铘 : 11 胦u铘 : 12 胦u铘 : 13 胦u铘 : 14 胦u铘 : 15 胦u铘 : 16 胦u铘 : 17 胦u铘 : 18 胦u铘 : 19 胦u铘 : 20 T龐T 辛SS拍 顯示亂碼,但程序還能運行! MEMORY { VECS : origin = 0x0, len = 0x200 IPRAM: origin = 0x200, len = 0x20000 IDRAM : origin = 0x80000000, len = 0x20000 } SECTIONS { .vecs > VECS .text > IDRAM .bss > IDRAM .cinit > IDRAM .const > IDRAM .far > IDRAM .stack > IDRAM .cio > IDRAM .sysmem > IDRAM } 程序放入SDRAM運行就出現(xiàn): Trouble Halting Target CPU: Error 0x80000020/-1070 Fatal Error during: Execution, An UNKNOWN error prevented the EMULATOR.html">EMULATOR from accessing the processor in a timely fashion. It is recommended to RESET EMULATOR. This will disconnect each target from the EMULATOR.html">EMULATOR. The targets should then be POWER cycled or hard reset followed by an emureset and reconnect to each target. Sequence ID: 15 Error Code: -1070 Error Class: 0x80000020 |
|
| 12樓: | >>參與討論 |
| 作者: polarstars 于 2006/10/17 14:25:00 發(fā)布:
奇怪了,匯編怎么會這樣 我瘋了:程序放在SDRAM中時匯編程序有問題: 請看地址80008524 的那行MVKH.S2 0x80000000,B5 我通過對比程序放在內(nèi)部RAM中的匯編 這里的B5似乎應該為B4,應為他要調(diào)用 auto_init(地址:80006700),不知為什么會這個樣子,下面的匯編是.text放在SDRAM中時看到的。 80008500 c_int00: 80008500 07E8FE2A MVK.S2 0xffffd1fc,SP 80008504 07C0006A MVKH.S2 0x80000000,SP 80008508 07FF07A2 .word 0x07ff07a2 8000850C 0701002A MVK.S2 0x0200,DP 80008510 0700006A MVKH.S2 0x0000,DP 80008514 020000FA ZERO.L2 B4 80008518 091003A2 MVC.S2 B4,FADCR 8000851C 0A1003A2 MVC.S2 B4,FMCR 80008520 0233802A MVK.S2 0x6700,B4 80008524 02C0006A MVKH.S2 0x80000000,B5 80008528 00100362 B.S2 B4 8000852C 022E6828 MVK.S1 0x5cd0,A4 80008530 01C2A02A MVK.S2 0xffff8540,B3 80008534 02000068 MVKH.S1 0x0000,A4 80008538 01C0006A MVKH.S2 0x80000000,B3 8000853C 00000000 NOP 80008540 01C36028 MVK.S1 0xffff86c0,A3 80008544 01C00068 MVKH.S1 0x80000000,A3 80008548 000C1362 B.S2X A3 8000854C 01C2AC2A MVK.S2 0xffff8558,B3 80008550 01C0006A MVKH.S2 0x80000000,B3 80008554 00004000 NOP 3 80008558 0234C02A MVK.S2 0x6980,B4 8000855C 02C0006A MVKH.S2 0x80000000,B5 80008560 00100362 B.S2 B4 80008564 01C2BA2A MVK.S2 0xffff8574,B3 80008568 020000A8 MVK.S1 0x0001,A4 8000856C 01C0006A MVKH.S2 0x80000000,B3 80008570 00002000 NOP 2 80008574 00000290 B.S1 0x80008574 80008578 00008000 NOP 5 8000857C 00000000 NOP 程序放到內(nèi)部 00008700 c_int00: 00008700 07EDBE2A MVK.S2 0xffffdb7c,SP 00008704 0780006A MVKH.S2 0x0000,SP 00008708 07BF07A2 AND.S2 -8,SP,SP 0000870C 0701002A MVK.S2 0x0200,DP 00008710 0700006A MVKH.S2 0x0000,DP 00008714 020000FA ZERO.L2 B4 00008718 091003A2 MVC.S2 B4,FADCR 0000871C 0A1003A2 MVC.S2 B4,FMCR 00008720 0234802A MVK.S2 0x6900,B4 00008724 0200006A MVKH.S2 0x0000,B4 00008728 00100362 B.S2 B4 0000872C 02732828 MVK.S1 0xffffe650,A4 00008730 01C3A02A MVK.S2 0xffff8740,B3 00008734 02000068 MVKH.S1 0x0000,A4 00008738 0180006A MVKH.S2 0x0000,B3 0000873C 00000000 NOP &nbs |
|
| 13樓: | >>參與討論 |
| 作者: simple_head 于 2006/10/17 22:28:00 發(fā)布:
你的SDRAM讀寫有錯誤 我仔細看了你的disassembly, 發(fā)現(xiàn)除了地址80008524 的那行MVKH.S2 0x80000000,B5不對之外,還有80008508 07FF07A2 .word 0x07ff07a2也不對,對應的是00008708 07BF07A2 AND.S2 -8,SP,SP 比較: 80008508 07FF07A2 00008708 07BF07A2 其實指令機器碼只差了一個Bit。 而你發(fā)現(xiàn)的80008524 的那行MVKH.S2 0x80000000,B5同正確的指令機器碼也只差1個Bit(出去auto_init地址不同產(chǎn)生的另外一個Bit)。 由此推斷:還是你的SDRAM讀寫有錯誤! 降低SDRAM頻率再試! |
|
| 14樓: | >>參與討論 |
| 作者: polarstars 于 2006/10/18 11:25:00 發(fā)布:
感謝 simple_head 的大力幫助. 現(xiàn)在初步判斷為D22,D23兩根數(shù)據(jù)線短路了,當時測SDRAM時沒測到高位,所以才引出那么多莫名其妙的問題,真是硬件問題害死人呀,開發(fā)板已經(jīng)退回廠家更換了,同時謝謝那些關注本貼的朋友。 |
|
| 15樓: | >>參與討論 |
| 作者: simple_head 于 2006/10/18 11:54:00 發(fā)布:
你用的是6713dsk板子? 你用的是6713dsk板子? |
|
| 16樓: | >>參與討論 |
| 作者: polarstars 于 2006/10/18 12:52:00 發(fā)布:
我用的是北京一家公司出的6713開發(fā)板 |
|
| 17樓: | >>參與討論 |
| 作者: zhangsifu 于 2006/10/20 11:32:00 發(fā)布:
用loader程序 要用loader程序?qū)⒃?a target="_blank" href="http://m.58mhw.cn/stock-ic/FLASH.html">FLASH中的程序搬運到SDRAM,然后再運行。 我們就是這么做的。 |
|
| 18樓: | >>參與討論 |
| 作者: simple_head 于 2006/10/21 10:10:00 發(fā)布:
代碼放到外面SDRAM上,操心的事就多了 代碼放到外面SDRAM上,操心的事就多了。boot,cache,data讀寫速度等。樓主多多共享一些你的開發(fā)經(jīng)驗阿。 此處提一個問題: 當用 .cinit > MemSdram .const > MemSdram .SWITCH > MemSdram .text > MemSdram .pinit > MemSdram .cio > MemSdram .bss > MemSdram .tables > MemSdram .data > MemSdram .far > MemSdram .stack > MemSdram .sysmem > MemSdram 定義C的程序全部在外部時,同時又需要一部分C的程序在DSP內(nèi)部以保證最高的運行速度,該怎么辦? 我只會用一種方法,#pragma CODE_SECTION(XXXFunction, ".IRam") 但是這需要對每一個需要放到內(nèi)部的函數(shù)一一進行聲明。有沒有更簡單一點的方法? |
|
| 19樓: | >>參與討論 |
| 作者: sly1982 于 2006/10/22 22:29:00 發(fā)布:
一個設想 我有一個想法,是跟我的一個同事聊天的時候說起的 就是程序初始化之類的放在FLASH或者外部的SDRAM中 然后需要運行的話直接讀進來放在DSP內(nèi)部運行,這樣可以保證速度 但是一段時間就是一直運行程序的某一個部分,要想運行另外段的程序就需要再把需要運行的段程序搬移到內(nèi)部RAM中 只是想象,但是也覺得應該是可以辦到的,具體的怎么設置沒有實驗過 |
|
| 20樓: | >>參與討論 |
| 作者: lanmanck 于 2006/10/23 15:31:00 發(fā)布:
這個玩意兒 好像要手動利用memcopy這個函數(shù)進行程序搬移,2812的是這樣,6713應該也不能簡單通過cmd來設置吧? |
|
| 21樓: | >>參與討論 |
| 作者: DIY 于 2009/12/28 17:02:12 發(fā)布:
我現(xiàn)在用6713 固化程序 并在內(nèi)部RAM里運行沒問題了 我現(xiàn)在想讓程序在外部SDRAM里運行,在用hex6x 生成HEX文件時 出現(xiàn)了警告 section '.text' at 080000000h falls in unconfigured memory 0x080000000是我SDRAM的起始地址 這個錯誤應該怎么解決? |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |