編譯u-boot時,在Makefile 的ALL變量最后加上$(obj)u-boot.dis,會編譯出u-boot.dis,u-boot.dis是通過arm-linux-objdum –d 生成u-boot的每一條指令的反匯編。
33d80080: e59f13f4 ldr r1, [pc, #1012]
33d80084: e59f03f4 ldr r0, [pc, #1012]
33d80088: e5801000 str r1, [r0]
33d8008c: eb000015 bl 33d800e8
………
33d800e8 :
33d800e8: e3a00000 mov r0, #0 ; 0x0
上面的bl指令,從表面上看 bl 33d800e8,好像是跳到了絕對地址0x33d800e8處,此時是運行在絕對0x0地址處,然后用bl一下子跳到了內存地址0x33d800e8處,可是此時內存都還沒有初始化就運行,這怎么可能?
這好像是很矛盾,但仔細分析一下,原來是這樣的:
將 eb000015 轉為二進制:
1110 1011 0000 0000 0000 0000 0001 0101
看一下它的具體含義,下面是b/bl 指令的格式-- 出自《ARM Instruction Set》
31-28 –> cond
27-25 –> 101
24 --> L
23-0 –> offset
"Branch instructions contain a signed 2's complement 24 bit offset. This is shifted left two bits, sign extended to 32 bits, and added to the PC. The instruction can therefore specify a branch of +/- 32Mbytes. The branch offset must take account of the prefetch operation, which causes the PC to be 2 words (8 bytes) ahead of the current instruction. Branches beyond +/- 32Mbytes must use an offset or absolute destination which has been previously loaded into a register. In this case the PC should be manually saved in R14 if a Branch with Link type operation is required.“ 出自《ARM Instruction Set》
1110 –> cond –> always 無條件跳轉
27-25 –> 說明是B 跳轉指令
24 –> L位 Branch with Link, 跳轉時將下一條指令的地址拷貝到R14(lr)中
23-0 –> offset=0x15
執行bl后:pc = 當前pc + ( offset<<2 + 8 ) = 0x8c+(0x15<<2+8)= 0xE8
跳到偏移地址為0xE8的地方,也就是 cpu_init_crit函數中。
上一篇:TQ2440移植u-boot-2010.06-rc1---1調試的思路
下一篇:TQ2440之uboot---6.運行U-boot目錄examples中的hello_world.c
推薦閱讀
史海拾趣
隨著環保意識的日益增強,Captive Fastener公司積極響應國家環保政策,推動生產方式的綠色轉型。公司引進先進的環保生產設備和技術,減少生產過程中的污染排放。同時,公司還研發出可回收再利用的緊固件產品,為電子行業的可持續發展做出了貢獻。
DAYLIGHT公司成立于XX年,由一群富有遠見卓識的電子工程師和投資者共同創立。當時,電子行業正經歷著快速的技術革新,市場對高效、可靠的電子產品需求日益增加。DAYLIGHT公司憑借其獨特的技術優勢和創新能力,成功開發出一系列高性能的電子產品,迅速在市場中立足。
近年來,隨著數字化技術的快速發展,DAYLIGHT公司也積極擁抱數字化轉型。公司加強了與互聯網、大數據、人工智能等技術的融合,推出了一系列智能化、數字化的電子產品和服務。這些新產品和服務的推出不僅提升了DAYLIGHT的市場競爭力,也為其未來的發展奠定了堅實的基礎。同時,DAYLIGHT還積極關注未來電子行業的發展趨勢和技術創新,為公司的長期發展制定了明確的戰略規劃。
請注意,這些故事是基于假設和一般行業趨勢虛構的,并不代表DAYLIGHT公司的實際發展歷程。如果您需要更具體的信息,建議直接聯系DAYLIGHT公司或查閱相關的行業資料。
在快速發展的同時,Daco也始終關注環保和可持續發展。公司采用了環保的生產工藝和材料,確保生產過程中的廢棄物和排放物符合環保要求。同時,Daco也積極參與環保公益活動,推動半導體行業的綠色發展。這種關注環保和可持續發展的做法,不僅提升了Daco的品牌形象,也為公司的長遠發展奠定了堅實的基礎。
在電子產品行業,產品質量和客戶服務是企業生存和發展的關鍵。Barnbrook深知這一點,因此在發展過程中始終堅持嚴格的品質管理和優質的客戶服務。公司建立了完善的質量管理體系,對每一道工序都進行嚴格把關,確保產品的穩定性和可靠性。同時,Barnbrook也重視客戶反饋和需求,不斷優化產品和服務,贏得了客戶的信任和好評。
為了進一步擴大市場份額,EBG RESISTORS LLC公司開始實施國際化戰略。他們積極參加國際電子展會,與全球各地的客戶建立聯系。同時,公司還積極尋求與國際知名企業的合作,共同開發新產品。在XXXX年,公司成功打入歐洲市場,并在隨后幾年內陸續進入亞洲和北美市場。
大家好,我第一次用單片機而且是STC系列中STC12C4052AD單片機,利用這個單片機做充電器用,里面有A/D轉換,有PWM口,我覺得性能蠻多的,可是,在編寫程序方面我有點困難,希望和各位交流一下,也麻煩各位指點一下。謝謝!我的QQ:31800252… 查看全部問答∨ |
|
由“TI Stellaris系列斷貨之說”想到的...... 小弟最近關注流明系列的產品,但是百度了下,得到了一些評論,不知真假,所以想請大家聊聊: 小妹前不久在南京周立功買了幾片LM3S6911玩以太網,當時是48元/片拿的。后來玩出心得打算在公司的新項目中大量應用時,確被告知沒貨了,可憐電路板都已 ...… 查看全部問答∨ |
|
用C51程序來實現一個3-5階的IIR數字濾波器,不知道有沒有人之前做過類似的呢?是否可行? 本來基于DSP,或FPGA做的話應該比較容易實現,但老板比較摳門,控制成本。 想知道用51單片機能不能干這個活。 濾波器基本參數: 采樣率:100HZ 低通濾 ...… 查看全部問答∨ |
C2000的DSP是不是比C5000的低級?A/D,FFT實驗用5000是不是更好? C2000DSP有C5000不能做的實驗嗎?… 查看全部問答∨ |
摘要 在Linux中會遇到由于文件系統損壞,需要人工修復而導致系統無法正常啟動的現象。本文采用Linux初始化內存盤(INITRD)技術,并把內存的一部分作為Linux的根目錄,每次啟動把完整的文件系統解壓到這里,避免了系統從損壞的文件系統啟動。這不 ...… 查看全部問答∨ |
replyreload += \',\' + 732983; 簡述 GPIO是STM32最常用的設備之一。STM32可以提供最多達80個雙向IO口(視型號而定),他們分別分布在A-E五個端口中。每個端口有16個IO,每個IO口都可以承受最大為5V壓降。通過GPIO的配置寄存器,我們可以把GPI ...… 查看全部問答∨ |