EWARM IAR5.4编译链接过程, 程序运行阶段, ICF ilink配置文件

编译链接过程

编译器, 汇编器和链接器完成将代码转换成可执行文件的过程.

编译过程
首先是编译器和汇编器, 这是链接之前的工作, 生成可重定向的目标文件, 进而可以生成库文件:
命令为: iccarm myfile.c

链接过程
链接器的输入除了有上阶段产生的目标文件和库文件之外, 还需要链接配置文件, 目的是让链接器知道数据段, 代码段等具体放在哪个地址, 类似的还需要知道程序入口地址.
命令为: ilinkarm myfile.o myfile2.o -o a.out --config myconfigfile.icf

后链接过程

经过链接好之后得到的文件就是符合ELF格式的可执行镜像了, 之后可以将这个镜像文件转换成HEX文件烧入到Flash/PROM中去.
-----------------------------------------------------------
程序运行阶段

代码的运行可分为初始化阶段, 执行阶段和结束阶段.

初始化阶段
初始化阶段一般指从程序第一条语句开始到进入main函数之前, 一般由cstartup.s完成, 初始化阶段一般要做:
硬件初始化--堆栈指针, 中断向量, CPU时钟等;
软件初始化--全局变量等;
应用程序初始化--RTOS环境;
执行阶段
通常是循环扫描, 中断驱动, 对于RTOS多任务来说就是任务调度了.

结束阶段

嵌入式程序一般不结束, 但可用exit语句来结束代码运行, 届时所有的资源会被回收.

-----------------------------------------------------------
链接配置文件icf

链接器通常会将应用程序分成好几个段, 譬如有bss段、data段、text段. 
具体为:
一般认为已初始化的全局变量保存在.data段中, 未初始化的全局变量保存在.bss段中.

IAR的icf文件有专门的语句来配置不同的程序段, 一个简单的icf文件的片段如下:
在icf文件中也可以找到__iar_program_start标志位, 用于表示cstartup.s的入口地址.

-----------------------------------------------------------
参考:EWARM_DevelopmentGuide.ENU.pdf

你可能感兴趣的:(IAR,IAR)