女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

第八章 啟動文件詳解

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-05-22 16:52 ? 次閱讀

單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網(wǎng)單片機

W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨立的32KB以太網(wǎng)收發(fā)緩存,可供8個獨立硬件socket使用。如此配置,真正實現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。

在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN100和QFN68。

W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復雜工控場景設計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設資源,能夠輕松應對工業(yè)控制中多樣化的連接需求,無論是與各類傳感器、執(zhí)行器的通信,還是對復雜工業(yè)協(xié)議的支持,都能游刃有余,成為復雜工控領(lǐng)域的理想選擇。 同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網(wǎng)關(guān)模組等場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網(wǎng)站或者私信獲取。

此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡通信安全再添保障。

為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32L這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設全部引出,拓展功能也大幅提升,便于開發(fā)者全面評估芯片性能。

若您想獲取芯片和開發(fā)板的更多詳細信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價格等,歡迎訪問官方網(wǎng)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZPGgbOfaANhwzACodXd3sVzg463.png

第八章 啟動文件詳解

本章參考資料《W55MH32參考手冊》第八章-中斷和事件,MDK中的幫助手冊—ARM Development Tools:用來查詢ARM的匯編指令和編譯器相關(guān)的指令。

1 啟動文件簡介

啟動文件由匯編編寫,是系統(tǒng)上電復位后第一個執(zhí)行的程序。主要做了以下工作:

初始化堆棧指針SP=_initial_sp

初始化PC指針=Reset_Handler

初始化中斷向量表

配置系統(tǒng)時鐘

調(diào)用C庫函數(shù)_main初始化用戶堆棧,從而最終調(diào)用main函數(shù)去到C的世界

2 查找ARM匯編指令

在講解啟動代碼的時候,會涉及到ARM的匯編指令和Cortex內(nèi)核的指令,有關(guān)Cortex內(nèi)核的指令我們可以參考《CM3權(quán)威指南CnR2》第四章:指令集。 剩下的ARM的匯編指令我們可以在MDK->Help->Uvision Help中搜索到,以EQU為例,檢索如下:

wKgZO2gu5LuAW0YhAAFNBIbtmtA987.png

檢索出來的結(jié)果會有很多,我們只需要看Assembler User Guide 這部分即可。下面列出了啟動文件中使用到的ARM匯編指令, 該列表的指令全部從ARM Development Tools這個幫助文檔里面檢索而來。其中編譯器相關(guān)的指令WEAK和ALIGN為了方便也放在同一個表格了。

指令名稱 作用
EQU 給數(shù)字常量取一個符號名,相當于 C 語言中的define
AREA 匯編一個新的代碼段或者數(shù)據(jù)段
SPACE 分配內(nèi)存空間
PRESERVE8 當前文件堆棧需按照 8 字節(jié)對齊
EXPORT 聲明一個標號具有全局屬性,可被外部文件使用
DCD 以字為單位分配內(nèi)存,要求 4 字節(jié)對齊,并初始化這些內(nèi)存
PROC 定義子程序,與ENDP 成對使用,表示子程序結(jié)束
WEAK 弱定義,若外部文件聲明標號則優(yōu)先使用,無定義也不出錯(非 ARM 指令,屬編譯器功能)
IMPORT 聲明標號來自外部文件,類似 C 語言的EXTERN 關(guān)鍵字
B 跳轉(zhuǎn)到一個標號
ALIGN 編譯器對指令 / 數(shù)據(jù)地址對齊,常跟立即數(shù),缺省 4 字節(jié)對齊(非 ARM 指令,屬編譯器功能)
END 表示文件結(jié)束
IF,ELSE,ENDIF 匯編條件分支語句,類似 C 語言的if else

3 啟動文件代碼講解

3.1 Stack—棧

Stack_Size      EQU     0x00000400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

開辟棧的大小為0X00000400(1KB),名字為STACK,NOINIT即不初始化,可讀可寫,8(2^3)字節(jié)對齊。棧的作用是用于局部變量,函數(shù)調(diào)用,函數(shù)形參等的開銷,棧的大小不能超過內(nèi)部SRAM的大小。

如果編寫的程序比較大, 定義的局部變量很多,那么就需要修改棧的大小。如果某一天,你寫的程序出現(xiàn)了莫名奇怪的錯誤,并進入了硬fault的時候,這時你就要考慮下是不是棧不夠大,溢出了。

