ARM C編程

來源:互聯網
上載者:User
ARM C編程
 

1、訪問絕對位址的記憶體位置:
     #define pISR_EINT0 (*(unsigned *) (_ISR_STRATADDRESS+0x74))     上述語句把不帶正負號的整數_ISR_STRATADDRESS+0x74強制轉換為指標,指向RAM,用下面的語句可以訪問它:
pISR_EINT0 = (int)Eint0_ISR
     為了訪問一個絕對位址,把一個整形數強制轉換(typecast)為一指標。

2、__irq:
     為了方便使用進階語言編寫異常處理函數,ARM編譯器對異常處理函數做了特定擴充,只要使用關鍵字_irq,這樣編譯出來的函數就滿足異常響應對現場保護與復原的需要;

3、編寫中斷服務程式的一些基本原則:     √避免在中斷服務程式中做浮點運算:好的終端讀物程式應該遵循短小有效這一原則,在中斷服務程式中做浮點運算大大違背這一原則,同時有些處理器/編譯器就是不允許在中斷服務程式中做浮點運算;
     √中斷服務程式不能有傳回值:所以中斷服務程式都定義為傳回型別為void,即:void _irq Eint0_ISR(void);
     √中斷服務函數不能傳遞參數:故參數列表為void,即:void _irq Eint0_ISR(void);

4、Static:
     一個static變數,其實就是全域變數,只不過它有範圍,它可用於儲存變數所在函數被類此調用期間的中間狀態,比如:
int cCout()
{
Static int loop = 0;
.......
loop++;
.......
  }
     loop變數的值會跟隨著函數的調用次數而遞增,函數退出後,loop的值還存在,只是loop只能在函數中才能被訪問(函數範圍),而loop的記憶體空間也只會在函數第一次被調用時才會被分配和初始化,以後每次進入函數,都不為static分配了,而直接使用上一次的值。在模組內,一個被聲明為靜態函數只可被這一模組內的其他函數調用,模組外其它函數無權訪問,是一個本地全域變數。

5、Constant:
     將一個變數或對象定義成constant類型,則定義之後不能被更新(可讀不可寫),即在定義或說明類型時必須給他一個初始值。
     幾種須要注意的地方:
     √如果const位於星號(*)的左側,則const修飾指標所指向的變數,即指標指向常量;如:const int *a; 或int const *a;這兩種情況相同(cost放在變數聲明符的位置無關),指標指向一個常量,此時不能對內容變更,即不能有寫動作陳述式*a=3;
     √如果cost位於型號的右側,cost就是修飾指標本身,即指標本身是常量;如:int* const a;語句表示指標本身是常量,所指向內容不是常量,即a++是錯誤的。
     √如果星號左右側都有const修飾,如:const int* const a;表示指標本身和指標指向的內容均為常量。

6.、Volatile:
     定義一個易失性變數,編譯器有一種技術叫資料流分析,剖析器中的變數在哪裡被賦值、在哪裡使用、在哪裡失效,分析結果可以用於常量合并,常量傳播等最佳化。當編譯器檢查到代碼沒有修改欄位的值,就有可能在你訪問欄位時提供上次訪問的緩衝值,這能夠提高程式的效率,但有時這些最佳化會帶來問題,不是我們程式所需要的,特點是對硬體寄存器操作的程式,這時可以用volatile關鍵字禁止做這些最佳化。
     使用volatile變數的場合:
     √硬體寄存器通常要加volatile說明,因為每次對它的讀寫都可能有不同的意義;
     √在中斷服務程式中修改的供其他程式檢測用的變數需要加volatile聲明;否則編譯器可能對變數更新一次後每次都使用緩衝值不再立即更新;
     √多任務環境下各任務間共用的標誌應該加voatile關鍵字:在多線程訪問某欄位時,代碼希望這些訪問能夠操作到操作(讀取)到欄位的最新值,同時寫到變數的操作能立即更新;對欄位加上volatile關鍵字,那麼對該欄位的任何請求(讀/寫)都會立刻得到執行。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.