Keil MDK 编译程序

1、Keil MDK 编译按钮
  1. Build 按钮:重新编译整个工程的所有源文件,无论它们是否被修改过
  1. Rebuild 按钮:仅编译修改过的文件及其依赖项,未修改的文件直接使用之前的编译结果
2、Keil MDK 编译结果
linking...
Program Size: Code=1340 RO-data=336 RW-data=12 ZI-data=1324  
FromELF: creating hex file...
"..\..\Output\atk_f103.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01
  • 这是 Keil MDK 编译成功后的输出信息,表明程序已经顺利通过编译并生成了目标文件
linking...
  • 编译完成后进入链接(Linking)阶段,将所有的 .o 目标文件、库文件合并成最终的可执行文件,例如,.axf.hex
Program Size: Code=1340 RO-data=336 RW-data=12 ZI-data=1324  
  • 程序在内存中的占用情况,分为 4 个部分
  1. Code=1340:代码段(1340 字节),存放程序代码,例如,函数、指令

  2. RO-data=336:只读数据段(336 字节),存放常量,例如,const 变量、字符串常量

  3. RW-data=12:读写数据段(12 字节),存放已初始化的全局 / 静态变量,需在运行时从 Flash 加载到 RAM

  4. ZI-data=1324:零初始化数据段(1324 字节),存放未初始化的全局 / 静态变量,运行时由启动代码初始化为 0

  • 关键公式如下
  1. Flash 占用 = Code + RO-data + RW-data

  2. RAM 占用 = RW-data + ZI-data

FromELF: creating hex file...
  • 将生成的 .axf 文件(ELF 格式)转换为烧录文件(例如,.hex.bin),用于下载到单片机 Flash 中
"..\..\Output\atk_f103.axf" - 0 Error(s), 0 Warning(s).
  • 编译结果如下
  1. ..\..\Output\atk_f103.axf:输出文件路径

  2. 0 Error(s):错误统计,0 表示编译完全通过,无致命问题

  3. 0 Warning(s):警告统计,0 表示代码规范良好

Build Time Elapsed: 00:00:01
  • 本次编译耗时,耗时短说明工程较小或仅触发了部分编译

Keil MDK 烧录程序

  1. 这里使用 ST-LINK 调试编程工具来烧录程序

  2. ST-LINK 主要用于 STM32 系列 ARM Cortex-M 微控制器的开发

  3. ST-LINK 支持烧录程序、在线调试、擦除等功能

1、基础配置
  1. 点击 【Options for Target】
  1. 点击 【Debug】 -> 选择 【ST-Link Debugger】 -> 勾选 【Load Application at Startup】 -> 勾选 【Run to main()】
  1. 点击 【Utilities】 -> 勾选 【Use Debug Driver】
  1. 点击 【Setting】
  1. 选择 【ST-LINK/V2】 -> 选择 【SW】 -> 在 【SW Device】 中查看设备识别结果
2、下载算法配置
  1. 点击 【Options for Target】
  1. 点击 【Utilities】 -> 点击 【Setting】
  1. 勾选并选择下载算法(算法需要根据实际设备选择)
3、烧录程序
  1. 点击 【Download】
  1. 出现烧录结果
Load "..\\..\\Output\\atk_f103.axf" 
Erase Done.
Programming Done.
Verify OK.
Application running ...
Flash Load finished at 12:41:49
4、烧录结果解读
Load "..\\..\\Output\\atk_f103.axf"
  1. 加载 Keil MDK 生成的 可执行文件
Erase Done.
  1. 设备的 Flash 存储区已被擦除,确保旧程序不会残留影响新程序
Programming Done.
  1. 程序已成功写入设备的 Flash 存储器
Verify OK.
  1. 验证 Flash 中的数据与 .axf 文件一致,无校验错误
Application running ...
  1. 程序已自动运行
Flash Load finished at 12:41:49
  1. 烧录过程完成的时间戳,整个流程无报错

补充学习

1、下载算法
  1. 下载算法是用于将程序烧录到设备 Flash 存储器中的关键组件

  2. 下载算法定义了如何擦除、编程、校验 Flash 的内容

  3. 下载算法是一个小型程序,通常由设备厂商或 IDE 提供

2、调试编程工具与下载算法
  • ST-LINK 等调试编程工具在烧录程序时,依赖下载算法来完成对设备 Flash 的擦除、编程、校验操作
  1. ST-LINK 等调试编程工具是搬运工,负责与设备通信并加载算法

  2. 下载算法是操作手册,告诉设备如何进行操作

  • 要根据不同的设备,选择不同调试编程工具和下载算法
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