shashaa 发表于 2025-11-22 20:22

printf功能依赖C标准库的重定向实现

SWV ITM(printf)在 main.cpp(C++)中无法正常工作,但在 main.c 中却运行完美。问题似乎出在 main.cpp 上,但不知道什么原因。

该项目已转换为 C++,但生成的仍然是 main.c 文件而不是 main.cpp。是手动将其重命名为 main.cpp。每当我更改 .ioc 文件时,CubeIDE 中的 CubeMX 生成的仍然是 main.c 而不是 C++ 文件。有没有办法自动生成扩展名为 .cpp 的源文件?因为手动重命名常常会导致人为错误

androidbus 发表于 2025-11-22 20:31

依赖C标准库的重定向实现

litengg 发表于 2025-11-22 20:34

使用C头文件时候,避免链接错误。            

qiangweii 发表于 2025-11-22 20:35

使用的时候,将硬件相关代码放在C文件中      

shashaa 发表于 2025-11-22 20:38

感觉是C++的全局对象构造函数可能在ITM初始化前执行,导致printf调用时硬件未就绪。

xia00 发表于 2025-11-22 20:39

应该要避免名字修饰导致的链接问题。      

hfdy01 发表于 2025-11-22 20:43

这个是C++ 与 C 标准库之间的链接差异。

boy1990 发表于 2025-11-22 20:45

若C++未正确声明或链接该函数,会导致ITM输出失败。

bbapple 发表于 2025-11-22 20:49

用后处理脚本,生成后自动重命名。

handleMessage 发表于 2025-11-22 20:52

可以手动创建.cpp文件并覆盖。

handleMessage 发表于 2025-11-22 20:52

STM32CubeMX配置工具   ST-LINK、J-Link等

zhouhuanの 发表于 2025-11-22 20:53

楼主有没有检查CubeIDE和CubeMX版本是否为最新

Listate 发表于 2025-11-22 20:56

用逻辑分析仪或调试器验证ITM时钟和使能信号是否正确配置。

Mozarts 发表于 2025-11-22 20:57

首次printf调用失败?   

_gege 发表于 2025-11-22 21:01

STM32CubeMX默认生成C语言代码的

Edisons 发表于 2025-11-22 21:02

C++ 文件中定义这些函数时,编译器会修改其函数名。

laozhongyi 发表于 2025-11-22 21:04

在C++代码中显式声明extern "C",确保符号不被修饰。

wanglaojii 发表于 2025-11-22 21:05

这样理解,printf功能依赖C标准库的重定向实现、
页: [1]
查看完整版本: printf功能依赖C标准库的重定向实现