我使用的是 STM32G431KB,與其他 stm32 Nucleo 相比,它連接了 SWO。我發現這個問題在 Nucleo STM32 板上設定 SWV printf并遵循第一個答案。因此,我在 C 下運行了 SWV。但是一旦我切換到 C ,就沒有輸出。
我為 C 使用了一個新專案,將 Debug 切換到“Trace Asynchronous SW”,并補充說:
/* 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 */
和主回圈
/* 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 */
然后我在除錯配置中打開 SWV 并將核心時鐘設定為 170 Mhz。最后,我關閉 SWV 設定中的時間步長并啟用埠 0。
當我現在運行專案時,一切正常,我得到了一個輸出。
但是當我將專案切換到 C 并將 main.c 重命名為 main.cpp 時。專案運行,但沒有任何輸出。
uj5u.com熱心網友回復:
因為你的_write函式_write不再是因為它的名字被 C 編譯器修改了。所以你與“舊”的鏈接,它什么都不做 你需要將它宣告為extern "C"
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"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/347382.html
