第1章 數據驅動程序 1
1.1 數據驅動程序 1
【導讀】本節通過對數據驅動程序的概念的界定(1.1.1節)與數據驅動程序的簡介(1.1.2節),讓讀者初步瞭解數據驅動程序。
1.1.1 數據驅動程序的定義 1
1.1.2 數據驅動程序簡介 2
1.2 4支方波問題與測試模型 4
【導讀】本節對4支方波同步實現的問題(本書的問題1)進行瞭分析(1.2.1節),並建立一個數字測試模型(1.2.2節)。本節隻是數據驅動程序的引子,具體的數據驅動程序的編寫需要經曆一個漫長的演變纔能完成(在後續章節中逐步實現)。
1.2.1 問題1與分析 4
1.2.2 測試模型 5
1.3 一支峰榖等寬方波的實現 6
【導讀】為瞭獲得4支方波同步實現的解決方法,先簡化問題,從一支有規律的峰榖等寬的特例方波的實現入手來尋求答案。本節先對這支特例方波進行特性分析(1.3.1節),然後利用常規方法進行實現(1.3.2節),最後通過1.2.2節建立的仿真測試模型對這支特例波的實現效果進行驗證。
1.3.1 問題1-1與分析 6
1.3.2 實現 8
1.3.3 仿真 8
1.4 一支峰榖不等寬方波的實現 9
【導讀】本節對解決問題的任務進行瞭深入分析,將這支等寬的特例方波改成不等寬的普通方波,並對這支普通方波進行分析(1.4.1節)與實現(1.4.2節),最後進行仿真驗證(1.4.3節)。為瞭嚮終極目標邁進,本節對這次實現的代碼進行瞭亮點分析(1.4.4節),從而引導讀者從平凡的代碼中去尋求那些寶貴的關鍵點。
1.4.1 問題1-2與分析 9
1.4.2 實現 10
1.4.3 仿真 11
1.4.4 亮點分析 11
1.5 兩支波的實現 12
【導讀】通常,多支波的難度係數遠遠大於1支波的難度係數,而多支波的波數對難度係數的影響不大。但是波數越小,復雜度就越小。所以本節從多支波集閤中的2支波嚮終極問題挺進。本節在對問題進行分析(1.5.1節)之後很輕鬆地就進行瞭實現(1.5.2節),似乎睏難根本就沒存在過。接下來的仿真(1.5.3)繼續為研究的深入提供瞭信心,而亮點分析(1.5.4節)則嚮讀者暗示:這裏的代碼很平凡,但是裏頭卻隱藏著什麼。
1.5.1 問題1-3與分析 12
1.5.2 實現 14
1.5.3 仿真 15
1.5.4 亮點分析 15
1.6 4支波的實現 16
【導讀】本節通過對問題的分析(1.6.1節)、實現(1.6.2節)與仿真,呈現給讀者一個完整的解決方案,但這個方案隻是一個普通的方案。至此讀者需要思考的是:這個普通的方案與數據驅動有著什麼樣的關聯呢?
1.6.1 問題1-4與分析 16
1.6.2 實現 17
1.6.3 仿真 19
1.7 冗餘代碼的一次簡化 20
【導讀】煩則思變,一個常規的方法往往是不完美的,但是我們所期待的完美卻又離不開一個不完美的開始。所以我們絕不能盲目拋棄一個不完美的方案,本節通過對這個常規方案的亮點分析(1.7.1節),然後進行閤理簡化(1.7.2節),從而尋求一種科學的編程思路。
1.7.1 亮點分析 21
1.7.2 代碼簡化 22
1.8 冗餘代碼的二次簡化 23
【導讀】隨著簡化進程的推進,數據驅動程序的思想已經躍然於代碼之上(1.8.2節)。
1.8.1 亮點分析 24
1.8.2 代碼簡化 24
1.9 冗餘代碼的三次簡化 26
【導讀】優化後的代碼(1.8.2節)帶給我們新的啓示(1.9.1節),數據可以從代碼中分離齣去瞭,分離齣去的數據稱為數據腳本(1.9.2節),我們可以用播放器來播放這種腳本(1.9.3節),到此我們將對編程耳目一新,也到瞭思考的時候瞭(1.9.4節)。
1.9.1 數碼分離的啓示 26
1.9.2 數據腳本 27
1.9.3 數據驅動的實現 28
1.9.4 迴顧與思考 29
1.10 4支波數據驅動程序應用 29
【導讀】我們獲得瞭一種新的思想,現在可以小試牛刀瞭,將4支方波的形式轉換一種麵目(1.10.1節),這看似迥然不同的問題,是不是會讓我們有顧慮?其實不必擔心,我們輕鬆就能解決這種問題(1.10.2節)。
1.10.1 問題2與分析 30
1.10.2 實現 32
1.10.3 仿真 33
1.10.4 迴顧與思考 33
1.11 總結 34
【導讀】繼續將問題異樣化(1.11.1節),更復雜的現象依然遵循一個簡單的道理。至此我們將見識數據驅動的強大力量,所以我們得讓這種程序衣冠楚楚地齣現在我們的麵前(1.11.2節至1.11.4節),我們得從方法論上掌握這種思想(1.11.5節)。
1.11.1 問題3與分析 34
1.11.2 規範腳本 35
1.11.3 規範播放器 36
1.11.4 規範實現 37
1.11.5 迴顧與思考 38
第2章 並行多任務程序 42
2.1 初識並行多任務程序 42
【導讀】什麼是並行多任務程序(2.1.1節)?單片機能不能勝任並行處理工作(2.1.2節)?本節將給齣答案。
2.1.1 釋義 42
2.1.2 單片機能力的評估 43
2.2 並行三任務問題與測試平颱 45
【導讀】為瞭見識並行多任務程序的廬山真麵目,本節同樣利用典型問題(2.2.1節)作為開篇,並建立瞭一個新的測試模型(2.2.2節)。
2.2.1 問題4與分析 45
2.2.2 測試模型 46
2.3 並行三任務問題的順序編程 47
【導讀】我們是不是習慣於使用常規思維來思考問題?我們可以用這種方法來做做看(2.3.2),然後仔細審視一下實現的效果(2.3.3節、2.3.5節、2.3.6節),是不是看似正確,又存在問題(2.3.7節)?這就是常常齣現的所謂的不穩定現象(2.3.8節)。
2.3.1 問題與分析 47
2.3.2 實現 48
2.3.3 仿真一 50
2.3.4 測試分析 50
2.3.5 仿真二 52
2.3.6 仿真三 53
2.3.7 仿真四 53
2.3.8 迴顧與思考 54
2.4 運行時序 55
【導讀】問題的根源是什麼?是我們需要掌握單片機運行時的時序真相(2.4.1節),要真正瞭解一個中央處理單元應該如何運行多任務(2.4.2節、2.4.3節)。
2.4.1 時序分析 55
2.4.2 並行多任務 56
2.4.3 並行多任務的可行性 57
2.5 我們的微操作係統 59
【導讀】裸編程時,我們常常習慣無視環境的存在,這也正是裸編程的典型特徵,但是新的需求讓這種思想窘態百齣,我們需要自己的微操作係統(MOS,2.5.3節),需要在MOS中編寫全新理念的程序。
2.5.1 操作係統與並行多任務 59
2.5.2 單片機的優劣分析 60
2.5.3 微操作係統 62
2.6 任務的生與死 63
【導讀】在MOS中編程,我們必須要遵守一定的約束,把任務看作一個個的生命體,並讓它們生活在MOS中,而我們則掌握著它們的生殺大權(2.6.4節、2.6.5節)。
2.6.1 問題5與分析 63
2.6.2 問題5的實現 63
2.6.3 暗點分析 64
2.6.4 任務的生死狀態 65
2.6.5 “生”與“死”的實現 65
2.6.6 迴顧與思考 66
2.7 一個任務的綫程 67
【導讀】簡化問題,各個擊破,是解決問題的絕佳方法,所以本節先實現一個任務(2.7.2節),然後探究其中的奧秘(2.7.3節)。
2.7.1 問題與分析 67
2.7.2 實現 69
2.7.3 迴顧與思考 71
2.8 並行多任務綫程 73
【導讀】為瞭實現並行多任務,我們先引入一個與硬件無關的純代碼問題(2.8.1節),這樣便於對代碼規律進行研究(2.8.3節)。
2.8.1 問題與分析 73
2.8.2 實現 74
2.8.3 迴顧與思考 76
2.9 並行多任務多綫程的數據與代碼分離 78
【導讀】數據與代碼分離的編程策略再次登場(2.9.1節),由此可見這種策略是一種必不可少的思想基礎(2.9.3節)。
2.9.1 問題與分析 78
2.9.2 實現 81
2.9.3 迴顧與思考 84
2.10 任務的生命 86
【導讀】也許我們認為生死與生命是一個東西,但是嚴格來說,二者並不是一個東西。本節將揭示二者的差彆所在。
2.10.1 問題與分析 86
2.10.2 實現 87
2.10.3 迴顧與思考 90
2.11 任務的復活 92
【導讀】本節將賦予裸編程者以造物主的思想,不但可以決定一個任務的生死,還可以任意地讓某個任務重生。
第3章 定時器與延時器 94
3.1 並行多任務多綫程的等待方案 94
【導讀】等待(3.1.1節)是讓順序編程思想崩塌的火山,如果沒有這種耗時大戶,順序編程思想仍能苟延殘喘。所以我們必須要接觸這兩個傳奇英雄(3.1.2節)。
3.1.1 概述 94
3.1.2 軟件定時器與軟件延時器 95
3.2 一個軟件定時器 96
【導讀】學會使用軟件定時器,能讓我們不再為有限的硬件定時器而苦惱,所以需要先實現(3.2.4節)一個軟件定時器(3.2.1節),以便獲得定時器的新概念。
3.2.1 問題6與分析 96
3.2.2 測試模型 97
3.2.3 問題與分析 97
3.2.4 實現 99
3.2.5 仿真 100
3.3 8個軟件定時器 100
【導讀】我們知道,1與多迥然不同,但是2與多則差異不大。所以本節我們直接從1個軟件定時器的實現變成8個軟件定時器(3.3.1節)的實現(3.3.2節)。
3.3.1 問題與分析 100
3.3.2 實現 102
3.3.3 仿真 107
3.3.4 迴顧與思考 107
3.4 軟件定時器代碼優化 109
【導讀】代碼優化是編程者一項重要的工作內容,而不論這種優化能進行到什麼程度。軟件定時器的代碼該如何優化呢(3.4.1節)?請看這裏的實現(3.4.2節)。
3.4.1 問題與分析 109
3.4.2 實現 110
3.4.3 迴顧與思考 114
3.5 時基中斷的時序與主程序的關係 114
【導讀】盡管軟件定時器解決瞭單片機定時器資源的不足,但是軟件定時器到底能有多少呢?本節將迴答這個問題。
3.5.1 時序分析 114
3.5.2 迴顧與思考 116
3.6 一個延時器 116
【導讀】雖然軟件定時器使用起來已經很方便瞭,但它總是在擠兌其他任務,它具有很高的優先級,而有時我們並不希望耗時短的任務進行過長的等待,所以我們需要一種優先級低的延時工具——延時器。
3.6.1 問題7與分析 116
3.6.2 實現 118
3.6.3 迴顧與思考 119
3.7 8個延時器 120
【導讀】與軟件定時器一樣,延時器也會多個並存而呈現為並行多任務形態,這裏引入8個延時器並發運行的問題(3.7.1節)並提齣解決方案(3.7.2節)。
3.7.1 問題與分析 120
3.7.2 實現 120
3.7.3 迴顧與思考 126
3.8 延時器的優化 126
【導讀】延時器的實現代碼如何優化?本節將會詳細討論(3.8.2節)。
3.8.1 問題與分析 126
3.8.2 實現 128
3.9 任務代碼的初步改造 132
【導讀】問題4提齣已久,但是我們並未正麵解決它,而是插入瞭並行多任務的編程思想,這些思想與問題4有什麼關聯呢(3.9.1節)?請看本節是如何處理的(3.9.2節)。
3.9.1 問題與分析 132
3.9.2 實現 132
3.9.3 迴顧與思考 135
3.10 消息處理 136
【導讀】在一個MOS中編程,往往會産生不少新的編程策略,消息機製就是一個典型。本節將重點介紹消息機製(3.10.1節)並舉例說明消息處理代碼編寫的方法(3.10.2節)。
3.10.1 問題與分析 136
3.10.2 實現 137
3.10.3 問題分析 139
3.10.4 實現 139
3.10.5 迴顧與思考 142
3.11 廣播消息 142
【導讀】盡管消息機製隻是一個概念,但是對應消息的處理卻十分豐富。本節將重點探討消息是如何廣播的。
3.11.1 問題與分析 142
3.11.2 實現 143
3.11.3 迴顧與思考 147
3.12 任務代碼的最終改造 148
【導讀】萬事俱備,現在我們隻需要利用並行多任務思想、消息機製、任務嵌套手段來分析問題4(3.12.1節)與解決問題4(3.12.2節)就可以瞭,對於新程序的正確性我們可以進行仔細驗證(3.12.3節),您一定會發現,原來一個好的思想是多麼的神奇,您甚至不用擔心會存在BUG。
3.12.1 問題與分析 149
3.12.2 實現 149
3.12.3 仿真 154
3.12.4 迴顧與思考 154
3.12.5 亮點分析 155
3.13 狀態指示燈 155
【導讀】這是一個常見的問題,也是並行多任務思想的一個典型綜閤應用。為瞭節省資源,設備隻有一個指示燈,它必須同時完成不同狀態的指示(衝突時靠後者指示優先),如何做到這一點呢?本節將給齣完整的實現策略。
3.13.1 問題8與分析 155
3.13.2 測試模型 157
3.13.3 實現 157
3.13.4 迴顧與思考 161
第4章 麵嚮對象的程序 162
4.1 計算機的語言特徵 162
【導讀】發現新思想,從用正確的視角看C語言開始(4.1.1節);瞭解智能芯片的心情,從瞭解自己的心情開始(4.1.2節)。本節將從思想角度來引導讀者走齣常規思維的盲區。
4.1.1 正視C語言 162
4.1.2 以對象看世界 163
4.2 兔類的傳奇 164
【導讀】代碼中的對象理解起來十分生澀,但是我們可以從生活中的對象開始(4.2.1節),一隻兔子能帶給我們什麼樣的啓迪(4.2.2節)?一隻兔子與兔子的種群有著什麼樣的關係(4.2.3節、4.2.4節)?本節將要展示單片機內心世界中的兔子種群是什麼樣的(4.2.5節)。
4.2.1 兔類淺說 164
4.2.2 單片機中的兔類 165
4.2.3 兔類的結構 166
4.2.4 兔類的屬性成員 167
4.2.5 兔類的實現 169
4.3 兔子的傳奇 170
【導讀】我們可以像上帝一樣設計一個種群,然後根據這個種群的特點創造一隻隻的兔子對象。本節將深刻探討兔子對象有著什麼樣的傳奇。
4.3.1 問題9與分析 170
4.3.2 實現 171
4.3.3 迴顧與思考 173
4.4 麵嚮對象編程的書寫規範 174
【導讀】如何讓思想成為方法論,這也是本書的重要任務之一。本節打開從思想通嚮實踐的時空隧道,指引讀者一步步將麵嚮對象思想落到實處。
4.4.1 問題與分析 174
4.4.2 實現 180
4.5 方波對象 184
【導讀】單片機中幾乎不會有兔子,但會有方波。本節從一個走進單片機內心世界的兔子模型開始講解,逐漸引導讀者進入單片機的內心世界去看一支方波。因為隻有方波纔是單片機內心世界的常見對象。
4.5.1 問題10與分析 184
4.5.2 測試模型 186
4.5.3 綜閤分析一 186
4.5.4 增補的麵嚮對象編程的頭文件 189
4.5.5 綜閤分析二 190
4.5.6 實現 198
4.5.7 仿真 207
4.5.8 迴顧與思考 207
第5章 對象的歸宿 209
5.0 引言 209
【導讀】思想與方法論的改變對我們的産品和工作會帶來哪些影響呢?本節簡單地引齣問題。
5.1 解密對象魔法 209
【導讀】生命是一個對象的本質特徵,掌握對象的生命特徵是靈活運用對象思想的重要保證。
5.1.1 對象的生命特徵 210
5.1.2 對象生命特徵的含義 210
5.2 項目管理 211
【導讀】對象思想的項目化是麵嚮對象編程進入實踐的基本途徑,本節將探討如何用一個Keil C的Project文檔來組織一個對象思想的程序。
5.2.1 項目的內容 211
5.3 項目的實現 214
【導讀】本節組織文檔的內容。
5.3.1 文檔的落實 214
5.3.2 文檔的分包 222
5.4 對象文檔與項目分離 224
【導讀】為瞭增加代碼的可再用性,我們得讓常用代碼與某一個具體的項目分離。對象就是這種典型的常用代碼,我們得讓它從物質基礎上獨立於整個項目。
5.4.1 任務與分析 224
5.4.2 麵嚮對象編程的層次關係 225
5.5 源碼的商業保護 226
【導讀】商業保護是日常工作的一個重要事務,保護源碼,發布二進製碼是一個基本做法,而庫製作則是實現二進製碼發布的一個重要工具,本節具體介紹庫的相關知識。
5.5.1 庫文件 226
5.5.2 庫中的模塊 227
5.5.3 製作庫 228
5.5.4 使用對象庫 229
5.5.5 庫、模塊與對象的關係 230
5.5.6 庫的操作 230
5.5.7 創庫計劃 232
5.6 對象的花絮 233
【導讀】一個思想上的對象,屬於上層建築的內容,所以它依賴很多物質基礎(5.6.2節、5.6.3節),任何一個離散的物質基礎都會對它産生或多或少的影響,我們要掌握這些虛虛實實的內在關聯(5.6.3節),並能抽象與總結這種客觀的存在(5.6.1節、5.6.4節)。
5.6.1 對象分析的觀點 233
5.6.2 內存統籌的觀點 234
5.6.3 虛擬與現實相通的觀點 234
5.6.4 常見的對象 238
第6章 寶貝車的綜閤應用 241
6.1 寶貝車簡介 241
【導讀】通過一個具體的寶貝車應用(6.1.1節)來將前麵所述思想進行一個綜閤的實踐。
6.1.1 問題11 241
6.2 對象分析 242
【導讀】對象與對象之間既獨立,又閤作,本節通過寶貝車的對象分析來介紹對象關係的處理方法(6.2.1節),並構造一個寶貝車的對象資源庫(6.2.2節)。
6.2.1 組閤對象與實現 242
6.2.2 寶貝車的庫項目 246
6.3 實現對象 248
【導讀】本節完成寶貝車對象的各種行為特徵的全部代碼設計。
6.3.1 車輪的定義 248
6.3.2 脈衝發生器 249
6.3.3 寶貝車的控製 252
6.3.4 寶貝車的創建 253
6.3.5 實現 254
6.3.6 修成正果 259
6.4 對象的使用 259
【導讀】本節將演示在一個具體的項目中如何很方便地使用一個共享的獨立對象代碼資源庫中的對象——寶貝車。
參考文獻 261
· · · · · · (
收起)