编译链接过程
2011年12月1日
编译器, 汇编器和链接器完成将代码转换成可执行文件的过程.
编译过程:
首先是编译器和汇编器, 这是链接之前的工作, 生成可重定向的目标文件, 进而可以生成库文件:
命令为: iccarm myfile.c
链接过程:
链接器的输入除了有上阶段产生的目标文件和库文件之外, 还需要链接配置文件, 目的是让链接器知道数据段, 代码段等
具体放在哪个地址, 类似的还需要知道程序入口地址.
命令为: ilinkarm myfile.o myfile2.o -o a.out --config myconfigfile.icf
后链接过程
经过链接好之后得到的文件就是符合ELF格式的可执行镜像了, 之后可以将这个镜像文件转换成HEX文件烧入到Flash/PROM
中去.
分区 新分区 2 的第 1 页
中去.
-----------------------------------------------------------
程序运行阶段
代码的运行可分为初始化阶段, 执行阶段和结束阶段.
初始化阶段
初始化阶段一般指从程序第一条语句开始到进入main函数之前, 一般由cstartup.s完成, 初始化阶段一般要做:
硬件初始化--堆栈指针, 中断向量, CPU时钟等 软件初始化--全局变量等 应用程序初始化--RTOS环境
分区 新分区 2 的第 2 页
分区 新分区 2 的第 3 页
执行阶段
通常是循环扫描, 中断驱动, 对于RTOS多任务来说就是任务调度了.
结束阶段
嵌入式程序一般不结束, 但可用exit语句来结束代码运行, 届时所有的资源会被回收.
-----------------------------------------------------------
链接配置文件icf
链接器通常会将应用程序分成好几个段, 譬如有bss段、data段、text段.
具体为:
一般认为已初始化的全局变量保存在.data段中, 未初始化的全局变量保存在.bss段中.
分区 新分区 2 的第 4 页
IAR的icf文件有专门的语句来配置不同的程序段, 一个简单的icf文件的片段如下:
在icf文件中也可以找到__iar_program_start标志位, 用于表示cstartup.s的入口地址.
-----------------------------------------------------------
参考:EWARM_DevelopmentGuide.ENU.pdf
源文档
分区 新分区 2 的第 5 页