[STM32F1] printf在 main.cpp中无法正常工作

[复制链接]
1629|33
lilaiju 发表于 2025-9-30 22:13 | 显示全部楼层 |阅读模式
SWV ITM(printf)在 main.cpp(C++)中无法正常工作,但在 main.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 的源文件?因为手动重命名常常会导致人为错误

rosemoore 发表于 2025-10-6 21:54 | 显示全部楼层
printf功能依赖C标准库的重定向实现
everyrobin 发表于 2025-10-8 10:04 | 显示全部楼层
C头文件,避免链接错误。              
ccook11 发表于 2025-10-8 15:08 | 显示全部楼层
#include <cstdio>

// 确保 printf 的底层 putchar 能链接到这个函数
// 必须用 extern "C",否则 C++ 会 mangle 函数名,导致标准库找不到它
extern "C" {

    int __io_putchar(int ch) {
        // 确保 ITM 启用了,通道 0 打开,SWV 工具链配置正确
        ITM_SendChar(ch);
        return ch;
    }

} // extern "C"
10299823 发表于 2025-10-8 16:44 | 显示全部楼层
将硬件相关代码放在C文件中              
adolphcocker 发表于 2025-10-8 17:32 | 显示全部楼层
C++的全局对象构造函数可能在ITM初始化前执行,导致printf调用时硬件未就绪。
ccook11 发表于 2025-10-8 19:13 | 显示全部楼层
避免名字修饰导致的链接问题。              
earlmax 发表于 2025-10-8 21:24 | 显示全部楼层
​​C++ 与 C 标准库之间的链接差异
benjaminka 发表于 2025-10-8 22:17 | 显示全部楼层
没有正确重定向 printf              
内政奇才 发表于 2025-10-9 11:17 | 显示全部楼层
SWV ITM的printf依赖底层_write函数,若C++未正确声明或链接该函数,会导致ITM输出失败。
海滨消消 发表于 2025-10-9 13:19 | 显示全部楼层
C++项目需要链接C标准库,但CubeIDE默认的C++项目配置可能未正确包含C运行时支持,导致_write函数未被解析。
海滨消消 发表于 2025-10-9 14:20 | 显示全部楼层
CubeMX默认生成C代码,且不支持直接生成C++文件。
豌豆爹 发表于 2025-10-9 16:21 | 显示全部楼层
用后处理脚本,生成后自动重命名。
classroom 发表于 2025-10-9 17:21 | 显示全部楼层
可以手动创建.cpp文件并覆盖。
cr315 发表于 2025-10-9 19:22 | 显示全部楼层
检查CubeIDE和CubeMX版本是否为最新
duo点 发表于 2025-10-9 20:22 | 显示全部楼层
用逻辑分析仪或调试器验证ITM时钟和使能信号是否正确配置。
bartonalfred 发表于 2025-10-10 11:34 | 显示全部楼层
在 C++ 文件中使用?              
hudi008 发表于 2025-10-10 12:07 | 显示全部楼层
使用的是 STM32CubeIDE
burgessmaggie 发表于 2025-10-10 15:22 | 显示全部楼层
首次printf调用失败?              
sdCAD 发表于 2025-10-11 11:51 | 显示全部楼层
STM32CubeMX默认生成C语言代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

57

帖子

0

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