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...