|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關(guān)于ARM程序在RAM中運行的問題 |
| 作者:rock6958 欄目:ARM技術(shù) |
本人是菜鳥,現(xiàn)在正在學(xué)習(xí)三星的44B0X,以后FLASH的速度較慢,一般商用的程序都會在ram中運行,ARM復(fù)位后肯定是從0地址開始執(zhí)行代碼,所以0地址應(yīng)該是FLASH,啟動初始化應(yīng)該在FLASH中執(zhí)行,之后將應(yīng)用程序拷貝到ram中,然后到ram中執(zhí)行,請問各位網(wǎng)友,這樣的程序結(jié)構(gòu):啟動代碼在FLASH中,運行代碼在ram中,如何進行編譯設(shè)置?如何燒寫FLASH呢? 或者是不是分開寫2個程序來實現(xiàn),一個是啟動時用,負(fù)責(zé)啟動初始化等工作,編譯時直接指定在FLASH區(qū);另一個是應(yīng)用程序部分,編譯時指定在ram區(qū)。不過這樣中斷就比較麻煩了,也不知對不對? 或者大家有更好的程序結(jié)構(gòu)的設(shè)計嗎? 本人很迷惑,還請大家多多指教! |
| 2樓: | >>參與討論 |
| 作者: ljxh401 于 2006/7/28 8:40:00 發(fā)布:
留意中 我也正學(xué)著 |
|
| 3樓: | >>參與討論 |
| 作者: shanmu68 于 2006/7/28 9:30:00 發(fā)布:
建議玩玩u-boot |
|
| 4樓: | >>參與討論 |
| 作者: twentyone 于 2006/7/28 10:14:00 發(fā)布:
re LZ的想法應(yīng)該是可以實現(xiàn)的。關(guān)于中斷的疑問,你看看44B0的手冊,44B0提供了一種特殊的中斷模式。 |
|
| 5樓: | >>參與討論 |
| 作者: dayuszn 于 2006/7/28 10:28:00 發(fā)布:
re 請問你用的是什么仿真器,最近剛學(xué),不懂如何燒寫程序,請多指教,謝謝 |
|
| 6樓: | >>參與討論 |
| 作者: kangxi612 于 2006/7/28 11:25:00 發(fā)布:
不碧6分開存放 啟動代碼和應(yīng)用程序都是放在一起的,都是放在ROM中的,如果不是這樣的話,那么當(dāng)系統(tǒng)掉線后,里面的程序都會丟掉。只是在上電初始化后,可以由啟動代碼中的一段程序,自動將應(yīng)用程序拷貝到RAM中,以后的程序運行就是在RAM中進行的! |
|
| 7樓: | >>參與討論 |
| 作者: rock6958 于 2006/7/28 19:41:00 發(fā)布:
程序如何編譯呢? 若啟動代碼將程序拷貝到RAM中執(zhí)行,那編譯的時候應(yīng)該進行些設(shè)置吧,否則拷貝過去的程序好像不能正常執(zhí)行吧?比如絕對地址的跳轉(zhuǎn)、相對地址的尋址好像就會有問題,還望kangxi612詳細(xì)說明一下! |
|
| 8樓: | >>參與討論 |
| 作者: computer00 于 2006/7/28 19:48:00 發(fā)布:
如果你在KEIL的CRAM中,在這個函數(shù)背后加上__RAM就OK了~~~~ 這樣編譯器會自動做相關(guān)處理。不知道ADS有沒有搞這一套………… |
|
| 9樓: | >>參與討論 |
| 作者: rock6958 于 2006/7/28 20:04:00 發(fā)布:
好像沒有 ADS就能設(shè)置RO和RW地址段,那怎么好實現(xiàn)呢? |
|
| 10樓: | >>參與討論 |
| 作者: twentyone 于 2006/7/28 20:09:00 發(fā)布:
RE 建議ROCK先了解程序的結(jié)構(gòu)。你可以參考ADS的LINKER GUIDE,你也可以到我的BLOG上下載4510的BOOTLOADER分析這篇文章。相信對你會很有幫助。 |
|
| 11樓: | >>參與討論 |
| 作者: rock6958 于 2006/7/28 20:56:00 發(fā)布:
44B0X好像沒有remap咧 應(yīng)該是這樣,4510是把程序拷貝到ram中后,再remap,這樣ram就變成FLASH,所以程序可以照舊執(zhí)行。不過44b0x好像沒有remap,所以實現(xiàn)起來好像就很麻煩。 |
|
| 12樓: | >>參與討論 |
| 作者: twentyone 于 2006/7/28 21:14:00 發(fā)布:
RE 4510和44B0差別很大,我的意思是你應(yīng)該先了解程序結(jié)構(gòu),這樣,你才能在你的44B0上寫程序。 |
|
| 13樓: | >>參與討論 |
| 作者: rock6958 于 2006/7/28 22:31:00 發(fā)布:
問題 twentyone兄,我有個開發(fā)板,程序都研究的差不多了,它有個BIOS源代碼,功能還不少,不過它的程序從頭到尾都是在FLASH里面運行的,沒有我關(guān)心的東西;提供的其他的簡單例子都是在ram里運行的,全是debug狀態(tài)。我關(guān)心的從FLASH啟動,然后切換到ram里運行,一直沒找到頭緒,也許原來做單片機比較多,思維沒轉(zhuǎn)換過來吧。不知twentyone兄有沒有典型的程序源碼發(fā)給我看看,這樣就容易理解了,郵箱是rock6958@126.com,多謝! |
|
| 14樓: | >>參與討論 |
| 作者: twentyone 于 2006/7/28 23:03:00 發(fā)布:
To rock 我沒有用過44B0,所以沒有相關(guān)的代碼可以給你。 我感覺你應(yīng)該在仔細(xì)的看BIOS的代碼,如果BIOS的功能很強大,例如通過TFTP下載等,肯定是要用到SDRAM的。你仔細(xì)分析,肯定可以學(xué)到不少東西。 另外,仔細(xì)看ADS的文檔,里面有很多東西對開發(fā)都是很有幫助的。包括程序的結(jié)構(gòu),LINKER的內(nèi)部變量等。 |
|
| 15樓: | >>參與討論 |
| 作者: 深思 于 2006/7/29 21:44:00 發(fā)布:
看看ADS的鏈接幫助,使用分散加載文件定義加載區(qū)和運行區(qū)即可。 在我blog里面有,參考 |
|
| 16樓: | >>參與討論 |
| 作者: yyccaa 于 2006/7/29 22:38:00 發(fā)布:
ro,rw只是最簡單的情況 分散加載才是能適應(yīng)各種應(yīng)用的方法,ads的分散加載非常靈活。 |
|
| 17樓: | >>參與討論 |
| 作者: rock6958 于 2006/8/1 19:22:00 發(fā)布:
程序 深思,請問你的bios程序在哪里?可以發(fā)一份給我么? |
|
| 18樓: | >>參與討論 |
| 作者: jimsboy 于 2006/8/1 20:53:00 發(fā)布:
建議拿個程序看一下 把人家的拿來改一改,就會了。 我就是這樣做的。雖然不能很懂,但我很知道怎么把我要的東西給加到RAM中去 |
|
| 19樓: | >>參與討論 |
| 作者: luhuaren 于 2006/8/3 14:02:00 發(fā)布:
RE 如果用ADS編譯器那么,可以有 SIMPLE 和SEATTERED兩種方式來選擇連接操作 SIMPLE方式下,你可以將RO,和RW設(shè)置為你需要的地址.ZI段一般跟在RW后面,不必理會. 在SEATTERED方式下,你需要配置一個文本文件來描述 加載時域和運行時域,具體格式可以去網(wǎng)上搜一下,我當(dāng)時用的關(guān)鍵字是"ADS分散加載"就找到一些相關(guān)的文章 在這里 我貼上一段 ... 注:以下是別人寫的文章,我在這里貼上..,希望大家多交流,因為這個東西我自己現(xiàn)在也沒研究太透徹,希望大家多多探討,在此,對本文的作者"tong"表示感謝! tong 發(fā)表于 2006-5-22 9:44:24 ADS下的分散加載文件應(yīng)用實例 load_region_NAME start_address | "+"offset [attributes] [max_size]{ execution_region_NAME start_address | "+"offset [attributes][max_size] { module_select_pattern ["(" ("+" input_section_attr | input_section_pattern) (][","] "+" input_section_attr | "," input_section_pattern)) * ")"] }} 加載區(qū)(load_region):指用來保存永久性數(shù)據(jù)(程序和只讀變量)的區(qū)域;執(zhí)行區(qū)(execution_region):程序執(zhí)行時所表現(xiàn)出來的區(qū)域;程序執(zhí)行時,從加載區(qū)域?qū)?shù)據(jù)復(fù)制到執(zhí)行區(qū); load_region_NAME(加載區(qū)域名): 用于Linker區(qū)別不同的加載區(qū)域,最多31個字符;start_address:起始地址;+offset:前一個加載區(qū)域尾地址+offset,做為當(dāng)前的起始地址,且offset為0或4的倍數(shù);attributes: PI 與地址無關(guān) RELOC 重新部署 OVERLAY 覆蓋,允許多個可執(zhí)行區(qū)域在同一個地址,ADS不支持 ABSOLUTE 絕對地址(默認(rèn))max_size:該加載區(qū)域的大; execution_region_NAME:執(zhí)行區(qū)域名;start_address:鏈接是目標(biāo)存放的地址,必須字對齊;+offset:同上;attributes: PI 與地址無關(guān) OVERLAY 覆蓋 ABSOLUTE 絕對地址(默認(rèn)) FIXED 固定地址 UNINIT 不用初始化該區(qū)域的ZI段 module_select_pattern:目標(biāo)文件濾波器,支持通配符“*”和“?”;*.o匹配所有目標(biāo),* (或“.ANY”)匹配所有目標(biāo)文件和庫。input_section_attr:每個input_section_attr必須跟隨在“+”后;且大小寫不敏感; RO-CODE或CODE RO-DATA或CONST RO或TEXT, selects both RO-CODE and RO-DATA RW-DATA RW-CODE RW或DATA, selects both RW-CODE and RW-DATA ZI或BSS ENTRY, that is a section containing an ENTRY point. FIRST,用于指定存放在一個執(zhí)行區(qū)域的第一個或最后一個區(qū)域 LAST,同上input_section_pattern:段名; 匯編中指定段: AREA vectors, CODE, READONLYC中指定段:#pragma arm section [sort_type][[=]"NAME"]] [,sort_type="NAME"]*sort_type: code rwdata rodata zidata如果“sort_type”指定了但沒有指定“NAME”,那么之前的修改的段名將被恢復(fù)成默認(rèn)值。#pragma arm section將恢復(fù)所有段名為默認(rèn)值。 一般應(yīng)用:#pragma arm section rodata = "SRAM", code ="SRAM".此間的“rodata”和“code”將定位在“SRAM”段中。#pragma arm section 程序中對某區(qū)域的引用方法:Load$$region_NAME$$Base Load address of the region.Image$$region_NAME$$Base Execution address of the region.Image$$region_NAME$$Length Execution region length in bytes (multiple of 4).Image$$region_NAME$$Limit Address of the byte beyond the end of the execution region. Image$$region_NAME$$ZI$$Base Execution address of the ZI OUTPUT section in this region.Image$$region_NAME$$ZI$$Length Length of the ZI OUTPUT section in bytes (multiple of 4).Image$$region_NAME$$ZI$$Limit Address of the byte beyond the end of the ZI OUTPUT sectionin the execution region. SectionName$$Base &nbs |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |