單片機(jī)的芯片資源從來都是 “精打細(xì)算” 的級別,CPU 主頻普遍不高,RAM 總?cè)萘勘揪途o張,分給棧空間的更是少得可憐。要是像普通軟件那樣,依賴函數(shù)返回值傳遞數(shù)據(jù)、頻繁用局部變量周轉(zhuǎn),一來二去占用的全是寶貴的棧內(nèi)存,很容易出現(xiàn)棧溢出的問題。而且局部變量的賦值、函數(shù)調(diào)用時的參數(shù)入棧出棧,對主頻不高的單片機(jī) CPU 來說,都是一堆額外的指令開銷,積少成多就會拖慢程序運(yùn)行速度,甚至影響實(shí)時響應(yīng)效果 —— 這在需要精準(zhǔn)控制時序的單片機(jī)場景里,可是致命的。
反觀全局變量,完全不用糾結(jié)這些麻煩。它直接占用固定的 RAM 空間,不用擠占棧資源,程序里任何地方都能直接訪問,省去了數(shù)據(jù)傳遞的中間環(huán)節(jié)。沒有了參數(shù)拷貝、返回值賦值的額外指令,CPU 執(zhí)行效率大大提升,性能損耗降到最低,剛好適配單片機(jī) “低主頻、小內(nèi)存” 的硬件短板。對單片機(jī)開發(fā)來說,首要目標(biāo)是讓程序在有限的資源里穩(wěn)定跑起來,還要保證實(shí)時性,這時候簡單、直接、開銷小的全局變量,自然成了最優(yōu)解。
當(dāng)然,放在現(xiàn)在性能過剩的 PC 端或服務(wù)器端開發(fā)里,全局變量的劣勢很明顯:數(shù)據(jù)訪問不受控,誰都能修改,時序問題難排查,bug 定位起來費(fèi)時費(fèi)力。但單片機(jī)場景完全不同,它的程序規(guī)模通常不大,功能相對單一,代碼邏輯也沒那么復(fù)雜,全局變量的可維護(hù)性問題被大幅弱化。比起 “性能不夠用、內(nèi)存撐不住” 的核心矛盾,全局變量帶來的那點(diǎn)維護(hù)成本,實(shí)在是次要的。在單片機(jī)的硬件限制下,優(yōu)先保證程序的運(yùn)行效率和穩(wěn)定性,遠(yuǎn)比追求極致的可維護(hù)性更實(shí)際,這也是為什么 C 語言開發(fā)單片機(jī)時,大多數(shù)情況都會選擇全局變量的核心原因。
-
單片機(jī)
+關(guān)注
關(guān)注
6077文章
45519瀏覽量
671917 -
cpu
+關(guān)注
關(guān)注
68文章
11303瀏覽量
225449 -
C語言
+關(guān)注
關(guān)注
183文章
7645瀏覽量
145891
發(fā)布評論請先 登錄
請問C語言開發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
C語言一定要用全局變量的形式去開發(fā)單片機(jī)嗎
C語言開發(fā)單片機(jī)都是用全局變量的形式嗎
從匯編代碼訪問C全局變量
C51單片機(jī)中定義一個全局變量會有怎樣的影響
在C語言中,全局變量濫用的后果是什么
C語言中局部變量和全局變量
C語言開發(fā)單片機(jī)為啥都是全局變量形式?
C語言開發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
C語言開發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
C語言開發(fā)單片機(jī)為啥都是全局變量形式?
C語言開發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
C語言開發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
C語言開發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
評論