這幾天花了兩天時間看了一些嵌入式C語言方面的內容,以下是一些讀書筆記,記錄一下。
- 中斷服務程序
1、不能有返回值
2、不能向ISR傳遞參數
3、ISR儘可能的短
4、Printf有重入問題
- 硬件驅動模塊
1、中斷服務程序ISR
2、硬件初始化
- 內存操作
1、某IO芯片被定爲在CPU的存儲空間而非IO空間,而且寄存器對應於某特定地址
2、兩個CPU之間以雙端口RAM通信,CPU需要在雙端口RAM的特定單元書寫內容以在對段CPU產生中斷
3、讀取在ROM或FLASH的特定單元所燒錄到漢字或英文字模
在使用絕對地址指針是,自增自減操作的結果取決於指針所指向的數據類型
p++ => p += sizeof(typeof(*p))
CPU以字節爲單位編址,C語言指針以指向的數據類型長度作自增自減
- 函數指針
函數只是一個地址,可以如下使用。
Typedef void (*func)();
Func ifunc = (func)0xF000FFF0;
Ifunc();
- 數組 vs. 動態申請
1、儘可能選用數組
2、動態申請,malloc和free成對出現
- 關鍵字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、數組名作爲函數型參時,淪爲普通指針