音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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ù)
關(guān)于ARM程序在RAM中運行的問題
本人是菜鳥,現(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
留意中 我也正學(xué)著
 
3樓: >>參與討論
shanmu68
建議玩玩u-boot
 
4樓: >>參與討論
twentyone
re
LZ的想法應(yīng)該是可以實現(xiàn)的。關(guān)于中斷的疑問,你看看44B0的手冊,44B0提供了一種特殊的中斷模式。

5樓: >>參與討論
dayuszn
re
請問你用的是什么仿真器,最近剛學(xué),不懂如何燒寫程序,請多指教,謝謝

6樓: >>參與討論
kangxi612
不碧6分開存放
啟動代碼和應(yīng)用程序都是放在一起的,都是放在ROM中的,如果不是這樣的話,那么當(dāng)系統(tǒng)掉線后,里面的程序都會丟掉。只是在上電初始化后,可以由啟動代碼中的一段程序,自動將應(yīng)用程序拷貝到RAM中,以后的程序運行就是在RAM中進行的!

7樓: >>參與討論
rock6958
程序如何編譯呢?
若啟動代碼將程序拷貝到RAM中執(zhí)行,那編譯的時候應(yīng)該進行些設(shè)置吧,否則拷貝過去的程序好像不能正常執(zhí)行吧?比如絕對地址的跳轉(zhuǎn)、相對地址的尋址好像就會有問題,還望kangxi612詳細(xì)說明一下!

8樓: >>參與討論
computer00
如果你在KEIL的CRAM中,在這個函數(shù)背后加上__RAM就OK了~~~~
這樣編譯器會自動做相關(guān)處理。不知道ADS有沒有搞這一套…………

9樓: >>參與討論
rock6958
好像沒有
ADS就能設(shè)置RO和RW地址段,那怎么好實現(xiàn)呢?

10樓: >>參與討論
twentyone
RE
建議ROCK先了解程序的結(jié)構(gòu)。你可以參考ADS的LINKER GUIDE,你也可以到我的BLOG上下載4510的BOOTLOADER分析這篇文章。相信對你會很有幫助。

11樓: >>參與討論
rock6958
44B0X好像沒有remap咧
應(yīng)該是這樣,4510是把程序拷貝到ram中后,再remap,這樣ram就變成FLASH,所以程序可以照舊執(zhí)行。不過44b0x好像沒有remap,所以實現(xiàn)起來好像就很麻煩。

12樓: >>參與討論
twentyone
RE
4510和44B0差別很大,我的意思是你應(yīng)該先了解程序結(jié)構(gòu),這樣,你才能在你的44B0上寫程序。

13樓: >>參與討論
rock6958
問題
twentyone兄,我有個開發(fā)板,程序都研究的差不多了,它有個BIOS源代碼,功能還不少,不過它的程序從頭到尾都是在FLASH里面運行的,沒有我關(guān)心的東西;提供的其他的簡單例子都是在ram里運行的,全是debug狀態(tài)。我關(guān)心的從FLASH啟動,然后切換到ram里運行,一直沒找到頭緒,也許原來做單片機比較多,思維沒轉(zhuǎn)換過來吧。不知twentyone兄有沒有典型的程序源碼發(fā)給我看看,這樣就容易理解了,郵箱是rock6958@126.com,多謝!

14樓: >>參與討論
twentyone
To rock
我沒有用過44B0,所以沒有相關(guān)的代碼可以給你。
我感覺你應(yīng)該在仔細(xì)的看BIOS的代碼,如果BIOS的功能很強大,例如通過TFTP下載等,肯定是要用到SDRAM的。你仔細(xì)分析,肯定可以學(xué)到不少東西。

另外,仔細(xì)看ADS的文檔,里面有很多東西對開發(fā)都是很有幫助的。包括程序的結(jié)構(gòu),LINKER的內(nèi)部變量等。

15樓: >>參與討論
深思
看看ADS的鏈接幫助,使用分散加載文件定義加載區(qū)和運行區(qū)即可。
在我blog里面有,參考

16樓: >>參與討論
yyccaa
ro,rw只是最簡單的情況
分散加載才是能適應(yīng)各種應(yīng)用的方法,ads的分散加載非常靈活。

17樓: >>參與討論
rock6958
程序
深思,請問你的bios程序在哪里?可以發(fā)一份給我么?

18樓: >>參與討論
jimsboy
建議拿個程序看一下
把人家的拿來改一改,就會了。
我就是這樣做的。雖然不能很懂,但我很知道怎么把我要的東西給加到RAM中去

19樓: >>參與討論
luhuaren
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
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請教,芯片選型
s3c44b0x writeflash 問題
ARM io口的問題?
ADS1217問題
PD6710有替換芯片嗎?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號