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

2023-11-08

前言

(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毕竟只是一个仿真软件,很可能与实际情况并不相符合。所以,建议一切以实际情况为标准。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 关于proteus中串口发送数据与实际不符的问题(如发00h,收80h)

    工程实训要用到串口 xff0c 51单片机 xff0c 串口工作方式一 xff0c 只发不接受 在proteus中用VIRTUAL TERMINAL xff08 虚拟终端 xff09 监视串口发送数据 现象 xff1a 不论是用虚拟终端还是
  • Proteus进行单片机仿真(一)

    Proteus是一款可以进行单片机电路仿真的软件 xff0c 软件提供多种单片机的型号 xff0c 包含51 STM32 PIC MSP430 ardunio等常用的单片机系列 其提供各种常见的外围器件可以方便的搭建电路并进行仿真 xff0
  • 利用 DAC0832 设计信号发生器

    Proteus 仿真要求 利用 DAC0832 产生一个占空比为 1 3 的矩形波信号 电路图 代码图 利用 DAC0832 产生一个占空比为 1 3 的矩形波信号 include
  • 基于51单片机的电烤箱微波炉数码管显示proteus仿真

    硬件设计 MCU基于51单片机 ADC采用TLC2543 芯片简介如下 1 12位分辩率A D转换器 2 在工作温度范围内10 s转换时间 3 11个模拟输入通道 4 3路内置自测试方式 5 采样率为66kbps 6 线性误差 1LSBma
  • 【Proteus仿真】【51单片机】水箱液位检测控制装置设计

    文章目录 一 主要功能 二 硬件资源 三 软件设计 四 实验现象 联系作者 一 主要功能 1 压力液位检测 2 阈值设定 超限报警 3 压力液位显示 4 补排水自动控制 二 硬件资源 1 51单片机核心模块 2 PCF8591 AD DA模
  • proteus中的标签的使用方法。

    我们在proteus中绘制原理图的时候常常会遇到元器件的连线比较繁杂 导致原理图看起来比较乱 或者不是太好看 我们一般采用两种比较典型的方式来解决 一 标签 1 终端模式下的标签 终端模式下的标签须确保我们已经选择了终端模式 如下图 双击终
  • 基于51单片机的羽毛球计分器(含Keil程序和Proteus文件)

    系统概述 系统使用的模块有AT89C51单片机 LCD1602显示屏 矩阵键盘 蜂鸣器 整个羽毛器计分器内的比赛双方的比赛分数和比赛时间和节数等都会在LCD1602显示屏上进行显示 通过左侧的按键可以增加双方的分数 还可以控制比赛的开始和暂
  • Proteus实现555计时器模拟简易电子琴

    555计时器模拟简易电子琴 一 元器件介绍 二 原理分析 三 仿真实验 实现弹奏过程 一 元器件介绍 这里用到的元器件有 RESISTOR 电阻器 CAP 电容器 BUTTON 按钮 555 555计时器 BUZZER ACTIVE 有源蜂
  • 题解:按钮加减计数器设计(单片机C51)(外部中断)

    需求 使用4位共阴极段码表及共阳极数码管 通过外部中断方式 实现两个按钮分配加1 减1功能 今天我就来讲解一下这道题 目录 1 代码 1 1定义头文件 1 2定义延时函数 毫秒 1 3定义主函数 1 4定义0 15共阴极数码管字符码 1 5
  • 【Proteus仿真】DAC0832+51单片机汇编实现三角波输出

    Proteus仿真 DAC0832 51单片机汇编实现三角波输出 Proteus仿真 汇编代码 asm 利用DAC0832产生三角波 程序如下 本程序中产生的电压的最大幅度受DAC0832的基准电压限制 产生的的三角波周期受累加器A的控制
  • Proteus仿真时数码管不能动态显示的问题及解决方法

    今天做Proteus仿真时遇到了数码管不能动态显示的问题 我的程序是用单片机P1口控制数码管段选 P2口低四位控制数码管位选 数码管1ms显示一位 全部刷新需要4ms 正常情况下人眼是感受不到这个速度下数码管的刷新过程的 所以他应该是这个样
  • 基于51单片机实现继电器控制照明设备(Proteus仿真)

    wechat 嵌入式工程师成长日记 具体功能实现 当按下开关时 继电器闭合点亮照明设备 灯泡 使用器件 照明设备 LAMP 按键 AT89C51 若干电阻 PNP晶体管 二极管 继电器 RTE24005F Proteus仿真原理图 仿真 知
  • 12. 直流电机调速(PWM)

    直流电机介绍 直流电机是一种将电能转换为机械能的装置 一般的直流电机有两个电极 当电极正接时 电机正转 当电极反接时 电机反转 直流电机主要由永磁体 定子 线圈 转子 和换向器组成 除直流电机外 常见的电机还有步进电机 舵机 无刷电机 空心
  • Proteus仿真STM32的课设实例4——stm32简易测频率

    本教程是基于STM32的嵌入式仿真大作业 源文件链接 https pan baidu com s 1fU4isp7UXTtUFHwpt76zzw pwd 9x7t 提取码 9x7t 使用 Proteus 仿真32单片机 实现了可以测量正弦波
  • 基于单片机超声波测距语音播放

    一 系统方案 本设计采用52单片机作为主控器 HC SR04测距 液晶1602显示 按键设置报警阀值 语音报警 二 硬件设计 原理图如下 三 单片机软件设计 1 首先是系统初始化 uint dist 保存超声波模块测量到的结果 Trig P
  • Proteus 8.9原理图转换为PCB图

    Proteus 8 9原理图转换为PCB图 1 点击PCB设计图标 2 定义边界 在Board Edge图层建立矩形 此矩形内放置所有元器件 3 选用自动布局 Auto Placer 勾选所有器件 也可手动布置 没有的元器件封装可以重新选择
  • Altium designer20(AD20)安装教程

    一 教程是基于本人在安装过程中的截图 步骤都非常详细 PDF教程文档 AD 20安装 提取码 u8mm AD20下载链接 AD20安装包 提取码 v7t6
  • Keil报错 requires ANSI-style prototype

    在进行模块化程序设计时遇到这种error 这是头文件没有定义的问题 首先在同一个目录下建立一个 h文件 第二步打开文件 进行编辑 要用到 ifndef define endif 这是为了避免重复定义 ifndef后面跟的是头文件名称的大写
  • 基于51单片机简易电子琴设计(含Keil程序和Proteus文件)

    一 系统概述 系统使用的模块有AT89C51单片机 8位共阳数码管 矩阵键盘 小灯 按键 蜂鸣器 本次设计的电子琴系统以AT89C51单片机为控制核心 使用数码管显示音符 右侧的矩阵键盘可以理解为琴键 按下不同的按键就能显示不同的音符 按下
  • 【Proteus仿真】【Arduino单片机】视力保护仪

    文章目录 一 功能简介 二 软件设计 三 实验现象 联系作者 一 功能简介 本项目使用Proteus8仿真Arduino单片机控制器 使LCD1602液晶 DS18B20温度传感器 按键 蜂鸣器 继电器开关 HC05蓝牙模块等 主要功能 系

随机推荐

  • 单一职责原则

    单一职责原则 就一个类而言 应该只有一个引起它变化的原因 如果一个类承担的职责过多就等于把这些职责耦合在一起 至少会造成以下两方面的问题 我们要去修改该类中的一个职责可能会影响到该类的其它职责 这种耦合会导致脆弱的设计 当变化发生时 设计会
  • 一个月能做什么?成长&感悟分享

    一个月做了什么 八月做了些什么 单词打卡 第一件事情就是单词打卡 英语很差的我 一样继续打卡 今天是第736天 当你还在纠结扇贝和不背 可可英语哪一个好的时候 别人已经同时使用了 当你还在咨询学编程 敲代码需不需要英语的时候 别人已经开始同
  • springboot整合log4j打印日志

    1 排除springboot自带log依赖
  • Hamcrest 测试匹配框架

    为什么要用Hamcrest匹配器框架 Hamcrest是一款软件测试框架 可以通过现有的匹配器类检查代码中的条件 也可以通过自定义的匹配器实现 要在JUnit中使用Hamcrest匹配器 可以用它的assertThat语句 并且可添加一个或
  • pycharm打开chrome自动退出解决方法

    先查谷歌版本和驱动版本 from selenium import webdriver driver webdriver Chrome str1 driver capabilities browserVersion 查看chrome版本 st
  • ARP欺骗

    目录 一 ARP协议 二 ARP欺骗的原理 三 实验环境 四 实验步骤 一 ARP协议 每一个主机都有一个ARP高速缓存 此缓存中记录了最近一段时间内其它IP地址与其MAC地址的对应关系 如果本机想与某台主机通信 则首先在ARP高速缓存中查
  • ns2无线局域网隐藏节点仿真实验

    ns2无线局域网隐藏节点仿真实验 实验内容 实验原理 实验过程 相关模块安装 仿真模块 问题总结 问题一 问题二 问题三 实验内容 无线网络与移动技术第二次实验 用ns2完成无线局域网隐藏节点仿真实验 实验原理 隐藏节点指在接收节点的覆盖范
  • python中 random.randint 和 random.randrange 的区别

    python中 random randint 和 random randrange 的区别 在python中 通过导入random库 就能使用randint 和 randrange 这两个方法来产生随机整数 那这两个方法的区别在于什么地方呢
  • babel转译: es6转es5

    1 ECMAScipt和JavaScript的关系 96年javascript之父netscape 交给国际标准组织ECMA管理 ECMAScipt是javascript的一种规范 javascript是ECMAJavascript的一种实
  • 标定工具箱 OpenCalib: 自动驾驶多传感器的一个开源标定工具箱

    2022年5月30日上传arXiv的论文 OpenCalib A Multi sensor Calibration Toolbox for Autonomous Driving 作者来自商汤科技和上海AI实验室 准确的传感器标定是实现智能车
  • SpringBoot数据库密码动态配置

    一般的开发 我们都习惯把数据库密码配置在属性文件中 这样配置方便好用 但是缺点也是很明显的 这样配置的密码是静态的 明文的 一般都安全要求比较严格的公司 这些密码都会被统一管理 定期修改 我们需要动态获取密码 下面是结合SpringBoot
  • 功能升级,数据同步更便捷!场景化数据同步助您提效60%!

    在企业数仓建设初期 为了保障数字化转型的落地效果 需要提供充足的数据资源 除了基础的数据抽取 转换和加载等过程 数据的同步也是重要环节之一 数据同步常用于数仓ODS ADS层的建设 通过不同数据源的同步 保障数据的及时性和准确性 从而满足不
  • LeetCode 171. Excel 表列序号

    题目链接 https leetcode cn problems excel sheet column number 思路如下 类似于 26 26 26 进制转十进制 按权展开求和 C 代码如下 class Solution public i
  • mysql到底哪里错了#1054 - Unknown column '' in 'field list'

    和 是不同的两个符号 是字段名的的定界符 就是键盘上1左边那个符号 而 是单引号 是用在字符串上的的 所以后面的应该是 values 王柳 now 工人 注1 如果你的id是自增长 那就不能出现在语句中 应该是insert into tes
  • 基于Spring4+SpringMVC4+Mybatis3+Hibernate4+Junit4框架构建高性能企业级的部标GPS监控平台

    基于Spring4 SpringMVC4 Mybatis3 Hibernate4 Junit4框架构建高性能企业级的部标GPS监控平台 开发企业级的部标GPS监控平台 投入的开发力量很大 开发周期也很长 选择主流的开发语言以及成熟的开源技术
  • 浅谈_(js逆向)基础必备知识

    加粗样式随着技术的发展 js逆向成为爬虫必不可少的必备技术 我这里只是浅谈一下 根据自己的经验来说的 大蛇勿喷 js逆向 你首先得懂函数吧 例子 function per x y return x y 比如这个函数 function他是声明
  • 领悟《信号与系统》之 采样定理

    采样定理 采样定理 一 采样定理结论 二 奈奎斯特间隔和频率计算公式及例题 三 信号自然采样 脉冲采样 四 信号理想采样 冲激采样 采样定理 连续时间信号也叫模拟信号 在一定条件之下 模拟信号可以用该信号在等时间间隔点上的值或样本来表示 且
  • [创业之路-58] :公司、老板、专业性,优先级如何排序?

    公司 老板 专业性的优先级顺序 并不是固定不变的 要因情形而定 大公司 大多数人都在为公司打工 县官不如现管 在这样的公司 优先级如下 老板 专业性 公司 初创公司 专制型 这种公司 老板具有前瞻性 大多数决策都是正确的 在这样的公司 老板
  • vue中使用vuedraggable实现嵌套多层拖拽排序功能

    前言 vue中实现嵌套多层拖拽功能 官网入口 https www npmjs com package vuedraggable 实现效果 拖动左侧调整一级的顺序 拖动右侧调整二级的顺序 实现步骤 这里使用了插件 vuedraggable 第
  • 可以实操的代码,却在Proteus无法正常运行,sprintf函数所造成的故障

    前言 1 昨天 接了一个写代码的单子 为了防止客户说我的代码有问题 所以就打算将代码放在Proteus上跑 为什么不是硬件上跑呢 因为我的硬件找不到了 2 因为我电脑安装的Proteus总是闪退 下载安装搞了很久没搞好 于是让朋友帮忙验证