單片機編程魔法師之高級裸編程思想

單片機編程魔法師之高級裸編程思想

《單片機編程魔法師之高級裸編程思想》是2014年9月電子工業出版社出版的圖書,作者是余燦基。

基本介紹

  • 中文名:單片機編程魔法師之高級裸編程思想
  • 作者:余燦基 
  • ISBN:78-7-121-23972-4
  • 頁數:280頁
  • 出版社:電子工業出版社
  • 出版時間:2014年9月
  • 開本:16開
  • 定價:59.00元
內容簡介,目錄,編輯推薦,

內容簡介

《單片機編程魔法師之高級裸編程思想》以單片機裸環境為基礎,為編程者定義了一個微作業系統(MOS)的編程環境,並面向套用中不斷提高的需求對編程策略進行了深度剖析與研究,從而分離出數據驅動、並行多任務、面向對象等重要編程思想。這些思想既可獨立運用,又可有機結合成一個體系,是我們實踐中解決問題的致勝法寶。《單片機編程魔法師之高級裸編程思想》以實例為基礎,分6章對這一思想體系進行了闡述。闡述通常以提出問題開始,然後針對解決問題的現狀,從心理學的角度對問題展開討論,力求將容易遇見的問題一網打盡。《單片機編程魔法師之高級裸編程思想》通過一些列的最佳化過程對思想要點進行完整描述,然後通過軟體仿真手段給讀者一個清晰的認識,並在最後進行歸納總結。
《單片機編程魔法師之高級裸編程思想》既介紹了思想,又介紹了使用思想的方法。無論您是單片機自動化領域的初行者,還是資深的單片機自動化領域的工程師,《單片機編程魔法師之高級裸編程思想》都將成為您的得力幫手。希望這種既有理論又有方法論的闡述方式能幫助讀者在事業上更上一層樓。

目錄

第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

編輯推薦

時下,很多人在設計智慧型產品時,喜歡為產品裝備高檔晶片,那架勢仿佛即使什麼代碼都不用寫,他的產品就已經是很先進的了。
我們的需求經常很有限,即使是使用單片機都會覺得資源浪費,又怎么會需要更高配置的硬體資源呢?也許在一些套用中我們會遇到一些難題,我們害怕它們,從而指望通過技術升級來解決問題,但是站在套用角度的我們,真的就無能為力了嗎?很多盲目升級晶片檔次的人不是真正為了提升技術含量的檔次,更多的是為了掩飾自己在編程技術上的不足。其實,我們只要稍微修煉一下,一切問題都會迎刃而解。
一些介於單片機與微機之間的高檔處理機擁有強大的硬體與軟體資源,這似乎讓單片機望塵莫及,因為高檔處理機往往會在硬體上集成更多的單元來武裝自己。然而,很多所謂技術的進步,都只是一些技巧的進步。
高檔處理機的另一個優勢便是它們擁有強大的軟體支持,它們會固化一些軟體包,或者支持作業系統。通過技術的向下移植,高檔處理機可以做一些原來只有計算機系統才能做到的事情,比如代碼的記憶體調度,並行多任務運行,等等。但是只要你有足夠的編程策略,利用單片機來實現那些功能,其實也是不在話下的。
單片機作為一個五臟俱全的小麻雀,高檔處理機能做到的,單片機也完全能做到。
但是如何做呢?這就是本書我們要探討的問題。
本書第1章通過對4支方波並行輸出方案的探究引入數據驅動編程的理念。第2章則通過三個互不相關,但要同時運行的並行任務提出並行多任務編程思想,並引入了微作業系統(MOS)編程環境的理念。為了強化這一思想,本書在第3章直接針對我們在實際工作中經常遇到的問題——多定時器、多延時器問題進行多執行緒編程實現,並在實現過程中引入訊息處理機制。通過前3章的技術準備,在第4章正式提出面向對象的編程思路。第5章為這種編程思路(上層建築)給予一個具體的實踐形態(物質基礎),同時對實踐形態中的一些本質問題花絮也進行了討論。最後,第6章通過對寶貝車面向對象編程的實踐來對全書的裸編程思想進行一次完整而簡明的演練,以期讓思想這種抽象的東西變得實實在在!
關於本書的原始碼,讀者可以在電子工業出版社的官網的“線上資源”中下載。
下面,就讓我們一起來見證編程技巧給單片機帶來的神奇吧。
余燦基

相關詞條

熱門詞條

聯絡我們