找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2785|回复: 5
打印 上一主题 下一主题
收起左侧

想请问一下C语言循环累加超过变量限制后,系统会出错吗?

[复制链接]
跳转到指定楼层
楼主
ID:349690 发表于 2020-9-2 17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在一个STC15W系列的单片机程序开发里面,不小心出了个错误。
unsigned int n;
while(1) { n++;…… }
大概就是以上逻辑。
n在实际运行中,很快就超过了65535的限制。我想问这个情况下,继续累加下去,n的值是一直保持65535呢?还是从0开始自动循环呢?系统会不会崩溃?
根据实际情况,系统确实没有崩溃,我也是在后期检查时候才发现这个问题的,因为是分支程序,而且有中断跳出,目前各种测试这个bug并没有出现致命问题。但是可怕的是,1K的固件已经烧进去了,心中忐忑。所以想问问大师们,这样的超限错误,芯片内变量的实际情况是怎样的呢?我需不需要解决bug重新烧录,还是这批就这样放过呢?
先谢谢各位啦
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:471066 发表于 2020-9-2 18:52 | 只看该作者
为什么是65535,而不是65536,你也知道到655336就表示为0了,很简单的例子是钟表,到23点59分再走1分钟就是24(0)点,这就叫溢出,他不会理会你到8点要上班,到12点要下班!
回复

使用道具 举报

板凳
ID:378182 发表于 2020-9-2 20:00 | 只看该作者
这个变量 n 在程序其他语句中是否有引用?如果有引用并参与运算,则会引起不可预见的错误。
如无引用,由其在0-65535间循环,不必理会。
回复

使用道具 举报

地板
ID:816373 发表于 2020-9-2 23:04 | 只看该作者
会从0开始继续循环,具体会不会崩溃要看你是用来干什么的
回复

使用道具 举报

5#
ID:130230 发表于 2020-9-2 23:46 | 只看该作者
不会出错,加到65535后再加1就从0开始重新加。如果你懂一点汇编就明白了。这是是汇编里面常用的小技巧。
回复

使用道具 举报

6#
ID:213173 发表于 2020-9-3 07:22 | 只看该作者
变量不受约束和溢出肯定会出错,会不会导致灾难性后果就要看这个变量在系统中的具体作用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表