STM32CubeIDE中nm输出的$d、$t符号含义及参考资料咨询
关于ARM GCC编译后nm输出中$d、$t符号的含义解析
问题场景
在Windows 10 64位系统的STM32CubeIDE环境中,编译C源码后执行nm FX_LMS.o得到如下符号输出:
F:\STM32CubeIDE\LMS\ANC_fxlms_v1\Debug\Core\Src>nm FX_LMS.o 00000000 b $d 00000298 t $d 00000000 b $d 000000b4 t $d 00000000 b $d 00000544 t $d 00000024 t $d 00000000 b $d 000002b0 t $d 00000000 d $d 000001f8 t $d 00000000 b $d 00000178 t $d 00000000 b $d 00000000 b $d 00000000 b $d 000000f0 t $d 00000000 b $d 00000058 t $d 00000000 b $d 00000000 b $d 00000000 b $d 00000000 b $d 00000000 b $d 00000050 t $d 00000000 b $d 000005ec t $d 00000000 b $d 00000664 t $d 00000000 b $d 00000000 b $d 0000003c t $d 00000000 t $t . . . 00000000 t $t 00000000 t $t U ADC_DMAError U ADC_Enable 00000001 T ADC_Start_DMA_double 0000010c d aecho.0 . . .
本次编译使用的命令如下:
21:04:01 **** Incremental Build of configuration Debug for project ANC_fxlms_v1 **** make -j8 all arm-none-eabi-gcc "../Core/Src/FX_LMS.c" -mcpu=cortex-m7 -std=gnu11 -g3 -DDEBUG -DARM_MATH_CM7 -DUSE_HAL_DRIVER -DSTM32H743xx -c -I../Core/Inc -I"F:/STM32CubeIDE/LMS/ANC_fxlms_v1/Core/Inc/drv" -I"F:/STM32CubeIDE/LMS/ANC_fxlms_v1/Drivers/CMSIS/DSP/Include" -I../Drivers/STM32H7xx_HAL_Driver/Inc -I../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32H7xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"Core/Src/FX_LMS.d" -MT"Core/Src/FX_LMS.o" --specs=nano.specs -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb -o "Core/Src/FX_LMS.o"
核心问题:上述输出中的$d、$t符号具体含义是什么?有哪些可解释这些符号的参考资料?
符号含义解析
$d符号
$d是调试专用符号,由编译器在Debug模式下生成,用于支撑调试器的信息解析(比如行号映射、变量类型追踪等),不会进入最终运行的固件镜像。- 符号前的前缀字母表示其所在的内存段:
b:该$d符号位于未初始化数据段(BSS),对应调试相关的未初始化辅助数据d:该$d符号位于已初始化数据段(data),对应调试相关的已初始化辅助数据t:该$d符号位于代码段(text),对应调试相关的代码位置标记信息
$t符号
$t是编译器生成的本地临时代码符号,对应编译过程中插入的辅助执行代码(比如栈帧初始化逻辑、调试桩、临时计算片段等)。- 前缀小写
t表示该符号仅具有本地作用域,不会被其他目标文件引用;与之相对的大写T则表示全局可见的函数符号(比如示例中的ADC_Start_DMA_double)。这类符号主要用于编译调试过程,用户代码不会直接调用。
参考资料
- ARM GNU Binutils文档:
arm-none-eabi-nm属于GNU Binutils的ARM移植版本,可通过执行arm-none-eabi-nm --help查看符号类型的简要说明,或查阅GNU Binutils官方手册中关于符号属性的章节。 - GCC官方文档:在GCC的调试信息生成、代码生成章节中,详细说明了编译器生成这类辅助符号的规则和用途。
- STM32CubeIDE帮助文档:在IDE内置帮助中搜索"nm工具符号解析"或"GCC编译符号类型",可获取针对STM32嵌入式场景的适配说明。
内容的提问来源于stack exchange,提问作者mohammadsdtmnd
相关产品推荐
相关产品推荐

