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

[复制链接]
128|17
shashaa 发表于 2025-11-22 20:22 | 显示全部楼层 |阅读模式
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标准库的重定向实现、
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

1511

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部