娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月20日(星期五)

正在發生

2021年12月20日 | tiny4412 裸機程序 六、重定位代碼到IRAM+0x8000【轉】

發布者:vettykatty 來源: eefocus關鍵字:tiny4412  裸機程序  重定位代碼  IRAM 手機看文章 掃描二維碼
隨時隨地手機看文章

一、重定向

對于程序而言,我們需要理解兩個概念,一是程序當前所處的地址,即程序在運行時,所處的當前地址;二是程序的鏈接地址,即程序運行時應該位于的運行地址。編譯程序時,可以指定程序的鏈接地址。對于Tiny4412而言,啟動時只會從MMC/sd等啟動設備中拷貝前16K的代碼到IRAM中,那么當我們的程序超過16K怎么辦?那就需要我們在前16K的代碼中將整個程序完完整整地拷貝到DRAM等其他更大存儲空間,然后再跳轉到DRAM中繼續運行我們的代碼,這個拷貝然后跳轉的過程就叫重定位。


本章中我們主要學習如何重定位,但是并不會涉如何使用到DRAM,而是簡單地將代碼從IRAM的0x02020010處拷貝到IRAM的0x02028000處,然后跳轉到0x02028000處繼續運行我們的代碼。


二、程序說明

完整代碼見目錄5_link_0x8000,該目錄下的代碼與上一章的代碼的差別在于start.S和使用了

鏈接腳本link.lds,我們首先分析link.lds。


1. link.lds

什么是鏈接腳本?鏈接腳本就是程序鏈接時的參考文件,其主要目的是描述如何把輸入文件中的段(SECTION)映射到輸出文件中,并控制輸出文件的存儲布局。鏈接腳本的基本命令式SECTIONS命令,一個SECTIONS命令內部包含一個或多個段,段(SECTION)是鏈接腳本的基本單元,它表示輸入文件中的某個段是如何放置的。

鏈接腳本的標準格式如下:

SECTIONS

{

sections-command

sections-command

}

下面我們配合link.lds進行具體講解:

SECTIONS

{

. = 0x02028000;

.text : {

start.o

* (.text)

}

.data : {

* (.data)

}

bss_start = .;

.bss : {

* (.bss)

}

bss_end = .;

}

1)  在鏈接腳本中,單獨的點號(.)代表了當前位置,. =0x02028000;表示程序的鏈接地址是00x02028000;

2)  link.lds中的.text 、 .data 、 .bss分別是text段、data段、bss段的段名(這些段名并不是固定的,是可以隨便起的)。.text 段包含的內容是start.o 和其余代碼中所有的text段;.data段包含的內容是代碼中所有的data段;.bss段包含的內容是代碼中所有的bss段。

3)  bss_start和bss_end保存的是bss段的起始地址和結束地址,在start.S中會被用到。

下面解釋一下什么是data、text、bss段:

1)  data段:數據段(datasegment)通常是指用來存放程序中已初始化的全局變量的一塊內存區域。數據段屬于靜態內存分配。

2)  text段:代碼段通常是指用來存放程序執行代碼的一塊內存區域。這部分區域的大小在程序運行前就已經確定,并且內存區域通常屬于只讀,某些架構也允許代碼段為可寫,即允許修改程序。在代碼段中,也有可能包含一些只讀的常數變量,例如字符串常量等。

3)  bss段:指用來存放程序中未初始化的全局變量的一塊內存區域。BSS是英文BlockStarted by Symbol的簡稱。當我們的程序有全局變量是,它是放在bss段的,由于全局變量默認初始值都是0,所有我們需要手動清bss段。


2. start.S

在start.S中,我們初始化時鐘后,增加了3個步驟:

第一步重定位,代碼如下:

// _start當前所位于的地址

adr r0, _start  

// _start的鏈接地址

ldr r1, =_start  

ldr r2, =bss_start

cmp r0, r1

beq clean_bss

copy_loop:

ldr r3, [r0], #4

str r3, [r1], #4

cmp r1, r2

bne copy_loop

