ARM Embedded C語言基礎課程
###課程特色### 在嵌入式系統處處受限的環境中,C 語言得力於編譯出來的執行檔小、執行速度快、容易移植到不同平台等優點,其中也是學會 Embedded Linux 移植前必學技能,因此成為嵌入式系統的首選語言。想進入嵌入式系統的世界,熟悉 C 語言成了此領域的最低門檻。本課程會詳細解說 C 語言的各項語法,並加強嵌入式系統會用到的部份,讓您取得進入嵌入式系統設計的門票。是給沒學過 C 語言、或稍有基礎的學員,最適合的入門課程。
難易度: 初階
課程總時數: 24 小時
課堂數: 8
開課日期: 2013-09-16
星期幾: ,
NTD 43,200

課程說明

###嵌入式 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)
  • 程式優化技巧
  • – 環狀緩衝區
  • – 查表法