首页 > 其他分享 >代码(CODE)到二进制(BIN)文件的编译过程

代码(CODE)到二进制(BIN)文件的编译过程

时间:2024-05-12 09:52:21浏览次数:14  
标签:BIN 文件 烧录 CODE 转换成 二进制 代码 编译器

这些步骤将源代码转换成可以在目标硬件上执行的机器代码。以下是这个过程的一般描述:

预处理(Preprocessing):
源代码(如 .c、.cpp、.s 等)首先被预处理。
预处理器处理源文件中的宏定义、条件编译指令、包含指令(如 #include)等。
预处理器的输出通常是一个 .i 或 .ii 文件,它包含了所有宏替换后的源代码。


编译(Compilation):
编译器将预处理后的代码转换成汇编代码。
对于高级语言(如 C 或 C++),编译器会进行语法分析、语义分析、优化等步骤。
编译器的输出通常是一个或多个 .s 或 .asm 文件,这些文件包含了汇编指令。


汇编(Assembly):
汇编器将汇编代码转换成机器代码。
汇编器处理汇编指令,将其映射到对应的机器指令,并生成相应的二进制数据。
汇编器的输出是对象文件(.o 或 .obj),这些文件包含了机器代码、调试信息和符号表。


链接(Linking):
链接器将多个对象文件以及库文件(.lib 或 .a)组合成一个单一的程序。
链接器解决外部引用,将分散在不同对象文件中的函数和变量进行地址重定位。
链接器还负责将程序中的各个部分放置到正确的内存地址,并添加启动代码、中断向量等。
链接器的输出是一个可执行文件(格式可能因操作系统和编译器而异,如 .exe、.out 或 .elf、.axf、.FLM)。


转换到二进制格式(Conversion to Binary):
在嵌入式开发中,通常需要将可执行文件转换成二进制格式,以便可以直接烧录到目标硬件上。
这个步骤可以通过不同的工具完成,如编程器或烧录软件。
转换工具将可执行文件中的机器代码和数据转换成目标硬件可以直接执行的二进制格式(.bin)。
在这个过程中,可能会根据目标硬件的要求进行额外的格式转换或数据调整。


烧录(Flashing):
最后,将生成的二进制文件烧录到目标硬件的存储器中。
烧录可以通过编程器、调试器或专门的烧录软件完成。

 

标签:BIN,文件,烧录,CODE,转换成,二进制,代码,编译器
From: https://www.cnblogs.com/icaowu/p/18187517

相关文章

  • AtCoder Beginner Contest 353
    A-Buildings(abc353A)题目大意给定\(n\)个数字,输出第一个大于第一个数的下标。解题思路依次与第一个数比较,大于则输出。神奇的代码n=input()a=list(map(int,input().split()))b=[i>a[0]foriina]ifTruenotinb:print(-1)else:print(b.ind......
  • Leedcode-数字的补数
    自己写的:classSolution:deffindComplement(self,num:int)->int:#初始化一个空字符串,用于存储二进制表示bin_str=''#将输入的数字转换为二进制表示,存储在bin_str中whilenum>0:bin_str=str(num......
  • [code notes] check_agg_arguments
    TheSQLselectsum(sum(a))frommyt1groupbya;Thisnotefocusesonlyonsum(sum(a))andit'sabouthowpostgresrejectsthesqlabove.Notessum(sum(a))|||||\_innermostargument,Varnode|\_ functioncall\_functioncal......
  • Codeforces Round 944 (Div. 4) 补题
    A.MyFirstSortingProblemYouaregiventwointegersxandy.Outputtwointegers:theminimumofxandy,followedbythemaximumofxandy.题意:给你两个整数求出最小值和最大值Code:#include<bits/stdc++.h> usingnamespacestd;#definedebug(x)cer......
  • 【LeetCode 162】寻找峰值
    题目描述原题链接:LeetCode.162寻找峰值解题思路数组相邻元素不相等,峰值可能有多个,整个数组的最大值肯定是峰值之一,直接遍历数组获取最大值也能得到答案;但是写明复杂度要求O(logn)就是否定了最简单的O(n)遍历解法,需要用二分法;按照题意数组边界另一端等同于无穷小,可......
  • 云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!
    从可视化编排到支持YAML编排云效流水线Flow是开箱即用的企业级持续集成和持续交付工具,支持丰富的代码源、构建、自动化测试工具、多种部署类型和部署方式,与阿里云深度集成,还提供多种企业级特性,助力企业高效完成从开发到上线CICD过程。在业界,流水线产品通常有2种使用方式......
  • 云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!
    从可视化编排到支持YAML编排云效流水线Flow是开箱即用的企业级持续集成和持续交付工具,支持丰富的代码源、构建、自动化测试工具、多种部署类型和部署方式,与阿里云深度集成,还提供多种企业级特性,助力企业高效完成从开发到上线CICD过程。在业界,流水线产品通常有2种使用方式......
  • Codeforces 832E Vasya and Shifts
    考虑到这个操作实际上就是\(5\)进制的不进位加法,其实也就是\(5\)进制下的异或。同时因为是\(5\)进制,对于\(x\in[1,4]\),\(x\times0,\cdots,x\times4\)刚好可以表示出\(0\sim4\)。于是可以考虑类似\(2\)进制的线性基弄个\(5\)进制的线性基。即令\(w_i\)为......
  • 设置.md文件默认以typora打开而不是默认以vs code打开
    在Windows10/11中,你可以通过以下步骤来更改文件扩展名的默认打开程序:打开“设置”(可以通过开始菜单或使用Win+I快捷键)。点击“应用”选项。在左侧菜单中,点击“默认应用”。在右侧,找到“按文件类型指定默认应用”,并点击它。在下拉菜单中,找到“.md”,选择“Typora”。这将......
  • Codeforces 1971H ±1
    考虑到因为只有\(3\)行,所以第\(2\)行为\(1\)的条件就是\(1\)的个数\(\ge2\)。对于这种只能去正负且有无解的问题,可以想到用个\(\text{2-SAT}\)。于是接下来考虑用\(\operatorname{AND},\operatorname{OR},\operatorname{XOR}\)来表示至少有\(2\)个\(1\)。考......