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 的源文件?因为手动重命名常常会导致人为错误 依赖C标准库的重定向实现 使用C头文件时候,避免链接错误。 使用的时候,将硬件相关代码放在C文件中 感觉是C++的全局对象构造函数可能在ITM初始化前执行,导致printf调用时硬件未就绪。 应该要避免名字修饰导致的链接问题。 这个是C++ 与 C 标准库之间的链接差异。 若C++未正确声明或链接该函数,会导致ITM输出失败。 用后处理脚本,生成后自动重命名。 可以手动创建.cpp文件并覆盖。 STM32CubeMX配置工具 ST-LINK、J-Link等 楼主有没有检查CubeIDE和CubeMX版本是否为最新 用逻辑分析仪或调试器验证ITM时钟和使能信号是否正确配置。 首次printf调用失败? STM32CubeMX默认生成C语言代码的 C++ 文件中定义这些函数时,编译器会修改其函数名。 在C++代码中显式声明extern "C",确保符号不被修饰。 这样理解,printf功能依赖C标准库的重定向实现、
页:
[1]