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

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

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

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转换数据量比较大的参数,建议用字符数组来存,不要用指针存

相关文章
|
7月前
|
数据采集 数据处理 C语言
单片机:探索其原理、应用与编程实践
单片机:探索其原理、应用与编程实践
110 1
|
内存技术
单片机(MCU)如何才能不死机之串口Overrun
单片机(MCU)如何才能不死机之串口Overrun
|
编译器 芯片
单片机(MCU)如何才能不死机之对齐访问(Aligned Access)
单片机(MCU)如何才能不死机之对齐访问(Aligned Access)
|
7月前
|
算法 定位技术 C语言
51单片机实现俄罗斯方块游戏编程
设计了一款基于AT89C51单片机的俄罗斯方块游戏机,使用LCD12864液晶显示,按键控制方块移动与变形。游戏中,7种不同形状的方块随机下落,填满一行得分,满屏则游戏结束。包含电源、单片机最小系统、LCD和按键模块的硬件电路通过Proteus进行了仿真,展示了游戏运行、得分和计时等。代码部分展示了检查碰撞和更新地图的函数。
156 1
|
7月前
|
传感器 人工智能 物联网
单片机:编程实践与应用探索
单片机:编程实践与应用探索
82 4
|
7月前
|
存储 传感器 数据处理
单片机编程入门与实践
单片机编程入门与实践
79 2
单片机 (MCU) 如何才能不死机之 IIC 操作
单片机 (MCU) 如何才能不死机之 IIC 操作
|
监控 芯片
单片机如何才能不死机之内外部时钟
单片机如何才能不死机之内外部时钟
|
传感器 编解码 监控
单片机温湿度测量程序编程
单片机温湿度测量程序编程
102 0
|
存储 C语言 内存技术
单片机原理与应用以及C51编程技术——data,idata,xdata,pdata,code
单片机原理与应用以及C51编程技术——data,idata,xdata,pdata,code
367 0