ARM设置用户程序的堆栈.docx

上传人:scccc 文档编号:14417195 上传时间:2022-02-05 格式:DOCX 页数:3 大小:66.63KB
返回 下载 相关 举报
ARM设置用户程序的堆栈.docx_第1页
第1页 / 共3页
ARM设置用户程序的堆栈.docx_第2页
第2页 / 共3页
ARM设置用户程序的堆栈.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《ARM设置用户程序的堆栈.docx》由会员分享,可在线阅读,更多相关《ARM设置用户程序的堆栈.docx(3页珍藏版)》请在三一文库上搜索。

1、ARM设置用户程序的堆栈1.作用:用于提供编译器的初始化c库函数设置用户程序的堆栈所需要的堆栈信 息。2o _user_initial_stackheap() 返回:rO中的堆基址? rl中的堆栈基址,即堆栈区中的最高地址? r2中的堆限制? r3中的堆栈限制,即堆栈区中的最低地址。 9 *有单区模型和双区模型。单区模型:(rO,rl)是单个堆栈和堆区。rl大于rO,并忽略r2和r3。rO-rl这一块内存区域被堆和栈共用,堆从rO向上生长,栈从rl向下生长。双区模型:(rO, r2)是初始堆,(r3, rl)是初始堆栈。r2大于或等于rOo r3小于 rlo堆和栈分别指定了单独的内存区域。3

2、.如果不使用分散加载文件,则_user_initial_stackheap()必须由用户白己,实现。实现例子:;User Initial Stack & HeapAREA . text|, CODE, READONLYIMPORT _us e_two_re g i on_memoryEXPORT_user_initial_stackheap user-initial-stackheapLDR RO, = Heap_MemLDR Rl, =(Stack3Iem + USR.Stack.Size)LDR R2,=(Heap_Mem + Heap_Size)LDR R3, = StackjemBX

3、LR4 .使用分散加载可以由用户实现,也可以在分散加载描述文件中定义两个特殊执行区 (双区模型,单区模型只定义ARM_LIB_STACKHEAP) :ARM_LIB_HEAP和ARM_LIB_STACK (该区具有EMPTY属性。),从而使用C库的默认实现,此时,会导致库 选择一个使用以下符号值的_user_initial_stackheap 0实现: Image$ARM_LIB_HEAPS$Base Image$ARM_LIB_HEAP$ZI$SLimit、 Image$ARM_LIB_STACK$Base 和 ImageS$ARM_LIB_STACK$ZI$SLimit0 这种方式比较方

4、便。例子:分散加载文件:LR.IR0M1 0x00000000 0x00008000; Loadregion ER.IR0M1 0x000000000x00008000vectors, o (VECT, +First)init. o (INIT)* (+R0)RWRAM1 0x40000040 0x00001460* (+RW, +ZI); Thefollowing declarations select the ;A default _user_initial_stackheap0 will be used;ARM_LIB_HEAP 0x40001500 EMPTY 0x00000100 A

5、RM_LIB_STACK 0x40002000EMPTY -0x00000400 在初始化文件中使用I ; Image$SARM_LIB_STACKS$ZI$Limit 1作为栈底,例子:IMPORT _use_two_reg ion_memoryIMPORT ,ImageS$.RM_LIB_STACK$SZI$SLimit I ; Import stack limit from scatter-loading file;Idr rl, =| Image$ARM_LIB_STACKS$ZI$6Limit|mrs rO,cpsr; Original PSRvalue;bic rO,rO, #MODE_BITS bitsorrrO,rO, #IRQ_MODEbitsmsrcpsr_c,rOmode rlsub rl, rl, #IRQ_STK_SIZE;Clear the mode;Set IRQ mode;Change themov sp,感谢您的阅读,祝您生活愉快。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1