ARM Embedded C語言基礎課程
Level: Fundamental
Total Hours: 24 小時
Number of Lessons: 8
開課日期: Jul 23, 2015
Day of the week:
Wed
NTD 43,200
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)
- 程式優化技巧
- – 環狀緩衝區
- – 查表法