版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。请勿用于商业用途,否则将追究法律责任。http://blog.csdn.net/wfq0624
详细可参考http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0206ic/Chdcgbjd.html
Realview 编译工具开发指南.pdf 【第三章】
使用分散载入描述文件(链接脚本文件)时,Image$$RW$$Base、Image$$RW$$Limit、Image$$RO$$Base、Image$$RO$$Limit、Image$$ZI$$Base 和Image$$ZI$$Limit 符号是未定义的。
因为默认的实现使用Image$$ZI$$Limit地址作为堆的基地址,所以使用分散加载文件,启动代码里一定要使用__user_initial_stackheap()来重新设置堆栈和堆。
在分散加载时,连接器会将用户的__user_initial_stackheap()函数代替C库函数默认的堆栈和堆初始化函数,并将其连接到用户的镜像文件中,用户可通过重新实现__user_initial_stackheap()函数来改变堆栈和堆的位置,从而适合自己的目标硬件。
__user_initial_stackheap()可以用C或汇编语言来实现。它必须返回如下参数:
R0—堆基地址(heap base)
R1—堆栈基地址(Stack base)
R2—堆长度限制值(heap limit)
R3—堆栈长度限制值(Stacklimit)
当用户使用分散加载功能的时候,必须重新实现__user_initial_stackheap (),否则链接程序显示以下出错信息: Undefined symbol Image$$ZI$$Limit (referredfrom sys_stackheap.o)。
注:Image$$ZI$$Limit变量为零初始化段(ZI段)的末地址。未使用分散加载时,堆默认就定位在ZI段的末地址,如图2所示。
__user_initial_stackheap()函数的实现有两种方法。
共用一个存储区,汇编语言如下:
这种方式定义的堆栈和堆共用一个存储区,采用相向的增长方向
使用两个存储区,汇编语言如下:
这种方式定义的堆栈和堆分别采用两个不同存储区。堆栈采用向下增长,从地址0x40000到地址0x20000;堆采用向上增长,从地址0x28000000到地址0x28080000
分享到:
相关推荐
Keil_ARM_MDK_5.00_Keygen_serial_Crack.exe,KEIL最新序列号
keil全系列破解用工具(Keil_ARM_MDK_5.00_Keygen_serial_Crack),要用管理员权限使用
最近使用新版本的MDK,发现Ti的Stellaris ICDI调试器选项没了,因此TIVA C就无法直接使用keil来调试了。原来是新版本529之后都被移除了,但是keil官方有给出独立的调试器安装包,安装后就可以继续使用了。
STM32 keil mdk启动代码发分析_转2010年01月29日 星期五 13:50 ;// <h> Stack Configuration ;// <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ;// </h> Stack_Size EQU 0x00000200 ;//定义堆栈大小 AREA ...
MDK-ARM_pid_stm32f407keil5_stm32f407_电机PID_mdk-arm_源码.zip
MDK-ARM_pid_stm32f407keil5_stm32f407_电机PID_mdk-arm_源码.rar
RealView_MDK_2440_快速开发快速入门RealView_MDK_2440_快速开发快速入门
DUI0801A_armasm_user_guide.pdf DUI0801A_armasm_user_guide.pdf DUI0801A_armasm_user_guide.pdf
STM32_MDK启动代码分析(精)STM32_MDK启动代码分析(精)STM32_MDK启动代码分析(精)
MDK最详细中文手册。keil是目前应用最广的编译软件,可编译包括51和ARM处理器在内的大多数处理应用程序。本文档详细说明了软件的基本使用以及一些高级应用说明。
MDK安装包513_523_crack
keil_MDK_and_keygen_new_安装说明.zip
CooCox_Colink_MDK_Plugin_V1.81_Setup,用于安装keil上的coocox仿真器的驱动程序
MDK1766uIP_TCP_IP
SeggerEval_STM32F103_MB672_CM3_KEIL_MDK_GUI_OS_120425
Keil_MDK-ARM_5.28a_Downloadly.ir.rar Keil For ARM 5.28版本。MDK:Microcontroller Developer Kit微控制器开发工具。 Keil MDK-ARM是美国Keil软件公司(现已被ARM公司收购)出品的支持ARM微控制器的一款IDE(集成...
此文详细介绍ARMCC的高级用法,不同于网上零碎的__attribute__知识,本文系统地介绍了__attribute__的各种高级用法.
MDK环境下,C++与C混合编程宝典,深入阅读此文,可以避免和解决MDK环境下C与C++混合编程的诸多问题,比如stdout的问题,BKT 0xab的问题。
实际工程用的代码,可以直接使用。经过stm32f103vet6实际测试。
CMSIS目前支持三大主流的工具链,即ARM RealView (armcc), IAR EWARM (iccarm), and GNU Compiler Collection (gcc). 在core_cm3.h中有如下定义: /* define compiler specific symbols */ #if defined ( __CC_...