在C51中變數的空間分配幾個方法

2021-08-29 03:36:52 字數 777 閱讀 3066

1、 data區空間小,所以只有頻繁用到或對運算速度要求很高的變數才放到data區內,比如for迴圈中的計數值。

2、 data區內最好放區域性變數。

因為區域性變數的空間是可以覆蓋的(某個函式的區域性變數空間在退出該函式是就釋放,由別的函式的區域性變數覆蓋),可以提高記憶體利用率。當然靜態區域性變數除外,其記憶體使用方式與全域性變數相同;

3、 確保你的程式中沒有未呼叫的函式。

在keil c裡遇到未呼叫函式,編譯器就將其認為可能是中斷函式。函式裡用的區域性變數的空間是不釋放,也就是同全域性變數一樣處理。這一點keil c做得很愚蠢,但也沒辦法。

4、 程式中遇到的邏輯標誌變數可以定義到bdata中,可以大大降低記憶體占用空間。

在51系列晶元中有16個位元組位定址區bdata,其中可以定義8*16=128個邏輯變數。定義方法是: bdata bit ledstate;但位型別不能用在陣列和結構體中。

5、 其他不頻繁用到和對運算速度要求不高的變數都放到xdata區。

6、 如果想節省data空間就必須用large模式,將未定義記憶體位置的變數全放到xdata區。當然最好對所有變數都要指定記憶體型別。

7、 當使用到指標時,要指定指標指向的記憶體型別。

在c51中未定義指向記憶體型別的通用指標占用3個位元組;而指定指向data區的指標只佔1個位元組;指定指向xdata區的指標佔2個位元組。如指標p是指向data區,則應定義為: char data *p;。還可指定指標本身的存放記憶體型別,如:char data * xdata p;。其含義是指標p指向data區變數,而其本身存放在xdata區。

C中幾個變數的區別 (特別是有程式分配空間的解釋)

static變數 static是靜態區域性變數,雖然在被呼叫後他的值依然不變,但是其他函式不能引用它。這種變數是讓不同的程式設計師能定義出 在函式釋放後不會把值清除的變數,能讓程式靈活的應用上一次執行的值。全域性變數 全域性變數是所有函式都可以呼叫的。區域性變數 只能在相應函式中定義的時候才能應用。...

C51中interrupt和using的用法

void int0 interrupt 0 using 1 interrupt 0 指明是外部中斷0 interrupt 1 指明是定時器中斷0 interrupt 2 指明是外部中斷1 interrupt 3 指明是定時器中斷1 interrupt 4 指明是序列口中斷 using 0 是第0組暫...

關於uc os II在C51上移植的筆記

先前看過巨龍的楊屹老師關於在c51上移植uc的文章,看後感慨頗深。但隨著對uc的理解發現楊老師的移植程式中任務函式不能傳引數,所以就試著改了改。uc的執行過程是 第一 osinit 函式初始化空閒任務,如果可能還有統計任務,當然還有pcb,event空閒列表 想必知道uc的人都知道指點哈 第二 os...