STM32F10x的啟動彙編分析

2022-07-14 15:27:28 字數 1874 閱讀 3157

; 首先對棧和堆的大小進行定義,並在**區的起始處建立中斷向量表,其第乙個表項是棧

; 頂位址,第二個表項是復位中斷服務入口位址。然後在復位中斷服務程式中跳轉c/c++標

; 準實時庫的__main函式。假設stm32被設定為從內部flash啟動中斷向量表起始地位為0x8000000,

; 則棧頂位址存放於0x8000000處,而復位中斷服務入口位址存放於0x8000004處。當stm32遇

; 到復位訊號後,則從0x80000004處取出復位中斷服務入口位址繼而執行復位中斷服務程式,

; 然後跳轉__main函式,最後來到c的世界。

; dcd指令:作用是開闢一段空間,其意義等價於c語言中的位址符「&」。開始建立的中斷向量

; 表則類似於使用c語.其每乙個成員都是乙個函式指標,分別指向各個中斷服務函式

;偽指令area,表示開闢一段大小為stack_size的記憶體空間作為棧,段名是stack,可讀可寫。

;noinit:指定此資料段僅僅保留了記憶體單元,而沒有將各初始值寫入記憶體單元,或者將各個記憶體單元值初始化為0

;常見的資料定義偽指令有如下幾種:

;— dcb 用於分配一片連續的位元組儲存單元並用指定的資料初始化。

;— dcw (dcwu) 用於分配一片連續的半字儲存單元並用指定的資料初始化。

;— dcd (dcdu) 用於分配一片連續的字儲存單元並用指定的資料初始化。

;— dcfd (dcfdu)用於為雙精度的浮點數分配一片連續的字儲存單元並用指 定的資料初始化。

;— dcfs  dcfsu) 用於為單精度的浮點數分配一片連續的字儲存單元並用指 定的資料初始化。

;— dcq  dcqu) 用於分配一片以 8 位元組為單位的連續的儲存單元並用指定 的資料初始化。

;— space 用於分配一片連續的儲存單元

;— map 用於定義乙個結構化的記憶體表首位址

;— field 用於定義乙個結構化的記憶體表的資料域

;export偽指令用於在程式中宣告乙個全域性的標號,該標號可在其他的檔案中引用。export可用global代替。標號在程式中區分大小寫,[weak]選項宣告其他的同名標號優先於該標號被引用。

;;啟動**作用一般是:

;;1)堆和棧的初始化;

;2)向量表定義;

;;3)位址重對映及中斷向量表的轉移;

;;4)設定系統時鐘頻率;

;;5)中斷暫存器的初始化;

;;6)進入c應用程式。

;1)堆和棧的初始化

stack_size      equ     0x00000400 ;棧區(stack)— 由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧

;space用來分配一片連續的儲存區域並初始化為0.

area    stack, noinit, readwrite, align=3     ;area 偽指令用於定義乙個**段或資料,;定義棧,可初始為0,8位元組對齊2*2*2,2的3次方

;noinit:指定此資料段僅僅保留了記憶體單元,

;readwrite屬性:指定本段為可讀可寫,資料段的預設屬性為readwrite。

;stack 段名

;align屬性:使用方式為align 表示式。在預設時,elf(可執行連線檔案)的**段和資料段是按字對齊的,表示式的取值範圍為0~31,相應的對齊方式為2表示式次方。

stack_mem       space   stack_size    ;;分配0x400個連續位元組,並初始化為0

__initial_sp   ;標號__initial_sp,表示棧空間頂位址。   ;彙編**位址標號

; heap configuration

;   heap size (in bytes) <0x0-0xffffffff:8>

STM32F10x系列 中斷

概念問題 中斷與事件有什麼聯絡與區別?stm32之中斷與事件 中斷與事件的區別 簡單概括下。中斷 cpu單執行緒情況下只能處理單一任務,在有零時任務需要處理時,可以暫時放下當前任務,優先處理零時任務,再回過來處理之前的任務。多個中斷可以進行巢狀,比如產生了多個零時任務,那麼就可以按照優先順序處理這多...

STM32F10X入門 流水燈

2019 3 16 2019 3 19 core cm32.c stdin.h中定義了字元型 stm32f10x.h stm32f10x conf.h中定義了引用的外設標頭檔案 庫檔案之間的依賴呼叫關係 pngstm32f10x.h檢視位址對映 比如define gpioa base apb2per...

STM32F10X 位帶操作

在stm32微控制器的學習中,有乙個最大的特點就是你所編寫的stm32的程式操作,基本上都是匯流排的操作,比如gpiob odr 0x0001 或者直接等於1 這樣的操作必須要考慮整個暫存器的資料,但其實如果學過51微控制器的人都知道,我們除了對於匯流排操作外,我們還是經常會對單獨的位進行操作,比如...