久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4589|回復(fù): 0
收起左側(cè)

關(guān)于__user_initial_stackheap( )

[復(fù)制鏈接]
ID:128229 發(fā)表于 2016-6-27 21:55 | 顯示全部樓層 |閱讀模式
1.作用:用于提供編譯器的初始化C庫(kù)函數(shù)設(shè)置用戶程序的堆棧所需要的堆棧信息。
2.__user_initial_stackheap() 返回:
  • r0 中的堆基址
  • r1 中的堆棧基址,即堆棧區(qū)中的最高地址
  • r2 中的堆限制
  • r3 中的堆棧限制,即堆棧區(qū)中的最低地址。

有單區(qū)模型和雙區(qū)模型。

單區(qū)模型:(r0,r1)是單個(gè)堆棧和堆區(qū)。r1 大于 r0,并忽略 r2 和 r3。

r0--r1這一塊內(nèi)存區(qū)域被堆和棧共用,堆從r0向上生長(zhǎng),棧從r1向下生長(zhǎng)。

雙區(qū)模型:(r0, r2)是初始堆,(r3, r1) 是初始堆棧。r2 大于或等于 r0。r3 小于 r1。
堆和棧分別指定了單獨(dú)的內(nèi)存區(qū)域。

3.如果不使用分散加載文件,則__user_initial_stackheap()必須由用戶自己實(shí)現(xiàn)。

實(shí)現(xiàn)例子:
; User Initial Stack & Heap
                AREA    |.text|, CODE, READONLY

                IMPORT  __use_two_region_memory
                EXPORT  __user_initial_stackheap
__user_initial_stackheap

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

4.使用分散加載可以由用戶實(shí)現(xiàn),也可以在分散加載描述文件中定義兩個(gè)特殊執(zhí)行區(qū)(雙區(qū)模型,單區(qū)模型只定義ARM_LIB_STACKHEAP):        ARM_LIB_HEAP 和 ARM_LIB_STACK(該區(qū)具有 EMPTY 屬性。),從而使用C庫(kù)的默認(rèn)實(shí)現(xiàn),此時(shí),會(huì)導(dǎo)致庫(kù)選擇一個(gè)使用以下符號(hào)值的 __user_initial_stackheap() 實(shí)現(xiàn):Image$$ARM_LIB_HEAP$$Base、Image$$ARM_LIB_HEAP$$ZI$$Limit、Image$$ARM_LIB_STACK$$Base 和 Image$$ARM_LIB_STACK$$ZI$$Limit。這種方式比較方便。

例子:
分散加載文件:
LR_IROM1 0x00000000 0x00008000                                     ;; Load region
{
    ER_IROM1 0x00000000    0x00008000
    {
        vectors.o (VECT, +First)
        init.o (INIT)
        * (+RO)
    }

    RW_IRAM1 0x40000040 0x00001460
    {
        * (+RW,+ZI)
    }                                                           ;; The following declarations select the "two region model" ;
                                                                ;; A default __user_initial_stackheap() will be used        ;
    ARM_LIB_HEAP  0x40001500 EMPTY  0x00000100   {}
    ARM_LIB_STACK 0x40002000 EMPTY -0x00000400   {}
}

在初始化文件中使用||Image$$ARM_LIB_STACK$$ZI$$Limit||作為棧底,

例子:
                IMPORT __use_two_region_memory
                IMPORT  ||Image$$ARM_LIB_STACK$$ZI$$Limit||     ; Import stack limit from scatter-loading file              ;

                ldr     r1, =||Image$$ARM_LIB_STACK$$ZI$$Limit||
               
                mrs     r0,cpsr                             ; Original PSR value                                        ;
                bic     r0,r0,#MODE_BITS                    ; Clear the mode bits                                       ;
                orr     r0,r0,#IRQ_MODE                     ; Set IRQ mode bits                                         ;
                msr     cpsr_c,r0                           ; Change the mode                                           ;
                mov     sp, r1
                sub     r1, r1, #IRQ_STK_SIZE


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产黄色av | 国产呦小j女精品视频 | 黄色录像大片 | 国产性色av | 国产精品毛片一区视频播 | 亚洲激情综合网 | 能看的av网站 | 欧美一区二区在线观看 | 国产日韩在线播放 | 国产成人在线免费观看 | 日韩中文一区 | 五月天婷婷综合 | 91亚洲国产成人久久精品网站 | 丁香六月综合 | 人与拘一级a毛片 | 亚洲成人免费观看 | 激情综合五月婷婷 | 免费毛片网站 | 亚洲最新网址 | 国产成人三级在线观看 | 麻豆一区二区三区 | 青青草久久 | 日韩在线免费视频 | 亚洲国产中文字幕 | 三级免费观看 | 国产又爽又黄免费视频 | a毛片在线观看 | 亚洲经典一区二区 | 中文字幕第2页 | 久久精品亚洲 | 永久免费看mv网站入口亚洲 | 中文字幕免费视频 | 黄色av免费观看 | 久久久久一 | 国产福利一区二区三区 | 解开岳的丰满奶罩bd | 国产理论视频 | 久久综合热 | 天堂91 | 久久动态图 | 51免费看成人啪啪片 |