找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
ID:298743 发表于 2024-5-6 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谢谢大家
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2024-5-6 18:20 | 只看该作者
用了数组了吧?访问越界。
回复

使用道具 举报

板凳
ID:712493 发表于 2024-5-6 19:30 | 只看该作者
你这是玄学吧!,查查有用过被改变变量的函数吧!
回复

使用道具 举报

地板
ID:299872 发表于 2024-5-6 19:39 | 只看该作者
估计是溢出了吧。
回复

使用道具 举报

5#
ID:1109793 发表于 2024-5-6 20:04 | 只看该作者
和多少没关系吧
回复

使用道具 举报

6#
ID:1109793 发表于 2024-5-6 20:07 | 只看该作者
和多少没关系吧,是真的会变。不定啥时候就变了,虽然比较少见,但是真的会变哦。
回复

使用道具 举报

7#
ID:298743 发表于 2024-5-7 08:36 | 只看该作者
Hephaestus 发表于 2024-5-6 18:20
用了数组了吧?访问越界。

对,用了数组
回复

使用道具 举报

8#
ID:236035 发表于 2024-5-7 08:43 | 只看该作者
我见过别人写的,全局变量会变。建议尽量少用全局变量,尽量使用局部变量。
回复

使用道具 举报

9#
ID:298743 发表于 2024-5-7 08:45 | 只看该作者
应该是二楼大佬说的情况,用的数组比较多,访问越界了,能怎么解决
回复

使用道具 举报

10#
ID:298743 发表于 2024-5-7 08:58 | 只看该作者
找到问题了,谢谢二楼大哥提醒,原来是定义数组的时候定义少了
回复

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

15#
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 单片机教程网

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