关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

关于单片机编程里面调用sprintf死机的解决方法及原因分析

发布时间:2023-06-30 01:00:28

好久之前的做的笔记,这里贴出。

char String[100];//直接用数组代替指针即可解决

下面代代码下载至单片机中,发现会出现单片机死机问题

#include "stdio.h"


char *String;

short gx;short gy;short gz;

float Pitch,Yall,Roll;


if(!(MPU_Get_EulerAngle(&Pitch,&Yall,&Pitch)))

{

sprintf(String,"陀螺仪:%.2f\t%.2f\t%.2f\n\t",Pitch,Yall,Pitch);

printf ("Pitch=%s",String);

}

 

然而下面这段代码却能正常执行:

 1 #incllude "stdio.h"

 2 

 3 char *String;

 4 short gx;short gy;short gz;

 5 float Pitch,Yall,Roll;

 6  

 7 if(!(MPU_Get_Gyroscope(&gx,&gy,&gz)))

 8 {

 9 sprintf(String,"陀螺仪:%d\t%d\t%d\n\t",(int)gx*100,(int)gy*100,(int)gz*100);

10 printf (String);

11 }

12 Loop_Delay_ms(500);

 

最后改char *String; 为指定字节大小的变量,发现第一处的不能执行的代码可以执行了

#include "stdio.h"


char String[100];

short gx;short gy;short gz;

float Pitch,Yall,Roll;


if(!(MPU_Get_EulerAngle(&Pitch,&Yall,&Pitch)))

{

sprintf(String,"陀螺仪:%.2f\t%.2f\t%.2f\n\t",Pitch,Yall,Pitch);

printf ("Pitch=%s",String);

}

 

 

总结用sprintf转换数据量比较大的参数,建议用字符数组来存,不要用指针存


/template/Home/leiyu/PC/Static