使用RealViewMDK時(shí)常見(jiàn)的問(wèn)題(1)
作者:趙明,華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心講師
目前在市場(chǎng)上最常用的ARM編程工具無(wú)非是Real View MDK和IAR Embedded Workbench。
我個(gè)人覺(jué)得,目前IAR是比較成熟、穩(wěn)定、使用方便等優(yōu)點(diǎn),深受廣大嵌入式開(kāi)發(fā)者的喜愛(ài)。Real view MDK得到ARM公司的大力支持,功能很強(qiáng),也逐步完善起來(lái)。
使用Real view(以下省略為RV)學(xué)習(xí)ARM指令的時(shí)候,初學(xué)者在調(diào)試過(guò)程中,經(jīng)常會(huì)遇到類似于如下的錯(cuò)誤消息。
Error 65:access violation at 0xFFFFFFFC: no “write” permission
這個(gè)錯(cuò)誤一般在使用RV模擬器(使用’debug’的’Use simulator’模式)進(jìn)行調(diào)試時(shí)出現(xiàn)。
在發(fā)生這個(gè)錯(cuò)誤時(shí),觀察寄存器的話,會(huì)錯(cuò)誤消息中的地址正是SP(R13)的值。從此可以推測(cè),錯(cuò)誤就在進(jìn)行堆棧操作時(shí)發(fā)生。
那為什么進(jìn)行堆棧操作時(shí),發(fā)生錯(cuò)誤呢?因?yàn)椋F(xiàn)在使用的是模擬器,而不是真正的目標(biāo)板,所以對(duì)這些內(nèi)存區(qū)域沒(méi)有任何定義。
所以我們必須在模擬器中要將這個(gè)內(nèi)存地址段的屬性設(shè)置為可讀/可寫(xiě)。
下面,以S3C2410模擬器為例,說(shuō)明解決上述問(wèn)題的幾種方法:
第一種方法:打開(kāi)(project -> options..)工程的選項(xiàng)對(duì)話框,其中將’Debug’標(biāo)簽的’Dialog DLL’中的DLL文件名(默認(rèn)為DARMSS9.DLL)改成DARMST9.DLL
第二種方法:在ini file(.ini文件)中寫(xiě)入以下部分,表示這個(gè)內(nèi)存區(qū)域是可讀/可寫(xiě)/可執(zhí)行。
map 0xFFFFF000,0xFFFFFFFF read write exec
第三種方法:這是在調(diào)試過(guò)程中的修改方法,所以在每次運(yùn)行的時(shí)候,都要設(shè)置。
先進(jìn)入調(diào)試模式(crtl+F5),接下來(lái)在debug菜單下打開(kāi)memory_map對(duì)話框,在這個(gè)對(duì)話框中添加新的映射區(qū)域(map range)和它的屬性。
“本文由華清遠(yuǎn)見(jiàn)http://www.embedu.org/index.htm提供”
華清遠(yuǎn)見(jiàn)