嵌入式C語言總結

這幾天花了兩天時間看了一些嵌入式C語言方面的內容,以下是一些讀書筆記,記錄一下。

 

  • 中斷服務程序

1、不能有返回值

2、不能向ISR傳遞參數

3、ISR儘可能的短

4、Printf有重入問題


  • 硬件驅動模塊

1、中斷服務程序ISR

2、硬件初始化

 

  • 內存操作

1、IO芯片被定爲在CPU的存儲空間而非IO空間,而且寄存器對應於某特定地址

2、兩個CPU之間以雙端口RAM通信,CPU需要在雙端口RAM的特定單元書寫內容以在對段CPU產生中斷

3、讀取在ROMFLASH的特定單元所燒錄到漢字或英文字模

在使用絕對地址指針是,自增自減操作的結果取決於指針所指向的數據類型

p++ => p += sizeof(typeof(*p))

CPU以字節爲單位編址,C語言指針以指向的數據類型長度作自增自減

  • 函數指針

函數只是一個地址,可以如下使用。

Typedef void (*func)();

Func ifunc = (func)0xF000FFF0;

Ifunc();

  • 數組 vs. 動態申請

1、儘可能選用數組

2、動態申請,mallocfree成對出現

  • 關鍵字const

Const意味着只讀

Const int a; a只讀

Int const a; a只讀

Const int *a; 指針a指向的只讀

Int * const a; a本身只讀

Int const *a const; 綜合上面兩個

  • 關鍵字volatile

1、並行設備的硬件寄存器

2、一箇中斷服務子程序會訪問到的非自動變量

3、多線程應用中幾個線程共享的

CPU字長和存儲器位寬不一致處理

  • 如何應用面向對象到嵌入式開發中
  • 性能優化

1、使用宏定義

2、使用寄存器變量

3、內嵌彙編

4、或用位操作

  • 代碼的運算速度

1、二維轉換爲一維

2、去掉浮點運算

3、用移位替代除法

4、預先計算查表

5、依賴硬件實現

6、Inline asm

  • 數組大揭祕

1、數組名的內涵在於其指代實體是一種數據結構

2、數組名的外延在於其可以轉換爲指向其指代實體的指針,而且是一個指針常量

3、指向數組的指針則是另外一種變量類型,僅意味着數組存放地址

4、數組名作爲函數型參時,淪爲普通指針

發佈了41 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章