EQU:宏定義的偽指令,相當于等于,類似于C中的define。

AREA:告訴匯編器匯編一個新的代碼段或者數(shù)據(jù)段。STACK表示段名,這個可以任意命名;NOINIT表示不初始化; READWRITE表示可讀可寫,ALIGN=3,表示按照2^3對齊,即8字節(jié)對齊。

SPACE:用于分配一定大小的內(nèi)存空間,單位為字節(jié)。這里指定大小等于Stack_Size。

標號__initial_sp緊挨著SPACE語句放置,表示棧的結(jié)束地址,即棧頂?shù)刂罚瑮J怯筛呦虻蜕L的。

3.2 Heap堆

Heap_Size     EQU     0x00000200

            AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem      SPACE   Heap_Size
__heap_limit

開辟堆的大小為0X00000200(512字節(jié)),名字為HEAP,NOINIT即不初始化,可讀可寫,8(2^3)字節(jié)對齊。__heap_base表示堆的起始地址, __heap_limit表示堆的結(jié)束地址。堆是由低向高生長的,跟棧的生長方向相反。

堆主要用來動態(tài)內(nèi)存的分配,像malloc()函數(shù)申請的內(nèi)存就在堆上面。這個在W5MH32里面用的比較少。

PRESERVE8
THUMB

PRESERVE8:指定當前文件的堆棧按照8字節(jié)對齊。

THUMB:表示后面指令兼容THUMB指令。THUBM是ARM以前的指令集,16bit,現(xiàn)在Cortex-M系列的都使用THUMB-2指令集, THUMB-2是32位的,兼容16位和32位的指令,是THUMB的超集。

3.3 向量表

AREA    RESET, DATA, READONLY
EXPORT  __Vectors
EXPORT  __Vectors_End
EXPORT  __Vectors_Size

定義一個數(shù)據(jù)段,名字為RESET,可讀。 并聲明 __Vectors、__Vectors_End和__Vectors_Size這三個標號具有全局屬性,可供外部的文件調(diào)用。

EXPORT:聲明一個標號可被外部的文件使用,使標號具有全局屬性。如果是IAR編譯器,則使用的是GLOBAL這個指令。

當內(nèi)核響應了一個發(fā)生的異常后,對應的異常服務例程(ESR)就會執(zhí)行。為了決定 ESR 的入口地址, 內(nèi)核使用了“向量表查表機制”。 這里使用一張向量表。向量表其實是一個 WORD( 32 位整數(shù))數(shù)組,每個下標對應一種異常,該下標元素的值則是該 ESR的入口地址。 向量表在地址空間中的位置是可以設置的,通過 NVIC 中的一個重定位寄存器來指出向量表的地址。在復位后,該寄存器的值為 0。因此, 在地址 0 (即FLASH 地址0)處必須包含一張向量表,用于初始時的異常分配。要注意的是這里有個另類: 0 號類型并不是什么入口地址, 而是給出了復位后 MSP 的初值。

編號 優(yōu)先級 優(yōu)先級類型 名稱 說明 地址
- - - - 保留(實際存的是 MSP 地址) 0X0000 0000
-3 - 固定 Reset 復位 0X0000 0004
-2 - 固定 NMI 不可屏蔽中斷。RCC 時鐘安全系統(tǒng) (CSS) 連接到 NMI 向量 0X0000 0008
-1 - 固定 HardFault 所有類型的錯誤 0X0000 000C
0 - 編程 MemManage 存儲器管理 0X0000 0010
1 - 可編程 BusFault 預取指失敗,存儲器訪問失敗 0X0000 0014
2 - 可編程 UsageFault 未定義的指令或非法狀態(tài) 0X0000 0018
- - - - 保留 0X0000 001C-0X0000 002B
3 - 可編程 SVCall 通過 SWI 指令調(diào)用的系統(tǒng)服務 0X0000 002C
4 - 可編程 Debug Monitor 調(diào)試監(jiān)控器 0X0000 0030
- - - - 保留 0X0000 0034
5 - 可編程 PendSV 可掛起的系統(tǒng)服務 0X0000 0038
6 - 可編程 SysTick 系統(tǒng)嘀嗒定時器 0X0000 003C
0 7 可編程 WWDG 窗口看門狗中斷 0X0000 0040
1 8 可編程 PVD 連到 EXTI 的電源電壓檢測 (PVD) 中斷 0X0000 0044
2 9 可編程 TAMPER 侵入檢測中斷 0X0000 0048
- - - - 中間部分省略,詳情請參考《STM32 中文參考手冊》第九章 - 中斷和事件 - 向量表部分 -
57 64 可編程 DMA2 通道 2 DMA2 通道 2 中斷 0X0000 0124
58 65 可編程 DMA2 通道 3 DMA2 通道 3z 中斷 0X0000 0128
59 66 可編程 DMA2 通道 4 5 DMA2 通道 4 和通道 5 中斷 0X0000 012C

