当前位置: 首页 > news >正文

Keil-MDK程序运行和下载过程

C语言编译过程

(一)预处理

以“#”号开头的预处理指令,比如包含#include,宏定义指定#define等。在源程序中这些指令都放在函数之外,而且一般放在源文件的前面。使用预处理器把源文件(c/h)经过预处理生成xxx.i文件。(简单来说就是展开程序中的宏等)

(二)编译

指将经过预处理文件(xxx.i)之后的程序转换成特定汇编(xxx.s)代码的过程。

(三)汇编

汇编过程将上一步生成的汇编代码转换成机器码,这一步产生的文件叫做目标文件,是二进制格式。

(四)链接

链接过程使用链接器将上述目标文件与其它目标文件、库文件、启动文件等链接起来生成可执行文件。其他目标文件包括静态连接库和动态连接库。在链接的过程中分为动态链接(库代码不在可执行文件中,可执行文件包含了需要加载的库的路径信息和符号信息),静态链接(将所有目标文件和所需要的库在编译的时候一并打包进最终的可执行文件)和混合链接(既有动态链接也有混合链接)

MDK编译过程

  1. 编译。Keil MDK 软件使用的编译器是 armcc 和 armasm,它们根据每个 c/c++ 和汇编源文件编译成对应的以“.o”为后缀名的对象文件 (Object Code,也称目标文件),其内容主要是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息。
  2. 链接。链接器 armlink 把各个.o 文件及库文件链接成一个映像文件“.axf”或“.elf”。
  3. 格式转换,一般来说 Windows 或 Linux 系统使用链接器直接生成可执行映像文件 elf 后,内核根据该文件的信息加载后,就可以运行程序了,但在单片机平台上,需要把该文件的内容加载到芯片上,所以还需要对链接器生成的 elf 映像文件利用格式转换器 fromelf 转换成“.bin”或“.hex”文件,交给下载器下载到芯片的 FLASH 或 ROM 中。最终放在Flash里的是.bin文件

STM32中程序执行的过程

将C语言编译后烧录进Flash中:

对于CPU来讲,对SRAM的访问数据要比对FLASH访问数据要快的多,所以才需要将变量这些数据放在SRAM上

扩展

http://www.dtcms.com/a/393260.html

相关文章:

  • 【Linux驱动】Linux字符设备框架
  • python、数据结构
  • 数字孪生能做什么?(续)
  • C++指针:高效编程的核心钥匙
  • WIN11操作系统安装PL2303TA USB转串口驱动问题
  • ​​[硬件电路-280]:两相步进电机的功能、四个接口信号与工作原理详解(电能转化为机械能)
  • conda换源
  • 博客系统UI自动化测试报告
  • 大语言模型 LLM 通过 Excel 知识库 增强日志分析,根因分析能力的技术方案(6):vLLM 为什么能够成为企业级推理事实上的标准?
  • Redis最佳实践——秒杀系统设计详解
  • 数字孪生能做什么?
  • 每天学习一个统计检验方法--协方差分析 (ANCOVA)(以噩梦障碍中的心跳诱发电位研究为例)
  • 2025年CSP-J初赛真题及答案解析
  • OpenHarmony电量与LED灯颜色定制开发
  • OpenHarmony 显示Display驱动全栈解析:DisplayLayer + Gralloc + Gfx 三位一体,打造高性能图形底座
  • 诊断中的一些复位跳转
  • Python爬虫实战:临近双节,构建携程网最新特价机票数据采集与推荐系统
  • 容器主机名设置在云服务器多容器环境的配置流程
  • UE5 socket通信
  • 如何用kimi写一个最小pdf查看软件
  • DTS和PTS
  • 【开题答辩实录分享】以《“平安行”驾校信息管理系统的设计与实现》为例进行答辩实录分享
  • Modbus RTU/TCP转EtherNet/IP网关配置:西门子PLC控制伦茨变频器
  • GEO完全指南:AI时代内容优化的新范式
  • 02-安装DRF框架
  • 浅谈矩阵在机器学习线性回归算法中的数学推导
  • Linux 系统编程中的Redis
  • 【OpenGL】绘制彩色立方体
  • 21.继承与混入
  • Python 开发!ImprovePdf 用算法提升PDF清晰度,免费开源工具