導航:首頁 > 操作系統 > 單片機局部變數

單片機局部變數

發布時間:2023-03-24 03:24:52

『壹』 51單片機匯編語言如何定義局部變數高手幫幫忙……

51單片機匯編語言如何聲明局部變數?
--用 EQU 偽指令,即可。

51單片機定義或聲明一個變數在程序執行時是否需要時間?
--偽指令,不佔用單片機的時間。

或是定義一個變數,這條指令的執行時間是多少?
--零秒。
--偽指令,不用單片機執行。

『貳』 C51 單片機 局部變數 問題

這個問題也困擾過我,比如定時器中斷里設置一個變數x,不設置初值,然後程序里放個x++。
結果就是那個x真的一直在加。
不過我沒有去深究過,個人理解是,如果系統不缺空間的話,單片機就不會去清除空餘的單元。

是不是這樣我不清楚,但是分析如下:
我們自己用匯編寫程序的時候,直接對RAM操作,如果不去清0,裡面的數是永遠不會變的。這說明,單片機本身是沒有這種操作的。
如果說C語言編譯過程中有加這種功能,也很難想像會在每個工作周期中不斷的去檢查哪些單元閑置的,並且對其清零。因為這樣要佔用很多CPU時間。
個人猜測,注意,是猜測!應該是當不得不要把某個物理單元劃分給新的變數時,才會真的把舊變數清除掉。否則,哪怕是局部變數,對應的物理單元應該是一直不變的。
(以上有錯,是我一開始寫的,請看下面的分析為准)

一邊寫一邊仔細回憶一下,大概知道了:

如果你寫了一個函數,裡面有5個變數。並且,這個函數你不去調用它。那麼編譯後你會發現程序多佔用了5個位元組的RAM。如果你調用它,有些情況下(程序特別長,變數特別多時)你會發現,程序里使用的RAM沒增加!(多說明一下,為什麼不調用它反而要佔用空間呢?因為系統不知道這5個空間什麼時候可以釋放,那麼定義了以後只好一直保留著。而如果你調用它了,什麼時候有用什麼時候沒用是固定的,那麼系統編譯時就可以在該變數不被使用時把空間分配給其他變數,有點「分時復用」的意思。而且,如果你寫了太多函數,裡面有足夠多的變數,然後這些函數統統都永不調用,編譯時就會出錯,提示你系統RAM不足)

這至少說明兩點,
一、如果你定義了一個局部變數,那麼系統就會一直留著空間給它以備使用。那麼那個物理單元隨時都是為「那一個」變數准備著的,它的值並不會清零。
二、當你程序使用了太多變數時,那麼系統編譯時會自動調節,在適當的時候釋放物理單元給「不同的變數」使用,也就是同一個物理單元要被不同的局部變數用,這種時候才會出現你說的情況,那就是局部變數會被清零。

實際上平時寫的程序都太短了,根本沒用使用完系統的RAM,那麼編譯時自然不會做這個操作。
同樣可以得出一個結論,正是因為單片機的RAM有限,才會導致局部變數不清除。對於電腦來說,空間近乎無限的,隨時隨地你都可以分配空間給變數用。但是51單片機就那麼128位元組,必須詳細策劃好如何分配,所以局部變數才有了自己固定的地盤。

說到這里,我相信你的問題我已經找到答案了,雖然都是我推測的,但是十之八九不會錯。歡迎討論!
哦,至於初始值為0,這個沒啥啊,單片機復位以後,RAM就是0
書上沒寫,但是實際用都是這樣

『叄』 單片機中什麼叫全局變數,和局部變數

在子程序中聲明的變數叫局部變數,退出子程序時釋放內存
而在主程序中聲明的叫全局變數,在程序運行過程中一致有效。
為了節約內存,能用局部變數就不要用全局變數

閱讀全文

與單片機局部變數相關的資料

熱點內容
情人節網站源碼 瀏覽:305
設備管理命令行 瀏覽:726
吃哺乳期的電影 瀏覽:190
把加密zip變成文件夾 瀏覽:213
linuxrecv阻塞 瀏覽:46
java模擬cookie 瀏覽:175
主角變身女收女的變百小說 瀏覽:758
粉筆教育app從哪裡看做過的題 瀏覽:391
app數據包在哪裡找到 瀏覽:923
百煉成仙綠帽改編1-11 瀏覽:109
女主和一對雙胞胎兄弟 瀏覽:437
刀劍神域小說TXT 瀏覽:1000
php獲取文件地址 瀏覽:578
linuxsed替換字元 瀏覽:413
如何填寫國家反詐中心app注冊使用 瀏覽:792
日本影視網站 瀏覽:933
伺服器點亮埠以後有什麼特徵 瀏覽:980
51單片機定時器pwm 瀏覽:685
民國修真 瀏覽:386
php數組作為參數傳遞 瀏覽:991