首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Nucleo STM32板(C++)上设置SWV printf

在Nucleo STM32板(C++)上设置SWV printf
EN

Stack Overflow用户
提问于 2021-11-02 10:35:39
回答 1查看 116关注 0票数 0

我使用的是STM32G431KB,与其他stm32 Nucleo相比,它有有线的SWO。我找到了这个问题Setting up SWV printf on a Nucleo STM32 board,并遵循了第一个答案。因此,我让SWV在C下运行,但是一旦我切换到C++,就没有输出。

我为C使用了一个新的项目,将Debug切换为"Trace Asynchronous SW",添加了:

代码语言:javascript
复制
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */


/* USER CODE BEGIN 0 */
int _write(int file, char *ptr, int len)
 {
     int DataIdx;
     for (DataIdx = 0; DataIdx < len; DataIdx++)
     {
         ITM_SendChar(*ptr++);
     }
     return len;
 }
/* USER CODE END 0 */

和主循环

代码语言:javascript
复制
  /* USER CODE BEGIN 2 */
  int i = 0;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    printf("%d Hello World!\n", ++i);
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

然后,我在Debug配置中打开SWV,并将内核时钟设置为170 Mhz。最后,关闭SWV设置中的timestep并启用端口0。

当我现在运行这个项目时,一切都正常,并且我得到了一个输出。

但是当我将项目切换到C++并将main.c重命名为main.cpp时。项目运行,但没有任何输出。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-02 11:02:19

因为您的_write函数不再是_write,因为它的名称被C++编译器破坏了。所以你链接到“旧的”链接,它不需要声明它是一个extern "C"

代码语言:javascript
复制
extern "C" {
void ITM_SendChar(char par); 
int _write(int file, char *ptr, int len)
{
     int DataIdx;
     for (DataIdx = 0; DataIdx < len; DataIdx++)
     {
         ITM_SendChar(*ptr++);
     }
     return len;
}
} /*extern "C"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69808948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档