浮云落笔

浮云落笔

首页
瞬间
反馈
浮云落笔

浮云落笔

首页 瞬间 反馈
  1. 首页
  2. stm32
  3. 2.4 编译产物与F5调试全流程

2.4 编译产物与F5调试全流程

  • stm32
  • 发布于 2026-09-14
  • 39 次阅读
flor
flor

一、编译成功的标志:size 汇总

make 输出的最后一行是 size 汇总,看到它就代表编译、链接全部通过:

text    data     bss     dec     hex filename
   4736      12    1644    6392    18f8 build/uart.elf

三个关键数的读法:

字段

含义

占用

text

代码 + 常量

占 Flash

data

已初始化变量

占 Flash,启动时拷进 SRAM

bss

清零变量

只占 SRAM

这三个数就是程序对 512KB Flash / 64KB SRAM 的占用量

二、elf / hex / bin / map:一次编译全出

CubeMX Makefile 的 all 目标是 elf + hex + bin 三件套一起出,编译完去 uart/build/ 目录就能看到(连同 map 共四样):

文件

是什么

谁用它

uart.elf

带调试符号的完整档案

gdb(F5 调试、flash-remote.sh 烧录都吃这个)

uart.hex

Intel HEX 文本格式,带地址信息

FlyMcu 等串口烧录工具

uart.bin

裸二进制镜像

部分烧录器 / OTA

uart.map

每个符号放在哪个地址的地图

查内存布局

三、调试:F5 全流程

先编译,再调试

Ctrl+Shift+B 编译。云端 launch.json 没配 preLaunchTask,F5 不会自动编译——改了代码直接 F5、现象没变,99% 是忘了编译(烧的还是旧 elf)。

启动与自动流程

  • F5 → 第一次会让你选调试配置,选 Remote openocd (frp)(之后记住选择不再问)

  • 自动流程:连隧道 → 复位 → 烧录 → 停在 main 入口

常用操作

操作

方式

断点

点行号左侧出现红点;F9 切换

继续

F5

单步跳过

F10

单步进入

F11

跳出

Shift+F11

结束调试

Shift+F5(干净退出,释放 openocd 连接)

左侧三个面板:

  • VARIABLES — 局部/全局变量实时值

  • WATCH — 右键变量 → Add to Watch

  • CALL STACK — 调用堆栈

DEBUG CONSOLE 里可以直接输表达式读寄存器,比如看 GPIOA 输出寄存器:

p/x *(volatile unsigned int*)0x4001080C

外设寄存器图形面板(CORTEX PERIPHERALS)目前 launch.json 还没配 svdFile,可能为空——用控制台表达式读完全够用,想图形化加一行配置即可。

两个正常现象

  1. 断点暂停 = 芯片被 halt,串口停发 abc;F5 继续后恢复

  2. 调试会话独占 openocd——F5 期间跑 flash-remote.sh 会连不上,先 Shift+F5 退出

目录
湘ICP备2025147565号-1
gongan beian 湘公网安备43102602000213号