国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

ARM入門(mén)筆記(2)

發(fā)布時(shí)間:2010-8-26 17:23    發(fā)布者:絕對(duì)好文
關(guān)鍵詞: ARM入門(mén)筆記
第二章 我的第一個(gè)實(shí)驗(yàn) ――將程序執(zhí)行到C文件的main函數(shù)

二.實(shí)驗(yàn)?zāi)康?br />
運(yùn)用ADS編寫(xiě)一個(gè)小程序,使程序能夠從起始的匯編代碼運(yùn)行到C程序的main()函數(shù)(這也可稱作非常簡(jiǎn)單的起動(dòng)代碼),并通過(guò)仿真器連接目標(biāo)板,最終能夠在AT91SAM7S64里正確運(yùn)行。

三.實(shí)驗(yàn)程序和參數(shù)設(shè)置

1>連接器的選項(xiàng)設(shè)置

選項(xiàng)設(shè)置如圖2-1所示。因?yàn)樵贏T91SAM7S64中FLASH存儲(chǔ)器的地址是以0x0開(kāi)始,而SRAM的地址是以0x00200000開(kāi)始,所以我將下圖中的RO Base和RW Base分別設(shè)置成了0x0和0x00200000。其它設(shè)置請(qǐng)參考有關(guān)書(shū)籍。
            

圖2-1. 選項(xiàng)設(shè)置圖

2>啟動(dòng)代碼

ARM應(yīng)用系統(tǒng)中,芯片復(fù)位后,在進(jìn)入C語(yǔ)言的main()函數(shù)前,都要執(zhí)行一段啟動(dòng)代碼。該代碼一般都是用匯編語(yǔ)言編寫(xiě),用來(lái)完成系統(tǒng)運(yùn)行環(huán)境和應(yīng)用程序的初始化,詳情請(qǐng)參考有關(guān)書(shū)籍。由于本實(shí)驗(yàn)的目的很簡(jiǎn)單,就是想讓程序復(fù)位后,進(jìn)入main()函數(shù),所以有些初始化代碼盡量精簡(jiǎn),留下了下述代碼。另外,__main是C語(yǔ)言的內(nèi)部庫(kù)函數(shù),可以在進(jìn)入用戶main()之前完成內(nèi)部RAM的初始化工作,類(lèi)似KeilC51中的startup.a51。當(dāng)執(zhí)行完__main這段代碼后,再跳轉(zhuǎn)到main()函數(shù)。

AREA init,CODE,READONLY
CODE32
Mode_USR  EQU  0x10 ;CPSR中各種處理器模式對(duì)應(yīng)的控制位
I_Bit   EQU  0x80 ;CPSR中的中斷禁止位
F_Bit   EQU  0x40
USR_Stack  EQU  0x00203000 ;定義RAM的最高地址,無(wú)重映射
ENTRY
                B           InitReset        ; 0x00 Reset handler
undefvec         B           undefvec        ; 0x04 Undefined Instruction
swivec           B           swivec          ; 0x08 Software Interrupt
pabtvec          B           pabtvec          ; 0x0C Prefetch Abort
dabtvec          B           dabtvec          ; 0x10 Data Abort
rsvdvec          B           rsvdvec          ; 0x14 reserved
irqvec           B   irqvec   ; 0x18 IRQ
fiqvec      B   fiqvec        ; 0x1c FIQ
InitReset
MSR CPSR_c,#Mode_USR | I_Bit | F_Bit ;改成用戶模式且禁止IRQ和FIQ中斷
LDR SP,=USR_Stack
IMPORT  __main                  
b         __main  ;跳轉(zhuǎn)到__main執(zhí)行,它位于C運(yùn)行時(shí)庫(kù)中                                
END
3>C語(yǔ)言主函數(shù)
在C語(yǔ)言主函數(shù)中做了一個(gè)死循環(huán),如下述所示。
int main(void)
{
  while (1);
}

四.出現(xiàn)的問(wèn)題與解決方法

當(dāng)完成上述操作后,先用軟件仿真,很快達(dá)到了目的,但將程序通過(guò)仿真器在目標(biāo)板運(yùn)行時(shí)出現(xiàn)了下述問(wèn)題。

