[其他ST产品] printf在大量打印时会丢失一些数据

[复制链接]
540|10
 楼主| 咚了个咚 发表于 2025-6-8 23:07 | 显示全部楼层 |阅读模式
使用nucleo-H473 ZI 2与CubeIDE。当我打印一个1024长的int数组时,SWV ITM数据控制台不会输出所有1024个值。总会丢失一些数据。
以下是程序
int _write(int file, char *ptr, int len){  /* Implement your write code here, this is used by puts and printf for example */  int i=0;  for(i=0 ; i<len ; i++)    ITM_SendChar((*ptr++));  return len;}
然后我打印出数组中的所有值:
  int print_array[1024];  for(int i=0; i<1024; i++){          print_array = i;  }  printf("Hello World!\n");  //Print out array values  for(int i=0; i<1024; i++){          printf("%d, \n", i);          HAL_Delay(5);  }  HAL_Delay(1000);  //Print some more to make sure all data is finished printing  for(int i=0; i<2; i++){          printf("Hello World\n");          HAL_Delay(5);  }  HAL_Delay(100);   while(1);
但是在SWV ITM数据控制台中得到的结果只包含大约900个数字,而不是1024个数字。数量也在波动。
为什么会发生这种情况,是否有办法避免?

xiaoqizi 发表于 2025-7-6 21:45 | 显示全部楼层
printf 函数内部使用缓冲区,若数据量过大或发送速率慢于数据生成速度,缓冲区可能溢出或未及时清空,导致数据丢失。

木木guainv 发表于 2025-7-7 09:22 | 显示全部楼层
[size=0.875]printf 的串口中断优先级较低,可能在执行过程中被其他高优先级中断打断,导致数据传输不完整
Jiangxiaopi 发表于 2025-7-7 11:50 | 显示全部楼层
浮点数在二进制转换中可能丢失精度,导致打印值异常
荣陶陶 发表于 2025-7-7 14:12 | 显示全部楼层
[size=0.875]printf 的串口中断优先级较低,可能在执行过程中被其他高优先级中断打断,导致数据传输不完整
Zhiniaocun 发表于 2025-7-7 16:33 | 显示全部楼层
波特率过低或数据量过大,导致串口无法及时发送所有数据
Zuocidian 发表于 2025-7-7 19:03 | 显示全部楼层
串口线过长、电平转换电路缺失或硬件故障,导致信号衰减或噪声干扰
Puchou 发表于 2025-7-7 21:19 | 显示全部楼层
修改 [size=0.875]__io_putchar() 函数,使用非阻塞方式发送数据
Xiashiqi 发表于 2025-7-8 07:43 | 显示全部楼层
替换 [size=0.875]float[size=0.875]double,提高精度
小海师 发表于 2025-7-8 09:59 | 显示全部楼层
将大数据拆分为小块,分批次发送
Haizangwang 发表于 2025-7-8 12:16 | 显示全部楼层
确保串口中断优先级最高,避免被其他中断抢占。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

67

帖子

0

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