代碼 15?1 向量表

__Vectors  DCD   __initial_sp        ;棧頂?shù)刂?        DCD   Reset_Handler       ;復位程序地址
        DCD   NMI_Handler
        DCD   HardFault_Handler
        DCD   MemManage_Handler
        DCD   BusFault_Handler
        DCD   UsageFault_Handler
        DCD   0                    ; 0 表示保留
        DCD   0
        DCD   0
        DCD   0
        DCD   SVC_Handler
        DCD   DebugMon_Handler
        DCD   0
        DCD   PendSV_Handler
        DCD   SysTick_Handler


;外部中斷開始
        DCD   WWDG_IRQHandler
        DCD   PVD_IRQHandler
        DCD   TAMPER_IRQHandler

;限于篇幅,中間代碼省略
        DCD   DMA2_Channel2_IRQHandler
        DCD   DMA2_Channel3_IRQHandler
        DCD   DMA2_Channel4_5_IRQHandler
__Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors

__Vectors為向量表起始地址,__Vectors_End 為向量表結(jié)束地址,兩個相減即可算出向量表大小。

向量表從FLASH的0地址開始放置,以4個字節(jié)為一個單位,地址0存放的是棧頂?shù)刂罚?X04存放的是復位程序的地址,以此類推。 從代碼上看,向量表中存放的都是中斷服務函數(shù)的函數(shù)名,可我們知道C語言中的函數(shù)名就是一個地址。

DCD:分配一個或者多個以字為單位的內(nèi)存,以四字節(jié)對齊,并要求初始化這些內(nèi)存。在向量表中,DCD分配了一堆內(nèi)存,并且以ESR的入口地址初始化它們。

3.4 復位程序

AREA |.text|, CODE, READONLY

定義一個名稱為.text的代碼段,可讀。

Reset_Handler PROC
            EXPORT  Reset_Handler    [WEAK]
            IMPORT  SystemInit
            IMPORT  __main

            LDR     R0, =SystemInit
            BLX     R0
            LDR     R0, =__main
            BX      R0
            ENDP

復位子程序是系統(tǒng)上電后第一個執(zhí)行的程序,調(diào)用SystemInit函數(shù)初始化系統(tǒng)時鐘,然后調(diào)用C庫函數(shù)_mian,最終調(diào)用main函數(shù)去到C的世界。

WEAK:表示弱定義,如果外部文件優(yōu)先定義了該標號則首先引用該標號,如果外部文件沒有聲明也不會出錯。 這里表示復位子程序可以由用戶在其他文件重新實現(xiàn),這里并不是唯一的。

IMPORT:表示該標號來自外部文件,跟C語言中的EXTERN關(guān)鍵字類似。這里表示SystemInit和__main這兩個函數(shù)均來自外部的文件。

SystemInit()是一個標準的庫函數(shù),在system_W5MH32f10x.c這個庫文件總定義。主要作用是配置系統(tǒng)時鐘,這里調(diào)用這個函數(shù)之后,單片機的系統(tǒng)時鐘配被配置為72M。__main是一個標準的C庫函數(shù),主要作用是初始化用戶堆棧,并在函數(shù)的最后調(diào)用main函數(shù)去到C的世界。這就是為什么我們寫的程序都有一個main函數(shù)的原因。

LDR、BLX、BX是CM4內(nèi)核的指令,可在《CM3權(quán)威指南CnR2》第四章-指令集里面查詢到,具體作用見下表:

