程序的编译链接与执行--IAR
来源:互联网 发布:淘宝搜不到情趣用品 编辑:程序博客网 时间:2024/05/02 00:13
IAR是很多嵌入式平台的编译链接与下载工具,为编程人员提供了极大的方便。下面我将以它为例来详细解说。一般程序下载进入相应的硬件平台需要以下三个阶段:程序的编译、程序的链接、程序的运行。
1.1 程序的编译阶段
编译,首先由编译器和汇编器,生成可重定向的目标文件,或也可以进而生成相应的库文件如下图所示。
而对于生成相应的库文件,这里可以生成相应的静态库与动态库:对于静态库,在编译时需要将所有的数据整合到目标代码中(这种库编译成的文件比较大),所以在程序运行期间可以不需要该库文件的存在。而对于动态库,在编译时未生成相应的目标代码,而是在程序运行期间通过调用库中的函数才会调用库(这和库的执行文件比较小)。
1.2 程序的链接阶段
链接过程是将编译生成的目标文件、库文件与链接配置文件(如.icf等)生成可执行文件.out或内存映射.map文件,如下图所示。而链接配置文件告诉链接器知道程序的存储空间在哪里,程序的入口地址等。详细定义见这里。
map文件,以IAR生成的map文件为例,它分为以下几个区域:
----------Place Summary (显示各section在存储器的分布)
----------Init Table (显示与初始化有关的section table)
----------Module Summary (显示所有被连接的文件信息:包括目标文件与库文件等)
----------Entry List (显示所有函数的入口地址及其所在的目标文件)
----------结尾 (显示了总的代码与数据字节数) --->可以目标代码占用多少flash与RAM空间
162640 bytes of read-only code memory (flash)
45340 bytes of read-only code memory (flash)
111361 bytes of readwrite data memory (ram)
1.3 程序的运行阶段
程序的运行阶段包括程序的初始化、执行阶段、结束阶段。这里重点讲下程序的初始化阶段:硬件初始化、软件的初始化、应用程序初始化。硬件初始化:相应平台的硬件连接来决定从哪里启动,flash或ram启动。如stm32f215V/R/ZG平台,由硬件引脚boot0 boot1两个引脚的不同来确定从哪里启动。
软件初始化与应用程序的初始化:对于IAR对于相应平台的初始化由cStartup.s实现。它会指定中断向量表的地址、PC程序计数与SP栈指针、时钟与全局变量的初始化等。
0 0
- 程序的编译链接与执行--IAR
- 程序的编译与链接
- c的编译链接与执行
- 【编译原理】程序的编译链接执行过程
- 程序的编译、链接与装载
- 程序的编译、链接与装载
- 程序的编译、链接与装载
- ELF文件格式与程序的编译链接
- 程序的编译、链接与装载
- 程序的实现过程(编译、链接、执行)
- 程序的编译,链接
- 程序的编译、链接
- Java 程序编译与执行
- IAR的编译过程
- VC++程序编译链接的原理与过程
- 【C】程序的编译与链接--简单介绍
- IAR的中断程序
- 程序的编译和链接
- 日立硬盘丢失数据怎么办
- GCD的简单用法
- 类集框架(二)
- Javascript模块化编程详解
- java学习--多线程(2)
- 程序的编译链接与执行--IAR
- poj 1947 Rebuilding Roads (树形dp)
- 常用div+CSS的命名规范
- Android Eclipse关联 android API doc文档
- Java单例模式
- 2014ACM Regional北京现场赛B题——HDU5113
- C#—Main方法
- Java – Read a file from resources folder
- 使用cocos-2dx 3.x 封装的PageView