單片機c語言變數存儲在哪裡
㈠ 單片機c語言怎麼把一個變數放到固定的地址
int *P;
P = 28h;
*P = 0x1234;
這渣灶樣就把變數頌畝存在野梁森指定的兩個地址單元了
㈡ C語言局部變數一定存放在棧區么
在51單片機的情況下,局部變數還可以存放在寄存器當中的,聲明如下:
register int count; //count局部變數就存放在寄存器當中了而不是存放在棧中
補充:寄存器變數只能是局部變數,而不能是全局變數和靜態變數的。在什麼時候會用到呢?舉個例子:
for(i=0;i<10000;i++)
{
循環語句;
}
在上面這個for循環中,變數i會執行10000次的自增運算,如果這個局部變數i放在內存的棧區當中,每執行一次循環語句,都要從內存中取i的值,程序執行效率就會很低,但是i的值存放在寄存器中的話,由於寄存器讀取數據的速度與CPU的執行速度相差不大,那麼程序的執行效率就會很高了。所以寄存器變數就是在程序運行過程中被反復使用到的局部變數才會被聲明為寄存器變數。
㈢ C語言變數的定義與使用
變數的存儲類別決定了變數中的數據在計算機內存中的存儲位置。C語言中局部變數存放在動態存儲區,全局變數或者靜態變數存放在靜態存儲區。下面是關於C語言變數的定義與使用,歡迎參考!
如果要為單片機控制系統編寫出高質量的C語言程序,合理的定義並使用變數是非常重要的。程序是用來處理數據的,而變數就是用來存儲數據的。每定義一個變數,編譯器就會在系統的RAM中分配一個物理存儲區域。在單片機控制系統中,RAM資源是非常有限的,作為單片機程序員,絕對不能隨意的定義變數,需要精打細算合理定義。為了實現這個目標,必須要對變數的多個特性有深刻的認識。
變數特性:
第一、變數定義要選擇恰到好處的類型,變數的類型直接決定了它所存儲的數據取值范圍,這類似於我們生活中使用的各種容器,選擇合適的變數類型,不但能保證數據存儲安全,還能有效的節約系統資源;
第二、變數的作用范圍必須清楚,C語言最基本的功能單元是函數,在函數內部使用的變數是私有變數,只能在函數內部使用。多個函數組成一個程序的功能模塊,並安置在某一個C文件中,在這些函數的頭部定義的變數是靜態變數(局部變數),這種類型的變數模塊內部的函數都可以訪問。如果在模塊內部聲明變數,並在該模塊的頭文件中導出,該類型變數就是全局變數,全局變數在整個工程中的所有函數都可以訪問;
第三、變數佔用的RAM資源,私有變數是可以釋放的,靜態變數與全局變數是不可以釋放的。也就是說在程序運行的整個過程中,私有變數佔用資源可以供不同的函數重復利用,而靜態變數與全局變數是完全被佔用不能重復利用的;
第四、變數可以存放常數,但因為單片機RAM資源有限,強烈建議不要用變數存放常量,而是在資源相對豐富的FlashROM中存放常量;
第五、局部變數與全局變數對於函數來說,訪問非常方便,但缺點顯而易見:訪問的函數越多,數據的安全性越低,一旦出現數據異常,很難排除問題。所以,請盡量減少局部變數與全局變數的使用;
第六、函數的型參個數盡量減少,這樣型參只會佔用通用寄存器組來完成參數傳遞工作。如果參數過多,編譯器可能會被迫分配佔用RAM資源,這樣不但參數傳遞效率變低,同時還會導致RAM資源浪費;
明確上述變數定義與使用特點後,在編寫程序的時候,一定要利用好這些特性並結合程序的特點,靈活的使用各種類型、各種作用范圍的變數,使程序在最大限度上得到優化,使系統性能提升至最優的狀態,才是我們嵌入式開發者的終極目標!
拓展:C語言入門學習
什麼人需要學習C語言?
從51JOB的統計數據來看,選擇C語言人才的企業多數以電子工程師、嵌入式工程師、硬體工程師、IOS工程師等為主,學歷本科以上相關專業,三年以上工作經驗,且外語水平要求至少四級以上。既然C語言學習者的就業門檻那麼高,為什麼還有很多人執著的去學習C語言呢?總結而言,無外乎以下幾點原由:
1)C語言不是面向對象語言。
因為這一點,任何學習C語言的人必須學會用函數思考問題。當你真正的去學習一門面向對象語言時,就會有C語言的函數學習基礎去對比。這會使學習面向對象編程更容易理解和更有樂趣。
2)用C編程就像進行智力體操。
你要顧及到每一件事情,而這在很多其他語言中他會為你處理。你要管理指針,內存分配,和內存回收。你要明白如何處理串,還有動態數據。在其他語言中,所有這些對你來說是隱藏的。你不知道他們如何運行,更不用說改變他們的運行方式了。你得到了使用的便利,失卻了對程序的控制和速度。很多情況下,這是筆值得的買賣。其他的情況下就不是這樣了。
3)不同情況下你會使用不同的編程語言。
某些情況下要求使用Lisp,其他的要Java,還有別的要C++。但是C是你堅實的基礎。你可能不會使用它做一些項目,但是它會幫助提高你的能力,熟練的用其他語言編程。
4)除了匯編語言之外,C代碼生成的程序比其他任何語言生成的程序來得更小和運行更快。
那麼為什麼不學匯編語言呢?匯編是一門學了很有用的.語言,但是它沒有C那樣的可移植性,並且其他流行的語言比如JAVA的語法是基於C的,而不是匯編。你仍然應該學匯編,但它並不會證明它會像學C那樣有用。
5)如果你想要寫一個視頻游戲引擎或操作系統,你會需要C。
你不能使用C#, Java, 或 Basic來完成這些編程任務。
C語言的發展史:
C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。它由美國貝爾研究所的D.M.Ritchie於1972年推出,1978年後,C語言已先後被移植到大、中、小及微型機上,它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。它的應用范圍廣泛,具備很強的數據處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維,二維圖形和動畫,具體應用比如單片機以及嵌入式系統開發。
我適合學習C語言嗎?
首先我們要認清一個事實:C語言工作者只是眾多從事軟體開發者中的一小部分,在深圳這樣一個IT企業雲集的大城市,使用其它語言從事軟體開發的工作者多如牛毛,薪資待遇不比從事C語言開發的人低,當編程愛好者在選擇第一個編程語言時,C語言不一定是首先。我適合學習C語言嗎?解決這個問題,先回答以下幾個問題:
1)你學習C語言的目的是什麼?如果是想從事這方面的工作,那麼請義無反顧的堅持下去,推薦你在《微機原理》、《計算機組成原理》和《計算機系統結構》三本書中選一本配合《C語言程序設計》來看,這樣可以融匯貫通,讓你對編程有更深入更系統化的理解。而這種理解對計算機類學科的學習來說很重要。
2)您具備學習C語言的條件嗎?由於入職C語言編程的企業對入職者的要求比較高,在沒有編程工作經驗前提下多數想通過自學進入類似企業的人幾乎為零,包括很多計算機專業畢業的大、中專畢業生在校期間都會學到C語言,畢業出來後依然雲里霧里。C語言的開發,需要在實際工作中才能快速掌握。同時,英語(從事C語言開發需要經常查閱英文資料,尤其是單片機領域)、學歷、數學演算法、極強的邏輯思維能力等等也是讓多數人望而卻步的門檻。
㈣ C語言中指針變數是存在哪裡的
1、指針變數和普通的變數一樣,編譯期儲存在代碼當中,運行期間儲存在內存里。c語言的變數值是通過該變數的內存地址定址得到的,而對於一個已經編譯好的程序,變數的地址都是確定的值,不可以更改。這是因為程序在編譯時編譯器已經通過語法分析把指針變數的地址值計算出來了,所以指針變數實際上不用保存在內存堆棧或數據段中,而是包含在匯編代碼裡面。
2、指針變數裡面就是整型的一個十六進制數,用來表示的就是指向某個變數的地址;
指針是C語言中廣泛使用的一種數據類型;
利用指針變數可以表示各種數據結構;
能很方便地使用數組和字元串;
並能象匯編語言一樣處理內存地址,從而編出精練而高效的程序;
指針極大地豐富了編程語言的功能。
㈤ 單片機C語言中的code什麼意思
C51的code修飾的變數,表州清示指跡帆將變數存儲在單片機程序存儲空間FLASH中,節省單片機RAM資源,在程序中不能更改唯雹這些變數的值。
㈥ 430單片機的C語言中,const 變數存儲在哪,如果定義過多的const變數程序會不會影響
const變數嘛,看編譯怎麼處理的,一般來說因為const的值是改變不了的,編譯器會對他進行優化(把const變數放在flash里頭),你程序定義多個const一般來說沒橘盯戚什麼好的和壞的影響。之前我用avr mega8寫成,因為只有8k存不了很多數據,只能把一些常量用const形式保存在flash里頭節約ram。但是對於430來說沒有太大必則敗要,如果ram也吃緊也可以這樣。更通用的說法就是const表示這個變圓陵量不能改,在程序中如果修改了則報錯。僅此而已。
㈦ 單片機C語言中_at_有何用
跟硬體存儲空間有關,將變數一類的數據定位到存儲空間(51一般是低128位元組)
㈧ C語言,指針變數存在內存的什麼地方
C語言中指針變數和普通變數的處理沒有任何區別,都是在數據棧中開辟的內存空間,只不過一個存的是內存地址而另一個是存的數據而已.
BTW:一樓不懂無所謂,出來誤導人可是你的不對了呵呵,SP是棧指針寄存器,保存的是棧頂指針,和C裡面的指針變數沒有任何關系.
㈨ 單片機定義unsigned char code led是什麼意思
指定變數led存儲在code區。也就是rom或者是flash,這要看單片機程團悄序存儲器的構成,像7的就是EPROM如87C51;0的是掩模,如80C51;9的就是flash,常見的89S51.
code去掉也可以,不過是把變數存放在別的區域。這要根據編譯器的設定存儲模式來定。
如果變數體核蔽積大了,就要定義在code區。畢竟51系列的ram不夠,尤其是程序比較大的時候塌氏渣
㈩ 單片機C語言我聲明一個變數,他存放的地址怎麼分配
單片機中,可以位定址的有兩個地方,第一是特殊功能寄存器中可以被8整除的寄存器,第二就是20h~2fh這個位址空間。兩個地方的位變數申明不一樣。
第一個地方的申明是:
sbit
位變數
比如:sbit
pwm=p1^0;
第二個地方的申明是:bit
位變數
比如:
bit
flag;