指令名稱 作用
LDR 從存儲器中加載字到一個寄存器中
BL 跳轉(zhuǎn)到由寄存器 / 標號給出的地址,并把跳轉(zhuǎn)前的下條指令地址保存到 LR
BLX 跳轉(zhuǎn)到由寄存器給出的地址,根據(jù)寄存器的 LSE 確定處理器狀態(tài),同時將跳轉(zhuǎn)前的下條指令地址保存到 LR
BX 跳轉(zhuǎn)到由寄存器 / 標號給出的地址,不用返回

3.5 中斷服務程序

在啟動文件里面已經(jīng)幫我們寫好所有中斷的中斷服務函數(shù),跟我們平時寫的中斷服務函數(shù)不一樣的就是這些函數(shù)都是空的, 真正的中斷復服務程序需要我們在外部的C文件里面重新實現(xiàn),這里只是提前占了一個位置而已。

如果我們在使用某個外設的時候,開啟了某個中斷,但是又忘記編寫配套的中斷服務程序或者函數(shù)名寫錯,那當中斷來臨的時, 程序就會跳轉(zhuǎn)到啟動文件預先寫好的空的中斷服務程序中,并且在這個空函數(shù)中無限循環(huán),即程序就死在這里。

NMI_Handler     PROC    ;系統(tǒng)異常
                EXPORT  NMI_Handler           [WEAK]
                B       .
                ENDP

;限于篇幅,中間代碼省略
SysTick_Handler PROC
                EXPORT  SysTick_Handler       [WEAK]
                B       .
                ENDP

Default_Handler PROC    ;外部中斷
                EXPORT  WWDG_IRQHandler       [WEAK]
                EXPORT  PVD_IRQHandler        [WEAK]
                EXPORT  TAMP_STAMP_IRQHandler [WEAK]

;限于篇幅,中間代碼省略
LTDC_IRQHandler
LTDC_ER_IRQHandler
DMA2D_IRQHandler
                B       .
                ENDP

B:跳轉(zhuǎn)到一個標號。這里跳轉(zhuǎn)到一個‘.’,即表示無限循環(huán)。

3.6 用戶堆棧初始化

ALIGN:對指令或者數(shù)據(jù)存放的地址進行對齊,后面會跟一個立即數(shù)。缺省表示4字節(jié)對齊。

;用戶棧和堆初始化,由C庫函數(shù)_main來完成
IF      :DEF:__MICROLIB  ;這個宏在KEIL里面開啟

EXPORT  __initial_sp
EXPORT  __heap_base
EXPORT  __heap_limit

ELSE

IMPORT  __use_two_region_memory ; 這個函數(shù)由用戶自己實現(xiàn)
EXPORT  __user_initial_stackheap

__user_initial_stackheap

LDR     R0, =  Heap_Mem
LDR     R1, =(Stack_Mem + Stack_Size)
LDR     R2, = (Heap_Mem +  Heap_Size)
LDR     R3, = Stack_Mem
BX      LR

ALIGN

ENDIF

首先判斷是否定義了__MICROLIB ,如果定義了這個宏則賦予標號__initial_sp(棧頂?shù)刂罚?__heap_base(堆起始地址)、__heap_limit(堆結(jié)束地址)全局屬性,可供外部文件調(diào)用。 有關(guān)這個宏我們在KEIL里面配置,具體見圖 使用微庫 。然后堆棧的初始化就由C庫函數(shù)_main來完成。

wKgZPGgu5LuAS4xoAAB3NkRP6S4600.png

如果沒有定義__MICROLIB,則才用雙段存儲器模式,且聲明標號__user_initial_stackheap具有全局屬性,讓用戶自己來初始化堆棧。

IF,ELSE,ENDIF:匯編的條件分支語句,跟C語言的if ,else類似

END:文件結(jié)束

WIZnet 是一家無晶圓廠半導體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應用中的嵌入式互聯(lián)網(wǎng)設備。

WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設有辦事處,提供技術(shù)支持和產(chǎn)品營銷。

