標(biāo)題: C語言定義的全局變量太多,有些變量會(huì)在運(yùn)行中自己改變,該怎么辦 [打印本頁]

作者: asdadqw2    時(shí)間: 2024-5-6 17:21
標(biāo)題: C語言定義的全局變量太多,有些變量會(huì)在運(yùn)行中自己改變,該怎么辦
謝謝大家

作者: Hephaestus    時(shí)間: 2024-5-6 18:20
用了數(shù)組了吧?訪問越界。
作者: fj51hei    時(shí)間: 2024-5-6 19:30
你這是玄學(xué)吧!,查查有用過被改變變量的函數(shù)吧!
作者: xjtong    時(shí)間: 2024-5-6 19:39
估計(jì)是溢出了吧。
作者: xiaobendan001    時(shí)間: 2024-5-6 20:04
和多少?zèng)]關(guān)系吧
作者: xiaobendan001    時(shí)間: 2024-5-6 20:07
和多少?zèng)]關(guān)系吧,是真的會(huì)變。不定啥時(shí)候就變了,雖然比較少見,但是真的會(huì)變哦。
作者: asdadqw2    時(shí)間: 2024-5-7 08:36
Hephaestus 發(fā)表于 2024-5-6 18:20
用了數(shù)組了吧?訪問越界。

對(duì),用了數(shù)組
作者: ly1972001    時(shí)間: 2024-5-7 08:43
我見過別人寫的,全局變量會(huì)變。建議盡量少用全局變量,盡量使用局部變量。
作者: asdadqw2    時(shí)間: 2024-5-7 08:45
應(yīng)該是二樓大佬說的情況,用的數(shù)組比較多,訪問越界了,能怎么解決
作者: asdadqw2    時(shí)間: 2024-5-7 08:58
找到問題了,謝謝二樓大哥提醒,原來是定義數(shù)組的時(shí)候定義少了
作者: 18701931930    時(shí)間: 2024-5-7 11:04
建議使用靜態(tài)全局變量,只能在當(dāng)前文件內(nèi)使用。如果其他文件想要使用該變量,那就用函數(shù)傳遞的方式。
例如:
static u8 value;  //靜態(tài)全局變量
u8 Get_value(void)
{
    return value;
}
或者
void Get_value(u8 *val)
{
    *val = value;
}

如果傳遞的變量比較多的,可以使用結(jié)構(gòu)體+指針。
作者: xiaobendan001    時(shí)間: 2024-5-7 13:59
我說的補(bǔ)上數(shù)組,就是一個(gè)char,運(yùn)行了幾天,突然就變了。導(dǎo)致輸出邏輯錯(cuò)誤,幸好還有最后的限位開關(guān)作為糾正。就OK了,回歸了。之后再?zèng)]發(fā)現(xiàn)。
作者: Hephaestus    時(shí)間: 2024-5-7 21:08
18701931930 發(fā)表于 2024-5-7 11:04
建議使用靜態(tài)全局變量,只能在當(dāng)前文件內(nèi)使用。如果其他文件想要使用該變量,那就用函數(shù)傳遞的方式。
例如 ...

靜態(tài)全局變量只有在程序正確的時(shí)候可以避免其他源文件訪問,樓主的問題是數(shù)組訪問越界,你這種寫法毫無意義。
作者: rayin    時(shí)間: 2024-5-10 07:46
要檢查一下電源是否有尖峰干擾, 比如繼電器開關(guān)動(dòng)作, 馬達(dá)轉(zhuǎn)動(dòng)停止, 這些會(huì)對(duì)單片機(jī)的程序運(yùn)行產(chǎn)生影響: SRAM的值發(fā)生意外變動(dòng).  再查一下其他的函數(shù)是否有意外改動(dòng)全局變量值, 畢竟全局變量程序運(yùn)行全程都可以改變.
作者: Hephaestus    時(shí)間: 2024-5-10 16:49
rayin 發(fā)表于 2024-5-10 07:46
要檢查一下電源是否有尖峰干擾, 比如痰縉骺囟�, 馬達(dá)轉(zhuǎn)動(dòng)停止, 這些會(huì)對(duì)單片機(jī)的程序運(yùn)行產(chǎn)生影響: SR ...

那早就是死機(jī)了,沒機(jī)會(huì)輪到RAM變化。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1