嵌入式工程師,解析硬核單片機(jī)編程思想!
關(guān)注、星標(biāo)公眾號,直達(dá)精彩內(nèi)容
ID:技術(shù)讓夢想更偉大
整理:李肖遙
一個數(shù)據(jù)結(jié)構(gòu),一個模塊形成,一個單片機(jī)的指令,一個硬指令的運(yùn)行機(jī)制,一個口線的驅(qū)動方式,一個中斷的順序,一個跳變的延遲,一個代碼的位置,一個邏輯的組織,一個模塊與模塊之間的生(運(yùn)行時的狀態(tài))死(不運(yùn)行時的狀態(tài))關(guān)系等等,都是裸程序思想的組成部分。
二、裸編程具體做法
我們知道網(wǎng)絡(luò)傳輸標(biāo)準(zhǔn)層次有七層:應(yīng)用層、表示層、會話層、傳輸層、網(wǎng)絡(luò)層、鏈路層、物理層,這么多層做什么用?也許理解這樣分層的概念也十分辛苦,但是理解這樣分層的思想,就容易多了,而且這也是我們硬件工程師們最應(yīng)該借鑒的思想,讓我們的硬件設(shè)計更具有標(biāo)準(zhǔn)性和前瞻性。
這個七層的思想從根本上講就是將一個網(wǎng)絡(luò)傳輸產(chǎn)品細(xì)化,讓不同的制造商選擇一個適合自己的層次開發(fā)自己的產(chǎn)品,層次不一樣,他們所選擇的開發(fā)基礎(chǔ)和開發(fā)內(nèi)容就不一樣,高一層開發(fā)者繼承低層開發(fā)者的成果,從而節(jié)省社會資源,提高社會生產(chǎn)力。對這個指導(dǎo)思想我就不贅述了,各位自己去理解,這里要說的是,微機(jī)上的面向?qū)ο缶幊趟枷刖褪侨缤趹?yīng)用層上實(shí)現(xiàn)的思想,而裸程序的面向?qū)ο笏枷雱t如同在鏈路層上實(shí)現(xiàn)的思想,他下面沒有軟件開發(fā)包,只有物理構(gòu)架。但是在應(yīng)用層上實(shí)現(xiàn)的思想,最終都要翻譯到物理構(gòu)架上。
但是面向?qū)ο蟮乃枷氩皇沁@樣做的,而是首先把顯示器當(dāng)作一個對象,該對象具有一些功能和一些變量屬性,不同的顯示器在對象中使用相同的代碼標(biāo)識,如函數(shù)指針(C語言中),這樣對于任何一個不同的顯示器,在調(diào)用時都使用同樣的代碼。也許有人說,傳統(tǒng)的做法這樣也可以做呀,為什么要弄得羅里吧唆的呢?其實(shí)不然,使用了正確的思想的好處在前頭已經(jīng)說了好多了,如果還模糊就上去再看一次。
三、準(zhǔn)備工作
dispShowAChar();//顯示一個字符dispShowALine();//顯示一行字符
dispMainThread();//按指定的要求執(zhí)行顯示功能//指定的要求包括顏色信息、閃爍、游動等等
四、展開思想
dispGetMaxCol();//取一行最多有多少列dispGetMaxRow();//取顯示器一共有多少行dispGetMaxColors();//取顯示器最多有多少色dispSetShowMode();//設(shè)置顯示的方式,對于不支持的顯示方式就自動轉(zhuǎn)為正常顯示dispSetWorkMode();//設(shè)置工作模式,如果沒有的模式就返回0,支持的就返回1
五、數(shù)據(jù)傳遞與程序邏輯是同等重要的
#defineMonitor02_MaxColors0x0001UINTdispGetMaxColors(){returnMonitor02_MaxColors;}
#defineMonitor_000#defineMonitor_011#defineMonitor_022UINTdispGetMaxColors(){//以下用多出口,但這并不會破壞什么,為節(jié)約代碼,完全可以使用switch(MonitorType){caseMonitor_01:returnMonitor01_MaxColors;caseMonitor_02:returnMonitor02_MaxColors;}returnMonitor00_MaxColors;//缺省則返回默認(rèn)顯示器}
#defineMax_Monitor_Types3***#defineMonitor00_MaxColors1UINTcodeMonitorMaxColorsArray[Max_Monitor_Types]={Monitor00_MaxColors,//缺省為單色Monitor01_MaxColors,Monitor02_MaxColors,};***
UINTdispGetMaxColors(){returnMonitorMaxColorsArray[MonitorType];}
六、父對象接口函數(shù)與子對象功能剝離
七、裸程序設(shè)計中面向?qū)ο笏枷氲膶哟侮P(guān)系

相信這張圖已經(jīng)足夠說清楚我們在KeilC中如何用語言來組織我們的顯示器對象disp了。disp是一個抽象的對象,它只是一種聯(lián)系,完成對所有子對象d000、d001、d002到最多d255的歸納概括并提供一組被調(diào)用者所使用的功能接口。這些功能接口正是上貼所提到的函數(shù)指針。而具體的功能實(shí)現(xiàn)及不同顯示對象對數(shù)據(jù)結(jié)構(gòu)的要求,我們都可以交給子對象設(shè)計工程師自己去決定。
推薦閱讀:
嵌入式編程專輯 Linux 學(xué)習(xí)專輯 C/C++編程專輯 Qt進(jìn)階學(xué)習(xí)專輯 關(guān)注微信公眾號『技術(shù)讓夢想更偉大』,后臺回復(fù)“m”查看更多內(nèi)容;掃描下方微信,加作者微信進(jìn)技術(shù)交流群,請先自我介紹喔。
評論
圖片
表情