香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 芯片
    +關(guān)注

    關(guān)注

    459

    文章

    52267

    瀏覽量

    437210
  • WIZnet
    +關(guān)注

    關(guān)注

    3

    文章

    22

    瀏覽量

    42395
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    電子科技大學labview課件

    (二)  第七 Case結(jié)構(gòu)和Sequence結(jié)構(gòu)  第八章 字符串和文件I/O  第八章 字符串和文件I/O(二)  第九~十
    發(fā)表于 12-28 15:17

    《測控電路》習題完整參考答案(第八章

    《測控電路》習題完整參考答案(第八章
    發(fā)表于 05-07 11:39

    自動控制原理—北京航天航空大學精品課件(八章全)

    第一:拉氏變換第二:數(shù)學模型第三:時域分析法第四:根軌跡法第五:頻率法第六:系統(tǒng)校正
    發(fā)表于 10-11 13:58

    I.MX6U嵌入式Linux驅(qū)動開發(fā)指南

    【正點原子Linux連載】第八章匯編LED燈試驗--摘自【正點原子】I.MX6U嵌入式Linux驅(qū)動開發(fā)指南V1.0`:---------:`第八章匯編LED燈試驗8.1 I.MX6U GPIO詳解
    發(fā)表于 01-26 08:26

    labview中文教程

    第八章 LabVIEW的編程技巧  
    發(fā)表于 08-03 09:48 ?4次下載

    波形的產(chǎn)生與變換電路 第八章PPT

    波形的產(chǎn)生與變換電路 第八章
    發(fā)表于 04-20 09:33 ?19次下載
    波形的產(chǎn)生與變換電路 <b class='flag-5'>第八章</b>PPT

    信號發(fā)生電路基礎 第八章

    信號發(fā)生電路基礎 第八章 8.1正弦波振蕩電路1、振蕩電路:是一種不需要外接輸入信號就能將直流能源轉(zhuǎn)換成具有一定頻率、一定幅度和一定波形的交流能量
    發(fā)表于 04-20 13:58 ?49次下載

    第八章 線性離散控制系統(tǒng)分析

    第八章 線性離散控制系統(tǒng)分析 數(shù)字控制系統(tǒng)是一種以數(shù)字計算機為控制器去控制具有連續(xù)工作狀態(tài)的被控對象的閉環(huán)控制系統(tǒng)。
    發(fā)表于 05-27 15:50 ?0次下載

    51單片機第八章素材

    單片機第八章素材練習,主要講解單片機的初步應用只是,配合protues使用,加強對單片機有關(guān)知識的理解。
    發(fā)表于 11-16 18:53 ?1次下載

    電子技術(shù)基礎模擬部分第五版_第八章習題答案.pdf

    電子技術(shù)基礎模擬部分第五版_第八章習題答案.pdf,作業(yè)題解答!
    發(fā)表于 04-11 17:44 ?0次下載

    HCIE復習資料_網(wǎng)絡管理

    HCIE復習資料-第八章- 網(wǎng)絡管理,HCIE全套復習資料
    發(fā)表于 05-11 10:45 ?0次下載

    《測控電路》習題完整參考答案(第八章

    《測控電路》習題完整參考答案(第八章
    發(fā)表于 02-14 17:02 ?0次下載

    電路《電路原理》邱關(guān)源---第八章 相量法

    電路《電路原理》邱關(guān)源---第八章 相量法
    發(fā)表于 01-18 11:37 ?0次下載

    【正點原子Linux連載】第八章匯編LED燈試驗--摘自【正點原子】I.MX6U嵌入式Linux驅(qū)動開發(fā)指南V1.0

    【正點原子Linux連載】第八章匯編LED燈試驗--摘自【正點原子】I.MX6U嵌入式Linux驅(qū)動開發(fā)指南V1.0
    發(fā)表于 12-01 19:21 ?10次下載
    【正點原子Linux連載】<b class='flag-5'>第八章</b>匯編LED燈試驗--摘自【正點原子】I.MX6U嵌入式Linux驅(qū)動開發(fā)指南V1.0

    IC工藝和版圖設計第八章Latch-up和GuardRing設計

    IC工藝和版圖設計第八章Latch-up和GuardRing設計
    發(fā)表于 02-10 18:11 ?0次下載
    主站蜘蛛池模板: 车险| 萨迦县| 江安县| 屏边| 米泉市| 成武县| 泉州市| 清流县| 安庆市| 三台县| 张家川| 拉孜县| 涟源市| 巴彦县| 西峡县| 湘潭市| 犍为县| 巫溪县| 新津县| 龙江县| 石泉县| 海南省| 鹤山市| 青海省| 小金县| 阳春市| 故城县| 彭水| 赫章县| 那曲县| 稻城县| 江山市| 偏关县| 略阳县| 盐边县| 通许县| 调兵山市| 开鲁县| 会宁县| 揭东县| 邢台县|