<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Cortex-M3啟動深度解析

      Cortex-Mx啟動,備忘,以免將來忘記。
      中斷向量表不用說,從重置中斷開始吧

       

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

       

      這里一共就執行了兩個函數,SystemInit和__main。

      我們一般在SystemInit里面配置系統時鐘,這里跳過。

      __main是我們今天的重點。

       

                       __main:
      0x080000C0 4804      LDR      r0,[pc,#16]  ; @0x080000D4
      0x080000C2 4685      MOV      sp,r0        #設置棧頂
                       _main_scatterload:
      0x080000C4 F000F956  BL.W     __scatterload (0x08000374)        #分散加載(拷貝初始值、清零變量)
                       __main_after_scatterload:
      0x080000C8 F000F8D4  BL.W     __cpp_initialize__aeabi_ (0x08000274)        #C++初始化(全局對象構造函數執行)
                       _main_cpp_init:
      0x080000CC 4800      LDR      r0,[pc,#0]  ; @0x080000D0
      0x080000CE 4700      BX       r0        #進入C++的main函數

       

       

       

      分散加載這里將會初始化我們的全局靜態變量

       

      .text:00000000 __scatterload_rt2
      .text:00000000                 LDR     R4, =Region$Table$Base
      .text:00000002                 MOVS    R5, #1
      .text:00000004                 LDR     R6, =Region$Table$Limit
      .text:00000006                 B       loc_14
      .text:00000008 ; ---------------------------------------------------------------------------
      .text:00000008
      .text:00000008 loc_8                                   ; CODE XREF: __scatterload_rt2+16j
      .text:00000008                 LDR     R3, [R4,#0xC]
      .text:0000000A                 LDMIA   R4!, {R0-R2}
      .text:0000000C                 ORRS    R3, R5
      .text:0000000E                 SUBS    R4, #0xC
      .text:00000010                 BLX     R3
      .text:00000012                 ADDS    R4, #0x10
      .text:00000014
      .text:00000014 loc_14                                  ; CODE XREF: __scatterload_rt2+6j
      .text:00000014                 CMP     R4, R6
      .text:00000016                 BCC     loc_8
      .text:00000018                 BL      __main_after_scatterload

       

      可能匯編看起來不是很直觀,我們配合看F5得到的反編譯C代碼

      void _scatterload_rt2()
      {
        _DWORD *i; // r4@1
      
        for ( i = &Region__Table__Base; (_UNKNOWN *)i < &Region__Table__Limit; i += 4 )
          ((void (__fastcall *)(_DWORD, _DWORD, _DWORD))(i[3] | 1))(*i, i[1], i[2]);
        _main_after_scatterload();
        JUMPOUT(&Region__Table__Base);
      }

      從上面看出,有一張區域表,每4個int作為一段,每一段前三個為參數,第四個為函數指針。

      經過調試得知:
      第一個函數是__scatterload_copy,從某個Flash地址把數據拷貝給RAM里面的變量,也就是帶有初始值的全局變量;
      第二個函數是__scatterload_zeroinit,顧名思義,就是全局變量清零,只要沒有初始值的全局變量,都清零,堆空間和棧空間一塊清。
      而在匯編文件里面我們有AREA    HEAP, NOINIT, READWRITE, ALIGN=3。顯然其中的NOINIT并沒有生效

       

      ER_IROM1:0800D704 Region$Table$Base DCD 0x800D72C       ;        #要拷貝的初始值來源,緊跟在固件源代碼后面
       DATA XREF: ER_IROM1:__scatterload_rt2o
      ER_IROM1:0800D704                                         ; ER_IROM1:off_8000390o
      ER_IROM1:0800D708                 DCD 0x20000000    #要復制初始值的起始地址
      ER_IROM1:0800D70C                 DCD 0xCC        #帶有初始值的區域大小
      ER_IROM1:0800D710                 DCD __scatterload_copy
      ER_IROM1:0800D714                 DCD 0x800D7F8
      ER_IROM1:0800D718                 DCD 0x200000CC    #要清零的變量起始地址
      ER_IROM1:0800D71C                 DCD 0x132C    #要清零的變量大小
      ER_IROM1:0800D720                 DCD __scatterload_zeroinit
      ER_IROM1:0800D724                 EXPORT SHT$INIT_ARRAY$Base

       

       

       

      因此,針對__scatterload_zeroinit而言,為了加快啟動速度,建議堆空間設得盡量小,然后在SmartOS系統初始化的時候再重新設置堆空間

      posted @ 2017-09-04 08:29  大石頭  閱讀(1757)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品久久久久久无码人妻蜜桃| 欧洲亚洲精品免费二区| 亚洲欧美日韩高清一区二区三区| 综合图区亚洲另类偷窥| 国产欲女高潮正在播放| 经典国产乱子伦精品视频| 国产av亚洲精品ai换脸电影| 青草热在线观看精品视频| 国产精品成人高潮av| 武夷山市| 国产高清视频一区二区三区| 精品国产中文字幕第一页| 久久精品国产亚洲av热一区| 一本一道av中文字幕无码| 国产 麻豆 日韩 欧美 久久| 国内极度色诱视频网站| 亚洲女初尝黑人巨| 亚洲 小说区 图片区 都市| 国产偷国产偷亚洲综合av| 午夜一区欧美二区高清三区| 成人av午夜在线观看| 五月婷婷中文字幕| 久久超碰色中文字幕超清| 免费萌白酱国产一区二区三区 | 欧美老熟妇乱子伦牲交视频| 丰满无码人妻热妇无码区| 人妻无码久久久久久久久久久 | 成人免费精品网站在线观看影片| 晋江市| 一区二区不卡99精品日韩| 国产精品中文字幕久久| 国产亚洲精品久久777777| 精品国产成人午夜福利| 亚洲国产中文字幕精品| 欧美性受xxxx黑人猛交| 国产精品久久久久久久9999| 四虎影视一区二区精品| 成人一区二区不卡国产| 2020国产成人精品视频| 国产AV无码专区亚洲AV漫画| 亚洲美免无码中文字幕在线|