关于使用ARMcc和gcc编译C文件的整个流程

使用 Keil 编译 C 语言文件时,从 .c 文件到最终的 .bin 文件的生成过程是这样的:

1. 预处理阶段 (.c -> .i 文件):

  • 在编译开始时,Keil 会首先进行 预处理。这个阶段包括:

    • 处理所有的宏定义(例如 #define)、文件包含(例如 #include)和条件编译指令(例如 #ifdef)。

    • 预处理之后,编译器会生成一个 .i 文件,这个文件包含了处理后的 C 源代码,已经包含了所有的头文件和宏展开。

2. 编译阶段 (.i -> .s 文件):

  • 接下来,编译器 将预处理后的 .i 文件转换成 汇编语言。这个过程的输出是 .s 文件,其中包含了目标平台的汇编代码。汇编代码是人类可读的,但它仍然是面向特定处理器架构的低级指令。

3. 汇编阶段 (.s -> .o 文件):(这里gcc对应.obj文件)

  • 汇编阶段,汇编器(Assembler)会将 .s 文件转换成机器语言,即 目标代码。这个过程的输出是 .o 文件(目标文件)。目标文件包含了机器码,但它还不能直接执行,因为它还需要链接阶段的处理。

4. 链接阶段 (.o -> .axf 文件):(这里gcc对应.elf文件)

  • 链接阶段,链接器(Linker)将多个 .o 文件(目标文件)和所需的库文件链接成一个完整的可执行文件。在 Keil 中,通常会生成一个 .axf 文件(ARM Executable File)。

  • .axf 文件是Keil的标准可执行文件格式,包含了所有程序代码、数据、符号表等信息。它可以在调试过程中使用,并且用于烧录到嵌入式设备中。

5. 生成 .bin 文件:(这里gcc对应.hex文件)

  • 最后,如果需要生成纯二进制格式的文件,Keil 会使用 转换工具(例如 fromelf)将 .axf 文件转换成 .bin 文件。这个文件是纯粹的二进制代码,去除了所有调试和符号信息,只包含程序的机器码部分。

  • 命令示例(在Keil中使用 fromelf):

    fromelf --bin program.axf --output program.bin
    

总结:

整个流程是:

  1. .c 文件 预处理生成 .i 文件

  2. .i 文件 编译生成 .s 文件

  3. .s 文件 汇编生成 .o 文件

  4. .o 文件 链接生成 .axf 文件

  5. 最后使用 fromelf 或类似工具生成 .bin 文件(纯二进制文件)

这个流程适用于嵌入式开发环境,特别是使用 Keil 的 ARM 开发板。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值