1.作用:用于提供编译器的初始化C库函数设置用户程序的堆栈所需要的堆栈信息。
2.__user_initial_stackheap() 返回:
r0 中的堆基址
r1 中的堆栈基址,即堆栈区中的最高地址
r2 中的堆限制
r3 中的堆栈限制,即堆栈区中的最低地址。
有单区模型和双区模型。
单区模型:(r0,r1)是单个堆栈和堆区。r1 大于 r0,并忽略 r2 和 r3。
r0--r1这一块内存区域被堆和栈共用,堆从r0向上生长,栈从r1向下生长。
双区模型:(r0, r2)是初始堆,(r3, r1) 是初始堆栈。r2 大于或等于 r0。r3 小于 r1。
堆和栈分别指定了单独的内存区域。
3.如果不使用分散加载文件,则__user_initial_stackheap()必须由用户自己实现。
实现例子:
; 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.使用分散加载可以由用户实现,也可以在分散加载描述文件中定义两个特殊执行区(双区模型,单区模型只定义ARM_LIB_STACKHEAP): ARM_LIB_HEAP 和 ARM_LIB_STACK(该区具有 EMPTY 属性。),从而使用C库的默认实现,此时,会导致库选择一个使用以下符号值的 __user_initial_stackheap() 实现: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
上一篇:初识ARM cotex—A9
下一篇:arm开关中断汇编接口
推荐阅读
史海拾趣
背景:2004年,为了适应国家经济发展和产业布局调整的需要,振华新云面临从凯里白午山区调迁至贵阳市新添高新技术开发区的挑战。
内容:在调迁过程中,公司克服了种种困难,如设备搬迁、员工安置、生产线重建等。通过精心组织和周密安排,确保了调迁工作的顺利进行。
成果:调迁完成后,振华新云在贵阳市新添高新技术开发区迎来了新的发展机遇,为公司后续的快速发展提供了有力保障。
为了适应电子行业的快速发展和变化,Crowd Supply不断投入资源进行技术创新和平台升级。他们推出了一系列新功能,如智能推荐、数据分析等,以帮助项目方更好地了解市场需求和支持者偏好。同时,平台也加强了与供应链和生产商的合作,确保项目的顺利推进和产品的高质量交付。
三环(CCTC)公司自1970年成立以来,便致力于电子基础材料、电子元件和通信器件的研发与生产。在创立初期,公司面临着技术落后和资金短缺的困境,但通过不懈的努力和持续的研发投入,逐渐在电子行业中崭露头角。公司积极引进国外先进技术和设备,同时培养了一支高素质的研发团队,为后续的发展奠定了坚实的基础。
面对全球化的市场趋势和竞争压力,三环(CCTC)公司制定了国际化战略和全球布局计划。公司将继续加大研发投入力度,提升自主创新能力;同时积极拓展国际市场,加强与国际知名企业的合作与交流;此外还将加强人才培养和引进工作,打造一支高素质、专业化的国际化团队。通过这些措施的实施,三环(CCTC)公司将不断提升自身实力和市场竞争力,为成为全球领先的电子企业而不懈努力。
品质是Cobham Semiconductor Solutions的生命线。公司始终坚持严格的质量管理体系,从原材料采购到生产流程,再到产品出厂,每一个环节都经过严格把控。公司还引入了先进的生产设备和技术,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使得Cobham的产品在市场上赢得了良好的声誉和口碑。
Denyo Europa Gmbh公司在电子行业中崭露头角,始于一次技术创新的突破。公司研发团队经过数年的努力,成功开发出一种新型高效能电池技术,这种电池不仅容量大,而且充电速度快,安全性能高。这一技术的推出,迅速赢得了市场的认可,也为公司带来了可观的收益。公司因此逐渐在电子行业中建立了自己的技术领先地位。
请教如何设置 IAR中的NEAR_I Segment 的大小? 我是用IAR For AVR 5.11B版,在链接时出现以下错误提示: Error[e16]: Segment NEAR_I (size: 0xdb0c align: 0) is too long for segment definition. At least 0xcb4c more bytes needed. The prob ...… 查看全部问答∨ |
NXP LPC1343 开发板 学习之旅(三)------led控制实验 学东西就是要趁热打铁,这样进步才能更快,这不,今天继续跟大家分享下我用上位机控制小灯的实验。 在第二篇学习之旅中,我已经完成了串口的基本调试,在第一篇完场了led的点亮的实验,那么接下来自然而然的 ...… 查看全部问答∨ |
本人急需WIN CE入门! 要求:用VS2005开发,要比"HELLO WORLD"的难度稍微大一点,多用一些控件,当然是常规控件(如:mainMenu ,pictureBox1等),我急需了解其用法(急需)!能附带对数据库操作的最好!… 查看全部问答∨ |
|
记得在十月一号之前有了举办我与51的征文活动的想法, 于是报着试试看的心理我就发了帖子,没想到soso姐很给力啊!不但允许了活动还有情赞助了奖品啊! 于是征文活动这样开始了,大家 ...… 查看全部问答∨ |
|
一个由激光器,红外接收器,2X16的LCD模块和和喇叭组成的报警系统。相信很多人在刚刚学习单片机的时候曾今做过这样子的报警器。先上一张系统的图片这是个国外的小制作,可惜视频连不上(没翻墙,哈哈!)PCB的照片… 查看全部问答∨ |