首先需要知道的是,adr指令獲取的值是代碼當前位于的地址,而ldr指令獲取的值是代碼的鏈接地址。再來看代碼,代碼里首先獲得_start標號的當前地址(即0x02020010),然后獲取_start標號的鏈接地址(即0x02028000),因為bin文件中不需要保存bss段,所有拷貝的代碼長度為bss_start的運行地址-_start的運行地址,使用copy_loop進行拷貝。

 

第二步清bss,代碼如下:

ldr r0, =bss_start        

ldr r1, =bss_end

cmp r0, r1

beq run_on_dram

mov r2, #0

clear_loop:

str r2, [r0], #4

cmp r0, r1

bne clear_loop

首先獲得bss段的起始地址(即bss_start),然后獲得bss段的結束地址(即bss_end),最后使用clear_loop將bss段所位于的內存清0,bss_start和bss_end的定義位于link.lds。

第三步跳轉,代碼如下:

run_on_dram:   

ldr pc, =main

由于ldr 指令獲取的是main函數的鏈接地址,所以執行ldrpc, =main 后,程序就跳轉到

0x02020000+main函數的offset的地址處了。


三、完整的燒寫過程

已將SD卡插入電腦,假設Linux識別了SD卡,其識別號為sdb。執行下面命令:

# chmod 777 –R 5_link_0x8000

# cd 5_link_0x8000

# make

# cd sd_fuse

# make

# ./ fast_fuse /dev/sdb


四、上電實驗

將sd卡插入Tiny4412中,選擇sd卡啟動,然后上電,可以看到以下現象:

LED正常閃爍,該現象與前面章節的代碼的運行效果一模一樣,但是程序的運行過程卻有了很大的區別。通過本章的學習,我們已經知道了如何對代碼進行重定位,這為我們下一章節將代碼重定位到DRAM奠定了基礎。

關鍵字:tiny4412  裸機程序  重定位代碼  IRAM 引用地址:tiny4412 裸機程序 六、重定位代碼到IRAM+0x8000【轉】

上一篇:Tiny4412 開發板 編譯環境搭建【轉】
下一篇:tiny4412 裸機程序 七、重定位代碼到DRAM

推薦閱讀

美國存儲芯片企業美光第一季(9~11月)的銷售額遠低于預期,在DRAM、NAND閃存等價格下降的狀況下,美光首席執行長(CEO)甚至直接提出需要減產,隨著三大存儲器制造商美光的業績惡化,外界也憂慮韓國三星電子和SK海力士第四季的業績不佳。美光在18日(當地時間)發表了今年第一季(9月~11月)的銷售報告,銷售額為79.1億萬美元,雖然比去年同期增長16%...
自從養貓之后,每天最煩惱的事情莫過于清理毛孩子每天掉落的毛發。精力旺盛的它每天在房間內里跑來跑去,導致各個角落都散落著從身上掉落的毛發。但這又怎么能怪它呢,畢竟這是它的天性,而將它帶回家的時候就已經考慮好這些問題,想要讓它在陪伴你的左右的同時,那么你必須接受它的這些“小毛病”。為此,我特意選購了一臺石頭掃地機器人T6,幫助我打掃...
91Mobiles 剛剛在美國聯邦通訊會(FCC)網站上發現了三星 Galaxy A32 5G 智能機的身影,并且揭示了該機的一些規格,比如支持 5G 移動網絡、雙頻 Wi-Fi、以及 15W 快速充電。處理器方面,預計三星會在 Galaxy A32 5G 機型上使用聯發科的天璣(Dimensity)系列芯片組。  盡管 5G 智能機的價格還有點高高在上,但在小米、Realme、...
艾邁斯歐司朗推出全球超小多區dToF模塊,實現高精度測距艾邁斯歐司朗的新型直接飛行時間(dToF)模塊集成了光源、探測器和光學器件;TMF8820、TMF8821和TMF8828支持目標區域的多區檢測,實現高精確測量結果;區域范圍內多目標檢測實現最遠距離5米;目標應用包括智能手機中的激光檢測自動對焦(LDAF)、個人電腦中的用戶占位監測、工業和家庭/商業自動化系...

