可以实操的代码,却在Proteus无法正常运行,sprintf函数所造成的故障

简介: 可以实操的代码,却在Proteus无法正常运行,sprintf函数所造成的故障

前言

(1)昨天,接了一个写代码的单子。为了防止客户说我的代码有问题,所以就打算将代码放在Proteus上跑。(为什么不是硬件上跑呢?因为我的硬件找不到了。。。)

(2)因为我电脑安装的Proteus总是闪退,下载安装搞了很久没搞好,于是让朋友帮忙验证。结果发现了问题。


问题

(1)什么问题呢?我的代码无法在Proteus中运行!

(2)因为这个代码在硬件上跑了无数次了,所以我能百分之百的肯定代码没有问题。通过查找资料目前观测有两种可能,导致Proteus无法正常运行。


可能性一

(1)我和朋友搞了很久,一直没有发现问题所在。然后我就想着一个代码一个代码的验证。最终发现,如果代码中加入了sprintf()函数,就会卡死。

(2)后来询问了chatgpt得知:Proteus并非完全支持所有C语言标准库函数,包括sprintf()函数。这是因为sprintf()函数是一个比较复杂的函数,它涉及字符串的动态分配和格式化等操作,这些操作在仿真环境中可能会引起一些问题。(注意,这个是否正确,还有待商榷,因为我还没有找到官方的说明)

(3)因为chatgpt的可能随口就来的特性,于是我决定去Proteus官网询问。而Proteus的技术支持仅仅对于付费用户,我这种破解版的,似乎找不到反馈渠道(苦笑)。

可能性二


(1)通过查阅资料,发现sprintf指的是字符串格式化命令,使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。最终导致了Proteus无法正常运行。

(2)通过网上的大佬们博客,总结来看,有如下建议:

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

<2>sprintf 中使用到的数组全部定义成全局数组。


//例子
char str[20];   //这里是字符数组,同时是全局变量
void main()
{
  sprintf(str,"%.2f cm",distant);//转换为字符串形式
  while(1);
}


(3)但是不幸,我的代码满足上述条件。而且在实物上是可以正常运行多次的,目前没有因为这个sprintf函数卡死过。所以我个人认为可能性一是问题的关键。

总结

Proteus毕竟只是一个仿真软件,很可能与实际情况并不相符合。所以,建议一切以实际情况为标准。

目录
相关文章
WRF模式案例运行初体验--飓风示例全过程记录
本文主要记录一下首次学习WRF并运行官网案例的全过程。
WRF模式案例运行初体验--飓风示例全过程记录
|
2天前
|
数据建模 Linux Android开发
Mstar 9632方案调试杂项临时笔记
Mstar 9632方案调试杂项临时笔记
25 0
|
6月前
|
监控 关系型数据库 MySQL
『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程
『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程
166 2
|
10月前
|
运维 测试技术
嵌入式软件测试笔记12 | 什么是状态转换测试?如何开展?
嵌入式软件测试笔记12 | 什么是状态转换测试?如何开展?
124 0
|
11月前
|
传感器 Windows
关于单片机编程里面调用sprintf死机的解决方法及原因分析
关于单片机编程里面调用sprintf死机的解决方法及原因分析
347 0
|
11月前
|
运维 物联网 Linux
嵌入式linux之go语言开发(六)几行代码实现终端的远程日志诊断
嵌入式linux之go语言开发(六)几行代码实现终端的远程日志诊断
|
存储 测试技术
kindle 应用程序出错,无法启动选定的应用程序,请重试。问题排查过程及处理方案。...
kindle 应用程序出错,无法启动选定的应用程序,请重试。问题排查过程及处理方案。...
338 0
|
Ubuntu Linux Windows
项目实战:Qt终端命令模拟工具 v1.0.0(实时获取命令行输出,执行指令,模拟ctrl+c中止操作)
在Qt软件中实现部分终端控制命令行功能,使软件内可以又好的模拟终端控制,提升软件整体契合度。
项目实战:Qt终端命令模拟工具 v1.0.0(实时获取命令行输出,执行指令,模拟ctrl+c中止操作)
|
监控 数据可视化 开发工具
放学前的最后几分钟,看懂monitor系统函数【Verilog高级教程】
放学前的最后几分钟,看懂monitor系统函数【Verilog高级教程】
放学前的最后几分钟,看懂monitor系统函数【Verilog高级教程】