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