1> 當(dāng)執(zhí)行單步運(yùn)行時(shí),PC一直停留在0x0處,而且Debug Log窗口中顯示“RDI Warning 00148: Can't set point”。
原因是仿真器在ROM中設(shè)置的斷點(diǎn)數(shù)是有限的,且單步運(yùn)行時(shí)內(nèi)部還要占用斷點(diǎn)。可以使用“Option->Config Processor”打開(kāi)“Processor Properties-ARM7TDMI”窗口,且按照下圖設(shè)置以關(guān)斷相的斷點(diǎn)。


圖2-2

2> 裝載的代碼與實(shí)踐程序不一樣

原因是由于程序沒(méi)有裝載到AT91SAM7S64的FLASH ROM里,在調(diào)試器中顯示的是FLASH ROM中原先就有的程序。因?yàn)樵谶B接器的選項(xiàng)設(shè)置中,將RO Base和Image entry point指向了0地址,而在AT91SAM7S64的這段空間為FLASH ROM區(qū),而仿真器不能直接將代碼下載到FLASH ROM里。用仿真器只能將代碼下載到AT91SAM7S64的內(nèi)部SRAM里進(jìn)行調(diào)試,必須將ARM Linker->Output->Simple image->RO Base和Image entry point的0,改成SRAM的地址0x002000000。

3>在軟件仿真的情況下,執(zhí)行“B __main”指令,能使程序跳到C文件的main函數(shù),但用硬件仿真時(shí),還沒(méi)執(zhí)行到main函數(shù)時(shí)就進(jìn)入了異常中斷。

原因是執(zhí)行“B __main”指令后,程序先跳到__main庫(kù)函數(shù)的入口,再進(jìn)行一些初始化操作,最后再跳入用戶的main函數(shù)。但在初始化過(guò)程中,由于堆棧或其它原因造成程序出錯(cuò)。有兩種方法可以解決這個(gè)問(wèn)題。第一:將“B __main”指令直接改成“B main”,使程序不進(jìn)行初始化而直接跳入用戶的main()函數(shù)。第二:合理初始化堆棧。由于考慮到剛接觸ARM和將問(wèn)題簡(jiǎn)單化,我選擇了第一種方法。

五.總結(jié)

1> 在用仿真器時(shí),必須將程序下載到AT91SAM7S64的內(nèi)部SRAM中,而不是Flash ROM。

2> 從匯編代碼進(jìn)入C文件函數(shù)時(shí),可以直接使用C語(yǔ)言中的標(biāo)號(hào)(可參考書(shū)中混合編程部分),如執(zhí)行“B main”則直接跳到C語(yǔ)言的main()函數(shù)入口。

3> 在起動(dòng)代碼中,可以調(diào)用__main()庫(kù)函數(shù)進(jìn)行存儲(chǔ)器的初始化,也可以自己編寫(xiě)更有效的代碼進(jìn)行初始化,在初始化后就可以使用“B __main”指令直接跳轉(zhuǎn)到C的main()函數(shù)。
本文地址:http://m.qingdxww.cn/thread-23766-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
長(zhǎng)話短說(shuō) 發(fā)表于 2010-9-4 11:25:56
謝了
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開(kāi)發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開(kāi)發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色香视频首页 | 99久久久久国产 | 国产freexxxx性播放麻豆 | 成人国产精品一区二区网站 | 婷婷丁香久久 | 国产成人午夜性a一级毛片 国产成人午夜视频 | 亚洲精品高清国产一久久 | 国产亚洲第一精品社区麻豆 | 97精品免费视频 | 四虎永久影院永久影库 | 青青草原国产在线观看 | 91视频下载入口 | 日韩欧美亚洲国产高清在线 | 三分野电视剧手机免费观看 | 免费的黄色片视频 | 免费欧洲毛片a级视频 | 国产精品嘿咻嘿咻在线播放 | 黑人巨大精品欧美一区二区区 | 国产激情在线观看完整流畅 | 四虎国产精品永久地址49 | 精品在线观看免费 | 我的女儿韩国电视剧在线观看 | 亚色最新网址 | 视频精品一区二区三区 | 欧美一级做性受 | 五月天精品视频播放在线观看 | 一级成人a免费视频 | 国产日韩在线 | 欧美国产日本精品一区二区三区 | 成年女人视频播放免费观看 | 国产精品乡下勾搭老头 | 国产乱码一区二区三区四区 | www.99精品视频在线播放 | 久久成人激情视频 | 内裤奇缘免费未删减版 | 五月天男人天堂 | 插菊花综合1 | 99精品99 | 99热最新网址获取 | 二级毛片免费观看全程 | 欧美自拍区 |