嵌入式编译

1. 编译流程

嵌入式代码的编译和链接过程涉及多个步骤,将高级语言编写的源代码转换为可以在特定硬件平台上运行的可执行文件。这些步骤包括预处理、编译、汇编和链接。以下是详细的过程介绍:

1.1. 预处理(Preprocessing)

预处理器处理源代码中的宏定义、头文件包含和条件编译指令。生成预处理后的源代码文件。

  • 输入:源代码文件(如 .c 文件)
  • 输出:预处理后的源代码文件(带有扩展的宏和包含的头文件)

命令示例:

arm-none-eabi-gcc -E main.c -o main.i

1.2. 编译(Compilation)

编译器将预处理后的源代码转换为汇编代码。

  • 输入:预处理后的源代码文件(如 .i 文件)
  • 输出:汇编代码文件(如 .s 文件)

命令示例:

arm-none-eabi-gcc -S main.i -o main.s

1.3. 汇编(Assembly)

汇编器将汇编代码转换为目标代码(机器代码),生成目标文件。

  • 输入:汇编代码文件(如 .s 文件)
  • 输出:目标文件(如 .o 文件)

命令示例:

arm-none-eabi-as main.s -o main.o

1.4. 链接(Linking)

链接器将多个目标文件和库文件链接在一起,生成可执行文件。链接过程中,链接器会解析符号(函数和变量),并将各个目标文件中的代码和数据段合并,最终生成可执行文件。

  • 输入:目标文件(如 .o 文件)和库文件
  • 输出:可执行文件(如 .elf 文件)

命令示例:

arm-none-eabi-gcc main.o startup.o -TSTM32F103C8Tx_FLASH.ld -o my_embedded_project.elf
  1. 生成二进制文件(Optional)
    从生成的可执行文件中提取二进制数据或生成其他格式的文件(如 Intel HEX 文件)。
  • 输入:可执行文件(如 .elf 文件)
  • 输出:二进制文件(如 .bin 文件)或 HEX 文件(如 .hex 文件)
    命令示例:
arm-none-eabi-objcopy -O binary my_embedded_project.elf my_embedded_project.bin
arm-none-eabi-objcopy -O ihex my_embedded_project.elf my_embedded_project.hex

2. 连接脚本

3. make

待补充

4. kconfig

5. MAP文件解读

6. ELF文件解读

相关推荐

  1. 嵌入编译

    2024-07-21 07:54:01       12 阅读
  2. 嵌入交叉编译:linux fdk-aac

    2024-07-21 07:54:01       33 阅读
  3. 嵌入跨平台编译:vsftpd

    2024-07-21 07:54:01       25 阅读
  4. 怎样学习嵌入C语言编程

    2024-07-21 07:54:01       64 阅读
  5. 嵌入Linux—Framebuffer应用编程

    2024-07-21 07:54:01       34 阅读
  6. 嵌入Qt开发C++基础编程

    2024-07-21 07:54:01       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 07:54:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 07:54:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 07:54:01       45 阅读
  4. Python语言-面向对象

    2024-07-21 07:54:01       55 阅读

热门阅读

  1. HTTP请求与响应:Python爬虫技术解析

    2024-07-21 07:54:01       17 阅读
  2. 算法刷题笔记 模拟堆(C++实现)

    2024-07-21 07:54:01       15 阅读
  3. 6 回归集成:xgb、lgb、cat

    2024-07-21 07:54:01       17 阅读
  4. 计算机网络发展历史

    2024-07-21 07:54:01       15 阅读
  5. 基于深度学习的医疗数据分析

    2024-07-21 07:54:01       15 阅读
  6. Qunar容器集群监控系统架构实践

    2024-07-21 07:54:01       14 阅读
  7. 三角函数tan

    2024-07-21 07:54:01       15 阅读
  8. SQL Server中的定制视野:实现数据库的自定义视图

    2024-07-21 07:54:01       19 阅读
  9. 【电子数据取证】了解数据库

    2024-07-21 07:54:01       17 阅读
  10. 软件设计模式: 抽象工厂

    2024-07-21 07:54:01       15 阅读
  11. js修改hash的方法

    2024-07-21 07:54:01       14 阅读
  12. 网页制作技术在未来会如何影响人们的生活?

    2024-07-21 07:54:01       16 阅读
  13. Vue学习(一)初识Vue、事件

    2024-07-21 07:54:01       15 阅读