《嵌入式C编程实战》——1.5 软件开发工具

本节书摘来自异步社区《嵌入式C编程实战》一书中的第1章,第1.5节,作者【瑞典】Lars Bengtsson(本特松) , Lennart Lindh(林德), 李华峰 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.5 软件开发工具

现在有很多的软件开发语言,如C、C++、ADA、LISP等。软件的开发都遵循标准化的过程。程序(源代码)可以被编译成目标对象可以执行的代码,一些编译器会将代码转换为汇编程序。而链接器将程序与用到的库文件和其他一些东西组织在一起,而且所有的基地址都是绝对地址。链接器最后产生的可以被下载到目标系统并执行的机器代码,如图1.11所示。


screenshot

1.5.1 编译器

编译器是一种计算机软件,它的作用是将源程序转换为目标程序。通常,通过两个步骤,就可以将一个C语言编写的程序转换为目标程序。第一步,将C程序转换为汇编程序;第二步,将汇编转换为目标程序。目标程序不能直接载入到系统中,它还需要和其他目标代码文件链接到一起。

目标程序可能会需要与设备驱动程序和其他程序组织在一起,这一点需要由链接器来实现。编译器不会将符号地址转换为真实地址。因此,这里即使只有一个目标程序,也必须使用链接器来完成地址转换。

1.5.2 链接器

链接器允许将不同的模块组织成一个程序,而程序员使用链接器的历史可以追溯到1947年。
链接器的定义

链接器是一个程序,可以将目标程序模块组织在一起,形成一个可执行的程序。简单地说,就是它将多个文件组合到了一起。

目标程序是指一种包含了机器代码和信息的程序模块。这些模块最后需要链接器进行组装。

大多数的编程语言(如C)都允许独立地进行模块的编写。这样做简化了编程的工作,因为你可以将一个大型的程序分解为多个更小、更容易管理的部分。

最后,将这些模块组合在一起,这是链接器的工作。图1.12给出了程序链接的过程。


screenshot

elf=可执行链接格式。

宋宝华嵌入式 C/C++语言精华文章集锦 C/C+语言 struct 深层探索 ............................................................................2 C++中 extern "C"含义深层探索........................................................................7 C 语言高效编程的几招...............................................................................11 想成为嵌入式程序员应知道的 0x10 个基本问题 .........................................................15 C 语言嵌入式系统编程修炼...........................................................................22 C 语言嵌入式系统编程修炼之一:背景篇 ............................................................22 C 语言嵌入式系统编程修炼之二:软件架构篇 ........................................................24 C 语言嵌入式系统编程修炼之三:内存操作 ..........................................................30 C 语言嵌入式系统编程修炼之四:屏幕操作 ..........................................................36 C 语言嵌入式系统编程修炼之五:键盘操作 ..........................................................43 C 语言嵌入式系统编程修炼之六:性能优化 ..........................................................46 C/C++语言 void 及 void 指针深层探索 .................................................................50 C/C++语言可变参数表深层探索 .......................................................................54 C/C++数组名与指针区别深层探索 .....................................................................60 C/C++程序员应聘常见面试题深入剖析(1) ..............................................................62 C/C++程序员应聘常见面试题深入剖析(2) ..............................................................67 一道著名外企面试题的抽丝剥茧 ......................................................................74 C/C++结构体的一个高级特性――指定成员的位数 .......................................................78 C/C++中的近指令、远指针和巨指针 ...................................................................80 从两道经典试题谈 C/C++中联合体(union)的使用 ......................................................81 基于 ARM 的嵌入式 Linux 移植真实体验 ................................................................83 基于 ARM 的嵌入式 Linux 移植真实体验(1)――基本概念 ...........................................83 基于 ARM 的嵌入式 Linux 移植真实体验(2)――BootLoader .........................................96 基于 ARM 的嵌入式 Linux 移植真实体验(3)――操作系统 ..........................................111 基于 ARM 的嵌入式 Linux 移植真实体验(4)――设备驱动 ..........................................120 基于 ARM 的嵌入式 Linux 移植真实体验(5)――应用实例 ..........................................135 深入浅出 Linux 设备驱动编程 .......................................................................144 1.Linux 内核模块..............................................................................144 2.字符设备驱动程序 ...........................................................................146 3.设备驱动中的并发控制 .......................................................................151 4.设备的阻塞与非阻塞操作 .....................................................................157
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值