标题: C语言定义的全局变量太多,有些变量会在运行中自己改变,该怎么办 [打印本页]

作者: asdadqw2    时间: 2024-5-6 17:21
标题: C语言定义的全局变量太多,有些变量会在运行中自己改变,该怎么办
谢谢大家

作者: Hephaestus    时间: 2024-5-6 18:20
用了数组了吧?访问越界。
作者: fj51hei    时间: 2024-5-6 19:30
你这是玄学吧!,查查有用过被改变变量的函数吧!
作者: xjtong    时间: 2024-5-6 19:39
估计是溢出了吧。
作者: xiaobendan001    时间: 2024-5-6 20:04
和多少没关系吧
作者: xiaobendan001    时间: 2024-5-6 20:07
和多少没关系吧,是真的会变。不定啥时候就变了,虽然比较少见,但是真的会变哦。
作者: asdadqw2    时间: 2024-5-7 08:36
Hephaestus 发表于 2024-5-6 18:20
用了数组了吧?访问越界。

对,用了数组
作者: ly1972001    时间: 2024-5-7 08:43
我见过别人写的,全局变量会变。建议尽量少用全局变量,尽量使用局部变量。
作者: asdadqw2    时间: 2024-5-7 08:45
应该是二楼大佬说的情况,用的数组比较多,访问越界了,能怎么解决
作者: asdadqw2    时间: 2024-5-7 08:58
找到问题了,谢谢二楼大哥提醒,原来是定义数组的时候定义少了
作者: 18701931930    时间: 2024-5-7 11:04
建议使用静态全局变量,只能在当前文件内使用。如果其他文件想要使用该变量,那就用函数传递的方式。
例如:
static u8 value;  //静态全局变量
u8 Get_value(void)
{
    return value;
}
或者
void Get_value(u8 *val)
{
    *val = value;
}

如果传递的变量比较多的,可以使用结构体+指针。
作者: xiaobendan001    时间: 2024-5-7 13:59
我说的补上数组,就是一个char,运行了几天,突然就变了。导致输出逻辑错误,幸好还有最后的限位开关作为纠正。就OK了,回归了。之后再没发现。
作者: Hephaestus    时间: 2024-5-7 21:08
18701931930 发表于 2024-5-7 11:04
建议使用静态全局变量,只能在当前文件内使用。如果其他文件想要使用该变量,那就用函数传递的方式。
例如 ...

静态全局变量只有在程序正确的时候可以避免其他源文件访问,楼主的问题是数组访问越界,你这种写法毫无意义。
作者: rayin    时间: 2024-5-10 07:46
要检查一下电源是否有尖峰干扰, 比如继电器开关动作, 马达转动停止, 这些会对单片机的程序运行产生影响: SRAM的值发生意外变动.  再查一下其他的函数是否有意外改动全局变量值, 毕竟全局变量程序运行全程都可以改变.
作者: Hephaestus    时间: 2024-5-10 16:49
rayin 发表于 2024-5-10 07:46
要检查一下电源是否有尖峰干扰, 比如痰缙骺囟�, 马达转动停止, 这些会对单片机的程序运行产生影响: SR ...

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1