好久之前的做的笔记,这里贴出。
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,"陀螺仪:%.2ft%.2ft%.2fnt",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,"陀螺仪:%dt%dt%dnt",(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,"陀螺仪:%.2ft%.2ft%.2fnt",Pitch,Yall,Pitch);
printf ("Pitch=%s",String);
}
总结用sprintf转换数据量比较大的参数,建议用字符数组来存,不要用指针存
关键字:单片机 编程 sprintf 死机
引用地址:
关于单片机编程里面调用sprintf死机的解决方法及原因分析
推荐阅读最新更新时间:2024-11-06 11:09
基于SST89C54/58的单片机仿真器的设计
1 概 述
SST89C54/58(简称89C54/58)是美国SST公司推出的多用途51系列单片机,片内集成了20 kB/36 kB的SuperFlashE"PROM程序存储器,分为BLOCK0(16kB/32kB)和BLOCKl(4kB)两块。其中,BLOCKl可以映射(Mapping)到64kB存储空间的最高端或最低端,而且,对于程序计数器来说可以是不可见的。由于其存储结构上独特的优点,使得89C54/58非常适合于用做单片机仿真器。
2 SST89C54/58的程序存储结构
2.1 存储器结构
89C54/58片内的存储块BLOCK0占据从0000H到3FFFH/7FFFH的存储空间,BLOCKl
[应用]
基于MCU msp430f5438A芯片的多功能智能门禁锁设计
1、简介 安全被越来越多的受到重视,门禁锁越来越普及,而且需求越来越复杂,有几个人必须同时刷卡才能进入;有的只有在规定时间段才能进入;有的第一个门锁关上之后,才能刷第二个门锁。 普通门禁锁不能实现需求的多样性,所以设计一种智能门锁通过网络连接服务器,通过上位机软件在服务器的配置,来实现多种需求。本作品系统方案如下 (1)门禁锁和服务器采用网络通讯,UDP协议,增加实时性。 (2)门禁锁通过控制继电器来控制门锁开关。 (3)服务器和软件采用LAMP(linux+apache+mysql+php)架构,提高安全和稳定性。 (4)通过上位机软件配置服务器实现门锁时间限制,人数限制,多重门锁逻辑功能。 后期由于实际项目需要扩展加入了一
[单片机]
51单片机学习笔记(五)_C51实现单片机串口通信仿真
1、效果图 2、虚拟串口 通过VSPD虚拟串口工具虚拟出两个串口用于通信 VSPD虚拟串口工具下载:http://download.csdn.net/detail/leytton/7565589 3、串口调试 打开两份串口调试工具,第一个打开com1,第二个打开com2,这时在任一串口调试工具发送信息,另一个串口调试工具中能接收到信息 串口调试工具下载:http://download.csdn.net/detail/leytton/7565561 4、Proteus电路设计图 P1串口:属性原件值COMPIM,Physical port为com2,Physical Baud ra
[单片机]
基于51单片机的压力测量控制系统研发
1 引言 目前我国发展煤炭生产机械化发展迅速。综采设备的应用,是提高效率、改善安全状况的措施。 影响开机率的一个主要因素是支架对工作面的顶板控制的好坏,因此,对综采工作面进行矿压监测与控制是很有必要的。要做到这一点,首先需要对井下工作面的液压支架的实际工作状况进行监测,通过对检测数据处理、分析,评定其效果,并采取相应措施,以提高开机率、提高产量。本文以监测综采液压支架的压力为研究内容,开发了一套基于单片机的压力测量控制系统。 2 压力测量控制系统功能设计 压力测量控制系统用于监测支架压力, 每台测量控制系统配有四只传感器, 可分别通过高压油管连接支架的立柱、平衡千斤顶, 前探梁千斤顶的油压腔。压力测量控制系
[单片机]
使用C8051F005单片机的小电阻测试仪设计
在电路测试过程中常常会碰到由于忽略某些小电阻的影响引起实验数据与理论值之间存在较大误差,从而影响测试效果。例如电感器、变压器中往往存在铜电阻,地铁铁轨的电阻;由于其数值较小,一般的指针万用表无法测量出来;通常实验室里会用电桥进行测量,但电桥操作手续较烦,又不能直接读出被测电阻阻值。鉴于此,我们采用了单片机,利用单片机的优势设计了该测量仪。该测量仪可直接从LCD显示屏上读出所测得的电阻值,测量范围为10μΩ~2.9999kΩ,同时可以把测试的数据进行储存,然后经串行口送入上位机,通过上位机的强大功能,可以对所测得的数据进行分析、处理。该测试仪的测量精度高达±0.1%,并采用四端测量法,电阻值不受引线长短及接触电阻的影响。不仅测量
[测试测量]
51单片机上实现的交通灯程序
这是我前几天无聊自己写的交通灯程序,在51单片机上实现的。基本的定时的交通灯转换是实现了,根据时间来改变交通灯的变换。可以下载下来看看的,电路图和原程序都有,代码就自己下载吧。我不全放上了。 单片机源程序: #include sbit beiR=P1^0; sbit beiY=P1^1; sbit beiG=P1^2; sbit nanR=P1^3; sbit nanY=P1^4; sbit nanG=P1^5; uint a,b,c,type,j,i; void Delay(uint x) //延时 { uchar i; while(x--)for(i=0;i《120;
[单片机]
32LED单片机心形花样流水灯
#include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char uchar code zou ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//单个从0到7 uchar code you ={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//单个从7到0 uchar code liang0_7 ={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐个点亮0~7 uchar code liang7_0
[单片机]
在单片机上用模糊逻辑检测室性早搏
现代多参数监护仪普遍采用模块化结构,每个模块都是能完成单一功能的独立微处理机系统,多个模块通过串行口接收主控制器命令,送出测量结果。心电监护模块是其中的关键部件,其在 单片机 控制下拾取心电信号,放大、预处理,并传送给主控模块。 室性早博(PVC)是一种最常见的心律失常,它的实时、正确检测是心电图自动分析中的一项重要技术。在心电监护的基础上,加入心搏和节律分类功能,便可进行心律失常监护。室性早博检测一般在高端的心律失常分析模块中进行。目前单片机的功能不断增强,过去主要用作控制器的单片机,在完成原来的任务后,尚剩余不少CPU时间和控制功能,完全有可能实现一些过去只能在PC机上运行的复杂算法,而且用汇编语言编程提高运行速度
[医疗电子]