找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1581|回复: 14
收起左侧

C语言定义的全局变量太多,有些变量会在运行中自己改变,该怎么办

[复制链接]
ID:298743 发表于 2024-5-6 17:21 | 显示全部楼层 |阅读模式
谢谢大家
回复

使用道具 举报

ID:883242 发表于 2024-5-6 18:20 | 显示全部楼层
用了数组了吧?访问越界。
回复

使用道具 举报

ID:712493 发表于 2024-5-6 19:30 | 显示全部楼层
你这是玄学吧!,查查有用过被改变变量的函数吧!
回复

使用道具 举报

ID:299872 发表于 2024-5-6 19:39 | 显示全部楼层
估计是溢出了吧。
回复

使用道具 举报

ID:1109793 发表于 2024-5-6 20:04 | 显示全部楼层
和多少没关系吧
回复

使用道具 举报

ID:1109793 发表于 2024-5-6 20:07 | 显示全部楼层
和多少没关系吧,是真的会变。不定啥时候就变了,虽然比较少见,但是真的会变哦。
回复

使用道具 举报

ID:298743 发表于 2024-5-7 08:36 | 显示全部楼层
Hephaestus 发表于 2024-5-6 18:20
用了数组了吧?访问越界。

对,用了数组
回复

使用道具 举报

ID:236035 发表于 2024-5-7 08:43 | 显示全部楼层
我见过别人写的,全局变量会变。建议尽量少用全局变量,尽量使用局部变量。
回复

使用道具 举报

ID:298743 发表于 2024-5-7 08:45 | 显示全部楼层
应该是二楼大佬说的情况,用的数组比较多,访问越界了,能怎么解决
回复

使用道具 举报

ID:298743 发表于 2024-5-7 08:58 | 显示全部楼层
找到问题了,谢谢二楼大哥提醒,原来是定义数组的时候定义少了
回复

使用道具 举报

ID:554500 发表于 2024-5-7 11:04 | 显示全部楼层
建议使用静态全局变量,只能在当前文件内使用。如果其他文件想要使用该变量,那就用函数传递的方式。
例如:
static u8 value;  //静态全局变量
u8 Get_value(void)
{
    return value;
}
或者
void Get_value(u8 *val)
{
    *val = value;
}

如果传递的变量比较多的,可以使用结构体+指针。
回复

使用道具 举报

ID:1109793 发表于 2024-5-7 13:59 | 显示全部楼层
我说的补上数组,就是一个char,运行了几天,突然就变了。导致输出逻辑错误,幸好还有最后的限位开关作为纠正。就OK了,回归了。之后再没发现。
回复

使用道具 举报

ID:883242 发表于 2024-5-7 21:08 | 显示全部楼层
18701931930 发表于 2024-5-7 11:04
建议使用静态全局变量,只能在当前文件内使用。如果其他文件想要使用该变量,那就用函数传递的方式。
例如 ...

静态全局变量只有在程序正确的时候可以避免其他源文件访问,楼主的问题是数组访问越界,你这种写法毫无意义。
回复

使用道具 举报

ID:517951 发表于 2024-5-10 07:46 | 显示全部楼层
要检查一下电源是否有尖峰干扰, 比如继电器开关动作, 马达转动停止, 这些会对单片机的程序运行产生影响: SRAM的值发生意外变动.  再查一下其他的函数是否有意外改动全局变量值, 毕竟全局变量程序运行全程都可以改变.
回复

使用道具 举报

ID:883242 发表于 2024-5-10 16:49 | 显示全部楼层
rayin 发表于 2024-5-10 07:46
要检查一下电源是否有尖峰干扰, 比如痰缙骺囟�, 马达转动停止, 这些会对单片机的程序运行产生影响: SR ...

那早就是死机了,没机会轮到RAM变化。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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