嵌入式编程与调试:从基础到实践
1. Linux 改变嵌入式编程方式
在传统的嵌入式编程中,嵌入式系统通常由 RAM 和非易失性存储器(如 ROM、PROM、EPROM 或闪存)组成。构建嵌入式系统的传统方法是创建程序的可执行映像,包括所有静态链接的库函数,可能还有一个多任务内核,然后将这个映像加载或“烧录”到一个或多个非易失性存储芯片中。系统启动时,处理器直接从 ROM 中执行这个映像。
而在 Linux 视角下,程序是“文件”,必须在执行前加载到内存中。因此,我们创建一个包含系统运行所需程序文件映像的 ROM “文件系统”,这些程序可能包括各种网络工具和守护进程。这些程序通过启动初始化过程或按需加载到 RAM 中并在那里执行。通常,C 库不是静态链接到这些映像文件,而是动态链接,以便单个库副本可以在给定时间被内存中的任何程序共享。Linux 方法的一个优点是,我们不限于从 ROM 文件系统加载程序文件,也可以通过网络轻松加载程序进行测试。
下面是传统嵌入式编程和 Linux 嵌入式编程的对比表格:
| 对比项 | 传统嵌入式编程 | Linux 嵌入式编程 |
| — | — | — |
| 程序存储与执行 | 创建可执行映像烧录到非易失性存储芯片,从 ROM 直接执行 | 创建 ROM “文件系统”,程序文件加载到 RAM 中执行 |
| 库链接方式 | 静态链接 | 动态链接 |
| 程序加载来源 | 主要从 ROM 加载 | 可从 ROM 文件系统或网络加载 |
2. led 程序分析
2.1 解决 Eclipse 头文件问题
为了理解如何在 Linux