send Course Introduction
###嵌入式 C語言 與 一般C語言的差異### * 特別注重如何用 嵌入式C語言 控制硬體: 一般 C 語言不需去控制硬體,不過 嵌入式C語言 需要學會如何用程式去控制硬體。 * 特別注重執行檔底層運作原理: 一般 C 語言只要能編譯出執行檔,放到 Windows 上跑即可。 嵌入式C語言 會詳細介紹執行檔運作時的底層原理。如:「負數」在電腦內如何表示的問題。一般程式師只要能寫出「-2」就可以了。嵌入式 C 語言工程師得知道,在電子電路層面上,是根本沒有「負號」這個觀念的,電子電路只能用「0 與 1」來表示「負數」。如何做到這點,就是我們 嵌入式C語言 課程內容會教的。 * 特別注重 C 語言中的「條件編譯」: 一般 C 語言工程師,他們執行檔案的硬體平台只有 Intel x86 一種,所以他們的程式碼撰寫時,不用考慮到這份原始碼可能會移植到不同硬體的情況。但要寫到「一份程式」能在「千萬種不同手機」上跑起來,就是功力了。因此,寫 嵌入式C語言 的工程師,會大量運用一大堆 if ~ then 的條件判斷,讓程式編譯成執行檔時,會根據目標硬體的不同,編譯出不同硬體平台的執行檔。而這種手法,就稱為「條件編譯」,乃嵌入式軟體工程師特別需要訓練的能力。 ###課程目標### * 熟悉 嵌入式C語言 開發環境的架設與使用。 * 了解 C 語言變數、分支、迴圈、函式…等基本語法。 * 認識前處理器、指標、特殊宣告等嵌入式系統常用的技巧。 * 知道一般 C 語言與嵌入式 C 語言不同之處。 ###課程對象### * 對嵌入式程式設計有興趣者。 * 有心朝嵌入式軟體工程師領域邁進的學員。 * 未來對於進入 Embedded Linux 相關工程師有興趣者。 ###課程內容### 第一章 課程介紹與環境安裝 * C 語言歷史介紹 * 開發環境安裝 * 開發板與 PC 的連接 * 如何傳送檔案到開發板 第二章 C 語言程式骨架與編譯流程 * C 語言原始碼基本架構 * 編譯與執行 * 一般編譯與執行 * 交叉編譯與執行 * 使用 Make 編譯執行檔 * 除錯工具 gdb 介紹 * 如何對開發板執行遠程除錯 第三章 定數、變數、常數 * 定數四大種類 * – 整數定數:123, 0123, 0×123, 123L, 123LL, 123u * – 浮點數定數:1.23, 1.23F, 1.23L, 1.23e-5 * – 文字定數:’a', L’a', “Hello" * – 布林值定數:true, false * 變數 * – 宣告公式:正負號 長度 型態 名稱 = 初值 * – 命名規則與習慣 * – 溢位與不足(Overflow vs. Underflow) * – 固定寬度變數:int8_t, uint8_t, int16_t, uint16_t, … * – 轉型(Casting) * 常數 * – #define 常數 * – const 常數 * – enum 常數 第四章 運算子 * 運算子簡介 * 各種運算子介紹 * – 算數運算子 * – 關係運算子 * – 條件運算子 * – 位元運算子 * – 其它運算子 * 運算子優先順序與結合性 * 運算式(Expression) 第五章 分支與迴圈 * 分支:if~else, switch~case * 迴圈:for, while, do~while 第六章 複合資料結構 * 陣列 * – 宣告方法 * – 陣列在底層記憶體的排列方式 * 字串 * – char * 與 char [ ] 的不同 * – 常用的字串函數 * 結構體(struct) * – 簡介、定義、宣告 * – 結構體在底層記憶體的排列方式 * – 結構體成員對齊記憶體存取邊界的方法(Memory Alignment) * – 位元欄位(bitwise field structure) * 組合體(union) * – 簡介、定義、宣告 * – 組合體在嵌入式系統上的應用場合 第七章 指標 * 簡介與定義:指標 = 存放位址的變數 * 宣告與初始化 * 各種指標介紹與應用 * – 整數、浮點數、字元指標 * – 萬用指標:void * * – 陣列指標 * – 常數指標 vs. 指標常數(Pointer of Constant vs. Constant Pointer) * 如何直接存取嵌入式系統內的特定位址 * – 宣告語法 * – 慣用資料型態:unsigned long * * – volatile 修飾字 第八章 函數 * 函數定義、宣告、呼叫 * 區域變數、全域變數、與靜態變數 * 參數如何傳遞:傳值呼叫 vs. 傳址呼叫 * 指向函數的指標(Function Pointer) * 回呼函數(Callback Function) * 利用函數傳回「左值(l-value, Left Value)」 第九章 檔案操作 * 檔案串流介紹(File Streaming) * 使用 C 標準函式庫存取檔案:fopen(), fclose(),… * 使用 Linux 系統呼叫存取檔案:open(), close(),… 第十章 前置處理器 * 前置處理器命令簡介 * 巨集定義指令(#define) * – 定義常數與函數 * – 字串化運算子(Stringify Operator):# * – 字符相接運算子(Token Concatenation Operator): ## * 條件式編譯(#if) * – 語法介紹:#ifdef, #if defined(…) * – 使用時機 * – 當成註解使用:#if 0 ~ #else ~ #endif * 標頭檔引入(#include) * – 語法:#include 與 #include “…" * – 多重引入所造成的問題(Multiple Include Problem) * 其它指令:#error, #pragma,… 第十一章 使用C語言模擬物件導向 * 物件導向程式設計簡介與好處 * 使用 C 語言模擬「封裝」 * 使用 C 語言模擬「繼承」 * 使用 C 語言模擬「多型」 第十二章 其它嵌入式 C 語言技巧 * GNU 對 C 語言的擴充語法 * – switch ~ case 支援「範圍」 * – 零長度陣列 * – __builtin_XXX 系列函數 * 嵌入式 C 語言中 if 條件特殊寫法: if (0= =x) * 可變動函數參數個數(Variable Parameters of Functions) * 程式優化技巧 * – 環狀緩衝區 * – 查表法