单片机C程序编译、执行过程.docxVIP

  • 44
  • 0
  • 约2.95千字
  • 约 4页
  • 2020-03-17 发布于江西
  • 举报
单片机 C 程序编译、执行过程 1、编写 C 代码: 预编译代码 定义及声明变量 定义及声明函数 编写程序代码(主函数 MAIN) 2、编译器编译: 1. 预处理 此时编译器会扫描一个一个的 C 源文件,如果发现#include 了某个.h 文件,则把整个.h 文件包 含进.c 文件中,形成一个新的.c 文件(实际的实现过程可能不是这样,但原理是这样的)。同时进 行相关预处理指令的解释工作,譬如将宏替换成实际的值。 2. 编译源文件 此时编译器会扫描经过第 1 步之后新生成的源文件,把源代码编译成机器码,生成目标文件。 如果发现某个类型不是编译器自含的类型,如一些自定义的结构体等,那就会在源文件中查找这个类 型,看看是否可以找到这个类型的声明,如果找不到,则报错。所有的函数只会在编译时生成一个符 号,不查找其实体是否存在。不过如果发现在使用这个函数的代码行之前未能发现此函数的声明,编 译器会给出警告:隐式的函数调用。 3. 链接所有的目标文件 此时编译器就会收集所有目标文件中的符号,例如函数符号,并且查找其实体,如果找不到,则报 错;无错的话会给这些符号分配真正的地址, 分配了地址后,就会替换每个目标文件中的 符号为实际地址,然后合并所有的目标文件为一个可执行文件。 3、编译后的二进制文件: 编译后的二进制码,实际就是把 C 程序编译成了一句句二进制机器指令。 大概开始是告诉单片机,在 RAM 中分配外部变量、全局变量、静态变量等等工作。 然后就是将 C 程序代码编译成二进制机器指令。(什么时候把什么地址的数取出来进行什么操作然 后放在什么地址或寄存器,这些个事了) 执行完 RAM 分配、为变量(全局变量和静态变量)开辟完空间的指令后,程序指针指到主函数 main()处,继续向下一步一步移动,执行初始化机器指令。 遇到调用函数,就会有将主函数中函数调用后的下一条指令(函数调用语句的下一条可执行语句) 的地址、函数的各个参数、函数中的局部变量等按照顺序进行压栈,然后程序指针跳转到要调用 的函数入口地址处,执行函数内部机器代码,执行完成后按照顺序出栈处理,程序指针返回到函 数调用后的下一条指令继续向下执行等机器代码。 遇到中断,就会有类似函数调用(压栈、出栈等)的机器代码,因为执行中断函数,也是一个函 数,原理同普通函数相类似。不同之处,根据不同的中断,程序指针需要先跳转至中断向量表的 地址处,根据中断向量表再跳转到中断函数地址处,执行中断函数。 程序指针在 while()循环里从开始到结束,再跳转到开始到结束,无限循环的执行指令。期间遇 到函数或中断,处理方法与 5)、6)相同。 4、编译后的 hex 文件烧录进单片机: hex 文件烧录进单片机后,保存在单片机的 FLASH 区里,其实就是一堆指令代码。 单片机上电复位后,程序指针自动指向 FLASH 区的第一条指令上,然后单片机逐一读取指令,按 照指令要求去干自己的工作。 ISP 和 IAP 的区别 ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而 不需要从电路板上取下器件,已经编程的器件也可以用 ISP 方式擦除或再编程。IAP(In-Application Programming) 指 MCU 可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。ISP 和 IAP 技术是未来仪器仪表的发展方向。 1 ISP 和 IAP 的工作原理 ISP 的实现相对要简单一些,一般通用做法是内部的存储器可以由上位机的软件通过串口来进行改写。 对于单片机来讲可以通过 SPI 或其它的串行接口接收上位机传来的数据并写入存储器中。所以即使我们 将芯片焊接在电路板上,只要留出和上位机接口的这个串口,就可以实现芯片内部存储器的改写,而无 须再取下芯片。 IAP 的实现相对要复杂一些,在实现 IAP 功能时, 单片机内部一定要有两块存储区,一般一块被称为 BOOT 区,另外一块被称为存储区。单片机上电运行在 BOOT 区,如果有外部改写程序的条件满足,则对存 储区的程序进行改写操作。如果外部改写程序的条件不满足,程序指针跳到存储区,开始执行放在存储 区的程序,这样便实现了 IAP 功能。 2 ISP 和 IAP 在单片机中的应用 2.1 传统编程方法的不足 在一般的单片机的实验或开发时,编程器是必不可少的装置。仿真、调试完的程序需要借助编程器烧 到单片机内部或外接的程序存储器中。普通的编程器价格从几百元到几千元不等,对于一般的单片机用 户来说还是一笔不小的开支。另外,在开发过程中,程序每改动一次就要拔下电路板上的芯片编程后再 插上,这样不但麻烦也很容易对芯片和电路板造成损伤,另外在程序需要升级做改动时,必须将设备返 厂

文档评论(0)

1亿VIP精品文档

相关文档