file-type

KEIL底层__main函数深入解析

PDF文件

2星 | 下载需积分: 50 | 361KB | 更新于2024-09-09 | 55 浏览量 | 114 下载量 举报 4 收藏
download 立即下载
"深入KEIL底层之__main函数详解" __main函数是KEIL开发环境中一个非常重要的函数,它负责初始化程序运行环境,做一些底层工作。下面我们将深入探讨__main函数的作用、KEIL启动过程、__main函数的实现等方面的知识点。 **__main函数的主要作用** __main函数的主要作用是初始化程序运行环境,做一些底层工作。这些底层工作包括全局变量初始化、函数代码拷贝、堆栈指针初始化等。全局变量初始化和函数代码拷贝的加载地址不是执行地址,需要将加载地址拷贝到执行地址(RAM的.data段)。 **KEIL启动过程** KEIL启动过程主要包括两个步骤:分散加载文件和启动文件。 **1.2.1 分散加载文件** 如果使用KEIL的__main函数或者微库(【Options for Target】->【Target】->【Use MicroLIB】),则分散加载文件中必须将__main和微库函数放在root region,如图1.2所示。其中ER_IROM1的起始地址必须与LR_IROM1的起始地址相同,这样就保证了__main和微库函数在root region中。KEIL工程已经默认为我们做好,所以无需自己操作。 **1.2.2 启动文件** 程序上电后,首先加载SP和PC,ARM规定从0地址处加载SP,从偏移为4的地址(0X00000004)处加载PC。然后将程序控制权交给程序。中断向量表放在程序的0地址处,第一个字存放SP,第二个字存放PC(复位中断函数入口地址),如图1.4所示。 **__main函数的实现** __main函数的实现主要包括工程配置和函数实现两个方面。 **2.1 工程配置** 在KEIL工程配置中,如果勾选了【Use MicroLIB】,宏__MICROLIB会被定义,第275~277行会被编译,如图1.3所示。微库会使用这些“EXPORT”声明的标号,例如malloc函数会用到__heap_base(堆地址)。如果不勾选【Use MicroLIB】,使用ARMC library,则图1.3中的第281~289行会被编译,以提供ARMC library中的函数使用。 **2.2 函数实现** __main函数的实现还需要注意堆栈的设置一般在汇编启动文件中,如图1.5所示。根据启动文件的设置,程序才能正确地启动和运行。 __main函数在KEIL开发环境中扮演着非常重要的角色,它负责初始化程序运行环境,做一些底层工作。理解__main函数的作用、KEIL启动过程和__main函数的实现对KEIL开发环境的使用和应用非常重要。

相关推荐