找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1767|回復(fù): 8
收起左側(cè)

全局變量滿天飛怎么優(yōu)化程序

[復(fù)制鏈接]
ID:734017 發(fā)表于 2024-2-29 12:34 | 顯示全部樓層 |閱讀模式
bit HIM_page_Waterlight_flag =0;

bit Ion_A_flow_clean_start = 0;                                        //清洗
u8 xdata Ion_A_flow_continued_temp = 0;        //清洗計(jì)數(shù)

u8         Ion_A_flow =0;                                                                             //流量
bit Ion_A_flow_start = 0;                                                                //流量開關(guān)
u16 xdata Ion_A_flow_continued = 0;
u8 Ion_A_RF_EMS_mode =0;                                                               
bit Ion_A_RF_EMS_mode0 =0;                                                //自動模式切換
        
u8 Ion_A_Energy=0;                                                                                //電A強(qiáng)度
u8 Ion_A_Energy_temp=38;                                                        //電A強(qiáng)度

u8 Ion_A_mode =0;                                                                                        //電mode
bit start_Ion =0;                                                                                        //電獨(dú)立開關(guān)
bit overturn_Ion_A=0;                                                                        //翻轉(zhuǎn)
        
bit switch_delayed =0;        

u16         Ion_PWM_Counter =0;
u16 Ion_mode_PWM_Counter =0;
u16        RF_ion_autoIon_Counter =0;

隨著功能模塊增加,變量堆爆了,以上是其中一個模塊的變量。程序經(jīng)過一年增大到10個模塊。有時候跑單個,或者同時跑多個。數(shù)據(jù)處理頭大了。
請教前輩這方面的經(jīng)驗(yàn),方法。謝謝

回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2024-2-29 13:22 | 顯示全部樓層
如果是主程序和中斷共享的變量,那就不能優(yōu)化。如果不共享那就封裝到函數(shù)的局部變量好了。
回復(fù)

使用道具 舉報(bào)

ID:458247 發(fā)表于 2024-2-29 14:08 | 顯示全部樓層
分模塊寫代碼,模塊之間不應(yīng)該有耦合變量,模塊內(nèi)部的變量定義成static類型,若兩個模塊真的有需要共用的變量,提取到rte.c里面,并且一樣定義成static類型,在rte.c文件中增加該變量的接口,模塊使用這個接口進(jìn)行訪問。
回復(fù)

使用道具 舉報(bào)

ID:41656 發(fā)表于 2024-2-29 14:41 | 顯示全部樓層
對于相關(guān)的變量或者針對某個任務(wù)的可以做個結(jié)構(gòu)體,這樣方便管理。不必要的變量可以用局部變量
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2024-2-29 15:49 | 顯示全部樓層
二三十個變量并不算多
大程序盡量用局部變量
某個類型需要用到變量多的,就用結(jié)構(gòu)體
宏定義也要合理的用上,調(diào)試程序的時候會方便修改
回復(fù)

使用道具 舉報(bào)

ID:1107043 發(fā)表于 2024-2-29 16:58 | 顯示全部樓層
3樓和4樓的方法很好的。你可以在每個模塊都建立一個結(jié)構(gòu)體的變量。當(dāng)這個模塊需要增加變量時,直接在結(jié)構(gòu)體增加就行。至于通用的變量,你可以單獨(dú)寫一個.c文件。這樣子查詢和修改都方便
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2024-2-29 19:42 | 顯示全部樓層
static局部變量是按全局變量分配空間的。雖然不能被其他函數(shù)訪問,按軟件工程的概念安全了,但沒有真正的局部變量復(fù)用內(nèi)存節(jié)約空間的能力,沒事兒瞎加static是很浪費(fèi)資源的。

軟件工程是針對大型軟件來說的,對于單片機(jī)這種螺螄殼里面做道場的應(yīng)用,很多情況下都是錯誤的。
回復(fù)

使用道具 舉報(bào)

ID:420836 發(fā)表于 2024-3-1 08:55 | 顯示全部樓層
首先要做的是確定所有可以優(yōu)化的變量。 對于超過數(shù)千行的程序來說,這可能非常耗時。
回復(fù)

使用道具 舉報(bào)

ID:491577 發(fā)表于 2024-3-1 19:26 | 顯示全部樓層
單個的全局變量怎么可能多?除非是上千的數(shù)組才叫多,樓主是低估了現(xiàn)在的單片機(jī),51單片機(jī)內(nèi)存有8K,STM32的內(nèi)存幾十K,一千以下的變量小意思。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表