史海拾趣

問答坊 | AI 解惑

中國四家芯片廠商被列入優先出口商名單

美國商務部公布,已授予五家在中國企業美國對華技術出口的“合法終端用戶”(VEU)地位,其中有四家是芯片制造商。美國商務部工業與安全局宣布的這五家企業是:應用材料中國公司、波音公司旗下合資企業Boeing Hexcel AVIC I、中芯國際集成電路制造有 ...…

查看全部問答∨

重新寫下,急!有能提供1mA電流的芯片嗎?精度在1%(10uA)即可!!

我要給測量低溫的電阻提供1mA的電流,然后測量其電壓確定當前溫度電流大于1mA太多的話, 測量低溫的電阻會發熱,電阻特性就變了,測不準低溫,所以最好有能準確提供1mA電流的芯片…

查看全部問答∨

我的串口通信程序只能接收幾個字節?救我!

為什么我的串口通信程序只能接收幾個字節,接收幾十個字節時就接收不正確了! 我接收幾個字節時都能正確接收,現在要接收30多個字節,這時就接收不了! 有誰遇到過類似的問題???到底什么原因阿?幫幫我!謝謝 ! 波特率:38400 bps 起始位:1 ...…

查看全部問答∨

哪位高人知道,在Windows Mobile 6.0 SDK環境下,如何用DirectShow 和 DirectDraw 使用overl

哪位高人知道,在Windows   Mobile   6.0   SDK環境下,如何用DirectShow   和   DirectDraw   使用overlay2開發camera應用程序。謝謝了?!?

查看全部問答∨

一種基于MSP430的可充電腦起搏器的設計

在運動障礙性疾病(Movement Disorders)中,帕金森?。≒arkinson Disease,PD)以肌張力增高、運動減少為主要臨床特征,因首先由英國人帕金木(Janes Parkinson)于1817年描述而得名。據不完全統計,目前我國約為120~130萬帕金森病患者,而全世界 ...…

查看全部問答∨

3250開發板鏈接劃卡鍵盤有問題,請大家幫忙看看

3250開發板鏈接劃卡鍵盤有問題,請解惑    劃卡鍵盤為大元752u。在Ubuntu及XP 下均能正常使用,在開發板上只亮燈,鍵盤不反應。在Ubuntu下設備號如下:linux:/dev/input/by-id$ lsusb-413c_2003-event-kbd設備ID等相 ...…

查看全部問答∨

“學模擬+《運算放大器噪聲優化手冊》的研讀

本帖最后由 dontium 于 2015-1-23 11:22 編輯 已收到《運算放大器噪聲優化手冊》實在是一本不可多得的好書,其從不同角度不同應用中解析不同噪聲對運放電路造成的不同影響,每章小結更是清晰的列明本章要點,如更進一步鞏固知識還有相關習題,本書 ...…

查看全部問答∨

學模擬+《運算放大器噪聲優化手冊》—第五章 噪聲測量導論

本帖最后由 dontium 于 2015-1-23 11:11 編輯 1、本章較為簡單易懂,主要介紹了三種噪聲測量儀器真均方根數字萬用表、示波器、頻譜分析儀。真均方根數字萬用表:將輸入電壓數字化,收集上千個采樣點,然后用數字方法計算均方根值。示波器:可以顯 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 婺源县| 商城县| 张北县| 平顺县| 凤庆县| 洱源县| 垣曲县| 江口县| 定远县| 鸡泽县| 郴州市| 清原| 兴义市| 体育| 星子县| 宁夏| 鞍山市| 万盛区| 宝坻区| 新泰市| 普兰县| 博野县| 罗源县| 隆昌县| 延边| 博客| 黑河市| 封开县| 天等县| 万宁市| 涟源市| 安岳县| 宝鸡市| 易门县| 固原市| 二手房| 洛隆县| 永寿县| 资源县| 马尔康县| 康马县|