矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 2265|回复: 9

单片机c中,变量赋初值是随意的吗?还有复杂计算的问题

[复制链接]
     
发表于 2021-5-10 17:56:10 来自手机 | 显示全部楼层 |阅读模式
不赋初值,他默认为0.在我编的的代码中偶尔会扰乱了我的判断语句。想了半天,就赋了一个永远也不用到的初值。正常了。
第二个问题是复杂的运算过程中,总会跑出一个暂时的中间态值,搞的数码管一闪一闪的。我又想了想,就先关了中断,运算完了再打开中断,又貌似正常了。
这两个问题是解决了,可我总心里不踏实,可又没其他招了,太菜。想问问大家常规做法是怎样的。

     
发表于 2021-5-10 18:02:13 | 显示全部楼层
本帖最后由 iffi123 于 2021-5-10 18:07 编辑

出现预料之外的结果,是你程序处理的问题,中断是比较容易出现意想不到的事

回复 支持 反对

使用道具 举报

     
发表于 2021-5-10 18:44:51 | 显示全部楼层
按照ANSI C的规范,所有不做初始化的变量都是0,但是在单片机里,复位以后RAM全部都是随机值,所有变量清零是在一小段你看不到的启动代码里实现的(其实你看得到,得看编译器输出的汇编中间文件,或者修改编译器有关变量保留的设置)。所以说这就造成一个问题,如果你没有保持变量使用之前先赋初值的好习惯,可能在某些意外情况下(比如删除了启动代码初始化相关配置,或软复位未被清空,或者编译器优化问题)而导致的数值超出允许的界限,有可能引起严重问题。
所以说初值只要你对他进行了人工初始化的操作,不要再担心他会是随机值。
第二个问题属于原子操作类的问题,建议百度一下。在这里说似乎就太长了,也没必要
回复 支持 反对

使用道具 举报

     
发表于 2021-5-10 20:29:10 | 显示全部楼层
都不是问题,感觉就是你程序有问题
回复 支持 反对

使用道具 举报

     
发表于 2021-5-10 20:51:02 | 显示全部楼层
C语言的变量不赋值时,内容是不确定的。所以C语言的变量在使用前,必须显式的进行初始化赋值。
回复 支持 反对

使用道具 举报

     
发表于 2021-5-10 20:53:53 | 显示全部楼层
不初始化是很不安全的,初始值可能是个不确定态
回复 支持 反对

使用道具 举报

     
发表于 2021-5-10 21:21:05 | 显示全部楼层
从mdk的编译看,不赋初值调试看确实为0,比如数组,别的编译器就不知道,

如果敏感的就赋一下,无所谓的就我就不管
回复 支持 反对

使用道具 举报

     
发表于 2021-5-15 17:02:43 | 显示全部楼层
不同编译器是不一样的
avr+gcc   全局变量值默认是0
非全局变量是任意不确定值
回复 支持 反对

使用道具 举报

     
发表于 2021-5-15 22:27:30 | 显示全部楼层
数码管显示在定时器中断中,如:过10毫秒或20毫秒去定时器中断更新显示一次,我连按键扫描也做在定时器中断中
回复 支持 反对

使用道具 举报

     
发表于 2021-5-15 22:32:43 | 显示全部楼层
有些程序主程序就只是初始化一些变量,全部功能做在中断中也可以的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 07:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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