一、编译成功的标志:size 汇总
make 输出的最后一行是 size 汇总,看到它就代表编译、链接全部通过:
text data bss dec hex filename
4736 12 1644 6392 18f8 build/uart.elf
三个关键数的读法:
这三个数就是程序对 512KB Flash / 64KB SRAM 的占用量
二、elf / hex / bin / map:一次编译全出
CubeMX Makefile 的 all 目标是 elf + hex + bin 三件套一起出,编译完去 uart/build/ 目录就能看到(连同 map 共四样):
三、调试:F5 全流程
先编译,再调试
Ctrl+Shift+B 编译。云端 launch.json 没配 preLaunchTask,F5 不会自动编译——改了代码直接 F5、现象没变,99% 是忘了编译(烧的还是旧 elf)。
启动与自动流程
F5 → 第一次会让你选调试配置,选 Remote openocd (frp)(之后记住选择不再问)
自动流程:连隧道 → 复位 → 烧录 → 停在 main 入口
常用操作
左侧三个面板:
VARIABLES — 局部/全局变量实时值
WATCH — 右键变量 → Add to Watch
CALL STACK — 调用堆栈
DEBUG CONSOLE 里可以直接输表达式读寄存器,比如看 GPIOA 输出寄存器:
p/x *(volatile unsigned int*)0x4001080C
外设寄存器图形面板(CORTEX PERIPHERALS)目前 launch.json 还没配 svdFile,可能为空——用控制台表达式读完全够用,想图形化加一行配置即可。
两个正常现象
断点暂停 = 芯片被 halt,串口停发 abc;F5 继续后恢复
调试会话独占 openocd——F5 期间跑
flash-remote.sh会连不上,先 Shift+F5 退出