www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導讀]初學STM8會發(fā)現(xiàn),STM8官方的固件庫并沒有提供一個.s文件的啟動代碼,那么她是如何啟動然后跳轉到main函數(shù)執(zhí)行的呢?

 首先,我們根據(jù)ARM的只是可以推測,STM8也是通過復位向量來啟動的,假設流程在復位響亮中完成的,應該首先去復位向量表中間去找,看復位向量又要看存儲器映射,一環(huán)扣一環(huán)

STM8使用的是統(tǒng)一編址技術,以下是存儲器編址圖

 

 

我們可以看到,最大取指空間是0XFFFFFF,也就是說,是16M,這是因為PC的特性決定的

 

 

在程序內(nèi)部,它是將16M分為了256個節(jié)(sector),每個節(jié)的大小為64K,64*256= 16384K=16M,由圖我們可以看到,在SECTOR0區(qū)間里面似乎還有些玄妙,之后的就是普通空間了

 

 

這就是sector的分區(qū),分區(qū)如下

0-17ff 是RAM空間,而且是最大的ram空間,STM8的ram一般都小于6K由此可見,在這個ram空間里面就包含有我們的堆棧區(qū)域.但是不一定是6K,(3G尋址的win7也沒見多少人真的裝3G啊,裝2G內(nèi)存條的多的是)

1800-3fff是保留區(qū)域

4000-47ff是最大2K的數(shù)據(jù)保存區(qū)(相當于EEPROM)

4800-487f是選項字節(jié)空間,用于設置一些配置信息

4900-4fff是保留空間

5000-57ff IO以及外設的寄存器空間(統(tǒng)一編址技術)

5800-5fff 保留區(qū)域

6000-67ff 2K的啟動代碼rom

6800-7eff 保留區(qū)間

7f00-7fff 系統(tǒng)寄存器的地址

8000-8080 中斷向量

在往下才是flash空間,也就是說,我們的代碼存放的區(qū)域就是在0x8000開始的

在上面那張圖我們可以看見復位向量

 

 

那是不是說芯片啟動立馬就到了復位向量0x8000的位置了呢?

其實不然,查看手冊我們發(fā)現(xiàn)這一段話

 

 

也就是說,系統(tǒng)啟動的時候不在復位向量的地方,那這個6000區(qū)域存放的是啥

 

 

原來是啟動代碼,還是數(shù)據(jù)手冊

 

 

鑒于此,我們可以很肯定地說,系統(tǒng)啟動的過程是

復位-->跳轉到boot ram--->boot ram進行某種初始化-->處理用戶有可能的程序更新-->跳轉到0x8000-->復位向量執(zhí)行

既然復位向量在8000,那么代碼中應該有指示

 

 

我們在IAR里面看到他對中斷的處理依靠這個宏定義,實際上他就是定義了兩個重要的宏定義

INTERRUPT_HANDLER_TRAP(a)和INTERRUPT_HANDLER(a, b )

我們展開第一個

得到

INTERRUPT_HANDLER_TRAP(a) ==

_Pragma(vector = 1) __interruptvoid (a) (void)

這里面涉及到兩個編譯器關鍵字分別是Pragma和interrupt

 

 

Pragma是一個預處理指令,它包含不同的語句的時候有不同的含義,我們現(xiàn)在包含的是vector,那就和vector有關系了

 

 

什么意思呢,我們得看具體語法

 

 

也就是說,相當于在中斷向量表標號中寫入指定的函數(shù)

_Pragma(vector = 1) __interruptvoid (a) (void)

相當于在中斷向量1的位置寫入a這個函數(shù)的指針

INTERRUPT_HANDLER( a, b )展開來

_Pragma(vector = b+2) __interruptvoid (a) (void)

就是在中斷向量表B+2的位置寫入a這個函數(shù)的指針,(因為0和1被reset和trap占用了)

現(xiàn)在我們來看it.c中的語句就很清楚了

 

 

第一個函數(shù)是trap指針,我們需要實現(xiàn)TRAP_IRQHandler這個函數(shù)就能關聯(lián)上對應的中斷向量

第二個函數(shù)同樣我們只要實現(xiàn)TLI_IRQHandler這個函數(shù)就OK了

函數(shù)的視線需要遵循

__interrupt void (a) (void)的模式,否則宏定義報錯

可是trap有了,reset去哪了呢?這是IAR的一個手段,他把RESET隱藏了,我們來看這個圖片

 

 

相當于,IAR在RESET處默認存放了一個中斷向量指針,指針的指向是__iar_program_start函數(shù),這個函數(shù)我們無法找到,屬于iar內(nèi)置函數(shù),但是我們可以看到,調(diào)試就可以了

打開仿真

 

 

在reset位置放置了一個0x80c3地址(0x82屬于固定填充,24位地址,32位高八位不用),80c3位置代碼如下

 

 

由此可見我們的推論是正確的

先設置堆棧基地址0x17ff然后經(jīng)歷lowinit和datainit之后跳轉到main函數(shù)執(zhí)行

所以,IAR下編譯STM8啟動的過程總結如下

復位-->跳轉到boot ram--->boot ram進行某種初始化-->處理用戶有可能的程序更新-->跳轉到0x8000-->復位向量執(zhí)行à跳轉到__iar_program_start-->跳轉到main函數(shù)地址

『本文轉載自網(wǎng)絡,版權歸原作者所有,如有侵權請聯(lián)系刪除』

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