*階段:嵌入式C語言編程
主要介紹在嵌入式開發(fā)編程中C語言的重要概念和編程技巧中的重點難點,以復習串講和實例分析的形式,重點介紹函數(shù)與程序結(jié)構(gòu),指針、數(shù)組和鏈表,庫函數(shù)的使用等知識。
課程 內(nèi)容
嵌入式C語言編程 格式化輸入/輸出:格式化輸出printf,格式化輸出scanf,其他常用輸入/輸出函數(shù)(getchar、getch、gets、putch、puts)
分支結(jié)構(gòu)程序設(shè)計:if語句,多路分支switch
循環(huán)結(jié)構(gòu)程序設(shè)計:while循環(huán),for循環(huán),do while語句,break和continue語句
使用數(shù)組:數(shù)組的概念,一維數(shù)組,二位數(shù)組,字符數(shù)組和字符串,字符串反轉(zhuǎn),查找*數(shù),數(shù)據(jù)排序
使用函數(shù):函數(shù)的概念,函數(shù)工作過程,編寫函數(shù),函數(shù)的參數(shù),函數(shù)調(diào)用,遞歸函數(shù)
模塊化程序設(shè)計:模塊化概念,程序模塊結(jié)構(gòu),變量的作用域,變量的存儲類型(auto、register,static、extern),函數(shù)、文件、變量的關(guān)系
編碼規(guī)范:文件結(jié)構(gòu),程序版式,命名規(guī)則,防錯編程,程序效率
使用指針:內(nèi)存與變量,指針和簡單變量,指針和數(shù)組,指向多維數(shù)組的指針,指針和字符串,指針數(shù)組,指向指針的指針,指針和函數(shù),指針和const,復雜類型指針,指針的理解(指針類型,指針的值,指針所指向的類型,指針本身占據(jù)的內(nèi)存區(qū)域)
存儲管理:內(nèi)存組織方式,堆和棧的比較,動態(tài)內(nèi)存管理(malloc、calloc、realloc、free),丟失的內(nèi)存
結(jié)構(gòu)、聯(lián)合和枚舉:結(jié)構(gòu)的概念,結(jié)構(gòu)嵌套,結(jié)構(gòu)變量初始化,結(jié)構(gòu)數(shù)組,結(jié)構(gòu)指針,向函數(shù)傳遞結(jié)構(gòu),聯(lián)合定義,結(jié)構(gòu)中嵌套聯(lián)合,枚舉定義,使用typedef
位運算和位域:二進制數(shù),位邏輯運算,位移運算,位運算復合賦值,位域結(jié)構(gòu),位域的使用,位域與聯(lián)合的使用
文件輸入/輸出:文件與數(shù)據(jù)流,文件的打開與關(guān)閉,文件讀寫,文件隨機訪問,文件緩沖區(qū),文件管理
預(yù)處理:預(yù)處理功能,預(yù)處理命令,無參數(shù)宏,帶參數(shù)宏,預(yù)處理操作符#和##,條件編譯,預(yù)定義宏名,#line, #pragma, #error,內(nèi)聯(lián)函數(shù)
字符串處理:字符串的存儲,字符和字符串檢測函數(shù),查找字符串,比較字符串,連接字符串,復制字符串,字符和字符串轉(zhuǎn)換,strrev,strset,strtok
第二階段:嵌入式Linux開發(fā)環(huán)境
主要介紹Linux操作系統(tǒng)的使用和編程知識,包括Linux操作命令,文件和服務(wù),VI編輯器,GCC編譯器,GDB調(diào)試器,Make項目管理工具和Automake/Autoconfig等知識。
課程 內(nèi)容
嵌入式Linux開發(fā)環(huán)境 嵌入式Linux軟件開發(fā):嵌入式開發(fā)概念,嵌入式軟件領(lǐng)域,Linux在嵌入式的應(yīng)用,深圳嵌入式行業(yè)優(yōu)勢
Linux操作系統(tǒng):Linux的歷史與發(fā)展,Linux發(fā)行版本,在VMWare上安裝Linux,VMWare-Linux網(wǎng)絡(luò)配置
Linux文件和服務(wù): FTP共享,Samba服務(wù)器共享,NFS共享,VMWare共享
Linux命令:文件系統(tǒng)管理,磁盤管理,用戶與組管理,幫助與查詢,進程控制管理,文件壓縮
Vim/Emacs的使用
Linux shell編程:shell變量,流程控制,交互式腳本,shell函數(shù),文件過濾器,shell腳本實例
GUN GCC: gcc組成,可執(zhí)行文件構(gòu)造過程(預(yù)處理、編譯、匯編、鏈接),gcc選項,gcc代碼優(yōu)化,GUN binutils工具,objdump反匯編
靜態(tài)庫與動態(tài)庫:庫文件的概念,靜態(tài)鏈接與動態(tài)鏈接,創(chuàng)建靜態(tài)庫,創(chuàng)建動態(tài)鏈接庫,動態(tài)庫的隱式調(diào)用與顯示調(diào)用
Makefile:Makelfile概念,Makefile格式,Makefile的簡化,項目Makefile分析
Autotool: Autotool生成Makefile流程,configure腳本選項,Autotool-Makefile使用,Autotool開源項目的移植
GDB:用gdb調(diào)試程序,用gdb定位程序問題,gdb調(diào)試core dump
嵌入式交叉開發(fā)環(huán)境:交叉開發(fā)環(huán)境的組建,交叉編譯,交叉調(diào)試,掛載調(diào)試運行中的程序
第三階段:嵌入式數(shù)據(jù)結(jié)構(gòu)與算法
主要包括數(shù)據(jù)結(jié)構(gòu)和算法編程訓練,排序查找編程訓練,遞歸和棧編程訓練,字符串操作訓練和常用C庫函數(shù)編程接口實踐,強化學員對數(shù)據(jù)結(jié)構(gòu)與算法的理解和嵌入式Linux下編程開發(fā)和編碼調(diào)試的能力。
課程 內(nèi)容
嵌入式數(shù)據(jù)結(jié)構(gòu)與算法
算法概念:算法規(guī)范,算法性能分析(大O記法),性能度量,數(shù)據(jù)抽象與ADT
鏈表:數(shù)組表示鏈表,指針和結(jié)構(gòu)表示鏈表,單鏈表,循環(huán)鏈表,Linux雙向循環(huán)鏈表
堆棧:堆棧概念,堆棧的操作,數(shù)組實現(xiàn)堆棧,鏈表實現(xiàn)堆棧,堆棧表達式應(yīng)用
隊列:隊列概念,隊列的操作,數(shù)組實現(xiàn)隊列,鏈表實現(xiàn)隊列,循環(huán)隊列,雙向隊列和特殊隊列
符號表:符號表抽象,hash表,映射函數(shù),迭代器
排序算法:冒泡排序,交換排序,選擇排序,插入排序,謝爾排序,基數(shù)排序,快速排序,歸并排序
查找算法:線性查找,二分查找,插補查找
遞歸:遞歸關(guān)系,遞歸數(shù)學問題,漢諾塔問題,迷宮問題
樹:樹型結(jié)構(gòu)和特征,二叉樹數(shù)據(jù)結(jié)構(gòu),二叉樹遍歷,二叉樹查找
集合:集合抽象,集合操作,集合恒等式
圖:圖型結(jié)構(gòu)、圖的數(shù)據(jù)結(jié)構(gòu),圖的遍歷,最短路徑
項目實戰(zhàn):用C語言在嵌入式Linux平臺上開發(fā)企業(yè)員工信息管理系統(tǒng)
第四階段:Linux環(huán)境高級編程及項目迭代開發(fā)實踐
主要包括系統(tǒng)編程,文件I/O編程,串口編程,網(wǎng)絡(luò)編程;掌握Linux下Socket編程的開發(fā)流程,熟悉網(wǎng)絡(luò)編程的調(diào)用接口函數(shù)和相關(guān)數(shù)據(jù)結(jié)構(gòu),使學員具備在Linux上進行系統(tǒng)編程開發(fā)的能力。同時綜合之前所學內(nèi)容和編程技術(shù),學員以個體為單位進行嵌入式Linux應(yīng)用項目開發(fā),項目內(nèi)容包括嵌入式軟件迭代開發(fā)流程,項目開發(fā)文檔,多進程/多線程并發(fā)控制,文件I/O編程,串口編程,網(wǎng)絡(luò)編程。
課程 內(nèi)容
Linux系統(tǒng)編程 嵌入式應(yīng)用軟件分層結(jié)構(gòu):UI、業(yè)務(wù)控制、數(shù)據(jù)管理、通信集成
Linux C基礎(chǔ):程序、進程、線程的區(qū)別與聯(lián)系,程序映像布局,時間與定時器
Linux I/O:系統(tǒng)I/O,文件鎖,I/O復用模型,Termio與串口編程,F(xiàn)rame Buffer圖形操作,位圖與向量圖的顯示
音頻程序設(shè)計:OSS音頻程序、ALSA音頻程序
多進程編程:進程概念,進程狀態(tài)轉(zhuǎn)換,進程內(nèi)存布局,fork,exec函數(shù)族,僵尸與孤兒進程,守護進程
項目實戰(zhàn): 利用automake、進程架構(gòu)、串口收發(fā)、文件鎖、文件存儲數(shù)據(jù)技術(shù)進行項目建模
進程間通信:管道,信號,信號量,共享內(nèi)存,系統(tǒng)五IPC
多線程編程: Posix Pthread線程庫,線程生命周期,線程屬性,線程優(yōu)先級,線程調(diào)度策略
多線程并發(fā)控制:線程鎖,條件變量,消息隊列
項目實戰(zhàn):利用線程并發(fā)、共享內(nèi)存、消息隊列、循環(huán)buffer、文件鏈表進行項目細化
Linux網(wǎng)絡(luò)編程 網(wǎng)絡(luò)基礎(chǔ):OSI/TCPIP模型,網(wǎng)絡(luò)常識,TCP/IP協(xié)議,TCP與UDP的區(qū)別與聯(lián)系
常用網(wǎng)絡(luò)工具:網(wǎng)絡(luò)截包工具(wiresharp、etherpeek、tcpdump),網(wǎng)絡(luò)檢測程序(ping、ifconfig、route、netstate)
SOCKET編程:TCP,UDP
TCP服務(wù)器模型:fork服務(wù)器,線程服務(wù)器,io復用服務(wù)器
UDP服務(wù)器模型:串行服務(wù)器,為UDP傳輸增加可靠性
廣播與多播
原始socket和鏈路層訪問:Ping程序,IP沖突檢測,DOS攻擊,ARP欺騙
項目實戰(zhàn):利用TCP或者UDP為項目增加網(wǎng)絡(luò)通信功能
第五階段:嵌入式C++編程
主要介紹在嵌入式開發(fā)編程中C++在C基礎(chǔ)上的增強特性,C++面向?qū)ο蟮闹黝}:抽象、封裝、繼承、多態(tài),泛型編程和STL庫,MFC界面程序設(shè)計。
課程 內(nèi)容
嵌入式C++編程 C++在C語言基礎(chǔ)上的增強特性:const,引用,函數(shù)默認參數(shù),函數(shù)重載
C++面向?qū)ο蠹夹g(shù):面向?qū)ο蟾拍?抽象與封裝),C++的類,對象的創(chuàng)建與銷毀,復制構(gòu)造函數(shù),特殊數(shù)據(jù)與函數(shù)成員,對象的組織,對象動態(tài)分配內(nèi)存(new,delete)
高級對象主題:類的作用域與可見域,對象的生存期、作用域與可見域,友元,運算符重載,類型轉(zhuǎn)換
繼承:繼承的概念,派生類,派生類的構(gòu)造函數(shù)和釋構(gòu)函數(shù),繼承與組合,基類與派生類對象相互轉(zhuǎn)換
多態(tài):多態(tài)與虛函數(shù),虛函數(shù)的訪問,純需函數(shù)與抽象類,重載、覆蓋與隱藏
輸入輸出和文件:輸入輸出流,高層I/O,流類庫,>>和<<重載,文件操作,字符串流
命名空間:命名空間的概念,實體的作用域與可見域,命名空間的作用域與可見域
異常處理:防錯編程,C++異常機制,異常發(fā)生時的內(nèi)存管理
運行時類型識別:RTTI機制,類型轉(zhuǎn)換操作符
string類:何為string類,字符串的輸入與輸出,string類的功能
泛型編程--模板:類型參數(shù)化的概念,模板定義,函數(shù)模板,類模板,模板參數(shù)
泛型編程—STL:容器,迭代器,適配器,泛型算法
MFC界面程序設(shè)計:MFC及對話框概念,Dialog項目的創(chuàng)建與修改
,MFC的消息處理,MFC控件數(shù)據(jù)交換
項目實戰(zhàn):用C++實現(xiàn)FTPServer
第六階段:嵌入式Linux高級應(yīng)用
主要介紹嵌入式嵌入式軟件移植,Linux系統(tǒng)構(gòu)建(包括Bootloader工作原理、內(nèi)核裁減配置和交叉編譯、BusyBox,根文件系統(tǒng)制作),圖形界面和數(shù)據(jù)庫開發(fā)等知識。同時學員要為嵌入式Linux應(yīng)用項目增加GUI界面和數(shù)據(jù)庫應(yīng)用。
課程 內(nèi)容
嵌入式Linux高級應(yīng)用 嵌入式軟件移植:移植的概念,簡單Makefile項目的移植,Autoconf生成項目的移植,圖形界面配置
構(gòu)建嵌入式Linux系統(tǒng): Bootloader架構(gòu)和功能、vivi與uboot、Busybox根文件系統(tǒng)、Linux內(nèi)核裁剪、BootLoader和Kernel固化
嵌入式數(shù)據(jù)庫:嵌入式數(shù)據(jù)庫介紹,SQLite移植與使用,SQL語言,SQLite編程
嵌入式Web: 嵌入式Web介紹,BOA介紹,HTML介紹,BOA Web Server移植,BOA動態(tài)CGI程序編寫
Qt:signal&slot機制,Qt界面程序開發(fā)
Qtopia: 嵌入式Qtopia移植的Arm開發(fā)板, Qtopia窗口、菜單、對話框、控件, Qtopia可視化編程
Minigui:消息驅(qū)動機制,回調(diào)函數(shù), Minigui窗口、菜單、對話框、控件, Minigui界面程序開發(fā), Minigui移植到Arm開發(fā)板
項目實戰(zhàn):利用Qt或者Minigui為項目增加人機交互界面和數(shù)據(jù)庫
項目集成:UI界面層、并發(fā)控制層、數(shù)據(jù)管理、通信集成層聯(lián)合調(diào)試與測試