2015年12月9日21:16:07 對于這個(gè)案子以前做過了,并且不止做個(gè)一次。但是每次的處理辦法都不一樣,前面幾次的處理模式都不一樣。在做底層驅(qū)動(dòng)時(shí),因?yàn)榍懊?次的數(shù)據(jù)量不大,做了偷懶的方式來進(jìn)行。自己去描點(diǎn)然后修改圖片庫的內(nèi)容來實(shí)現(xiàn)自己想要的顯示內(nèi)容。做出這樣的選擇也是因?yàn)橛布淖儎?dòng),自己沒有深入的研究顯示打印的原理。在采用拼湊的策略下匆忙的完成了相關(guān)任務(wù)的交接作業(yè)。更坑爹是在代碼里面沒有相關(guān)的備注。導(dǎo)致本次的維護(hù)花費(fèi)了4個(gè)小時(shí)來回復(fù)記憶。整個(gè)調(diào)試時(shí)長大約11個(gè)小時(shí)! 出現(xiàn)的問題如下: 1、接手任務(wù)后并沒有對整個(gè)任務(wù)的架構(gòu)進(jìn)行思考,導(dǎo)致在剛開始作業(yè)的時(shí)候使用了是新項(xiàng)目的開發(fā)原則,從原理圖和ic的操作開始入手。消耗了一定時(shí)間出重復(fù)對于IC和原理圖的解讀; 2、對于已經(jīng)做過的案子,沒有做整個(gè)構(gòu)架的思考后就開始進(jìn)入到細(xì)節(jié)的修改。 a) 因?yàn)橛洃浀哪:裕`認(rèn)為修改某一個(gè)點(diǎn)就可以實(shí)現(xiàn)相關(guān)的功能,但實(shí)際需要修改多個(gè)地方才可以完成。導(dǎo)致自己被困在一個(gè)地方花費(fèi)大量的時(shí)間來處理一個(gè)自己認(rèn)為可能錯(cuò)誤的點(diǎn),而不是對整個(gè)構(gòu)架進(jìn)行維護(hù)。 b) 中午吃完飯后,有考慮重新對底層的東西進(jìn)行恢復(fù),又因?yàn)橄氲揭稽c(diǎn)其他的東西可能需要修改然自己再次陷入到以為修改一個(gè)點(diǎn)就可以實(shí)現(xiàn)全局任務(wù)的錯(cuò)誤思路里面。 c) 沒有時(shí)間概念,在開始做了幾個(gè)番茄時(shí)鐘后因?yàn)闆]有效果而放棄了退出思考的機(jī)會,進(jìn)入到死循環(huán)。錯(cuò)誤的認(rèn)為聽下來思考會浪費(fèi)時(shí)間而導(dǎo)致自己在一個(gè)錯(cuò)誤的結(jié)論上面死磕。 3、案子的相關(guān)記錄文件沒有; a) 也正是這個(gè)原因?qū)е伦约涸谝粋(gè)做了很多次的案子上面花費(fèi)了大量時(shí)間在死磕。 b) 自己不愿意去看寫過的代碼來讓自己快速的恢復(fù)對于整個(gè)驅(qū)動(dòng)的架構(gòu)描述,以便主機(jī)快速的完成相關(guān)的規(guī)劃作業(yè)。 c) 在調(diào)試過程中需要對于已經(jīng)出來的案子的原理做一個(gè)細(xì)致的說明文檔,以便主機(jī)可以在很短時(shí)間內(nèi)完成相關(guān)的系統(tǒng)構(gòu)架,以便自己可以在從全局的角度來進(jìn)行相關(guān)的思考。 4、代碼風(fēng)格的變化: a) 這個(gè)也本時(shí)間耗費(fèi)比較多的一個(gè)原因,前面因?yàn)殚e的蛋疼,竟然使用C++完成了這個(gè)案件,更坑爹的在C++里面沒有一個(gè)注釋說明,然自己花了不少時(shí)間在思考C++的編程規(guī)范,最后因?yàn)闀r(shí)間問題而放棄,開始重新轉(zhuǎn)碼為C操作。 b) 前期的代碼命名規(guī)則變化太多,導(dǎo)致自己在調(diào)試過程中出現(xiàn)了一些麻煩,很難憑借字面意思去琢磨這個(gè)函數(shù)的作用。 5、IAR 編譯器的一個(gè)細(xì)節(jié):在IAR的平臺進(jìn)行數(shù)據(jù)轉(zhuǎn)換的時(shí)候它默認(rèn)是小端模式,也因?yàn)檫@個(gè)問題讓自己在對數(shù)據(jù)進(jìn)行轉(zhuǎn)碼的時(shí)候出現(xiàn)了一些沒有考慮到位的地方,后期在做數(shù)據(jù)變化的時(shí)候還是要順應(yīng)大環(huán)境才行逆天的事情可以干,但是那的看這個(gè)事情可以獲得多少好處! 6、歷史案件的處理流程: a) 需要從架構(gòu)上來對對整個(gè)案子進(jìn)行恢復(fù)記憶,特別是你需要進(jìn)行修改的業(yè)務(wù)!不要因?yàn)樽约旱哪:洃浘烷_始動(dòng)手操作 b) 在對憑借記憶進(jìn)行操作的時(shí)候需要有時(shí)間限定,沒有搞定就需要退出,進(jìn)行重新編輯,這樣的效率要比自己在一個(gè)地方死磕快并且不會讓自己那么失落! c) 同樣的坑,不能跳3次,不能因?yàn)樽约旱挠洃浲蝗幌氲搅耸裁从洲D(zhuǎn)到另一個(gè)地方進(jìn)行修改這樣的處理模式只會讓自己陷入到內(nèi)耗中; d) 如果規(guī)定的時(shí)間無法恢復(fù),就必須放棄恢復(fù),重新對整個(gè)構(gòu)架進(jìn)行思考重新作業(yè)。
附件: LED顯示處理作業(yè)流程: 1、工作原理: a) 其是利用人的視覺暫停效應(yīng)來實(shí)現(xiàn)類似靜態(tài)的數(shù)據(jù)顯示效果。其在操作的時(shí)候多使用行列的方式來進(jìn)行處理。 2、顯示圖例: 3、基于這樣的原理,我們在調(diào)試的過程中基本是按照行列的方式來進(jìn)行測試的。當(dāng)我們需要打印特定的內(nèi)容時(shí),因?yàn)樵诶L制PCB板時(shí),因?yàn)椴季或者硬件開發(fā)的人員對于數(shù)據(jù)顯示的類容并不是按照某一統(tǒng)一的規(guī)定來繪制的。在這樣的情況下,我們首先需要確定的我們的RAM與LED顯示位置是否一一對應(yīng)! 4、RAM與LED顯示位置確定的辦法: a) 需要根據(jù)原理的來進(jìn)行判斷它是按照什么樣的規(guī)則來進(jìn)行,常規(guī)的按照字節(jié)來進(jìn)行劃分的,也有可能是使用4bit位來進(jìn)行劃分的?梢酝斎0XFF 這類數(shù)據(jù)來進(jìn)行判別,看是否在一個(gè)連續(xù)區(qū)域即可識別或者看原理圖是否存在01238765 這類奇葩的排列方式,如果有則你處理的最要單元需要降級 b) 需要自己的driver層里面完成,數(shù)據(jù) 8bit的取反、高低位互換、4bit提取和拼接等相關(guān)功能函數(shù),并確認(rèn)其正常正常。 5、調(diào)試策略說明: a) 使用FF 這類數(shù)據(jù)確認(rèn)自己的顯示區(qū)域在位置 b) 使用01 或者1 這類數(shù)據(jù)來確認(rèn)數(shù)據(jù)的大小端,如果你認(rèn)為這兩個(gè)數(shù)字是一樣的話,我只能說你想的太少! c) 使用1 2 4 8 來確認(rèn)各個(gè)位是否正確,使用3 7 B D E 來驗(yàn)證大小端是否正確; d) 在調(diào)試的時(shí)候你可以選擇使用STATIC 的方式來聲明局部變量,這樣方便查看,但是記得做初始化操作,否則當(dāng)你做與 或操作的時(shí)候你有可能遇到一些坑爹的事情,這個(gè)在對于臨時(shí)變量更嚴(yán)重,切記要做初始化操作,否則有可能你每次的結(jié)果都是隨機(jī)數(shù); e) 需要從原理圖上來確認(rèn)自己的掃描方式,如果你是一次對多個(gè)行列進(jìn)行賦值的話需要對各個(gè)賦值的行列進(jìn)行獨(dú)立操作,具體辦法重復(fù)a-d的過程即可。 6、整體打印說明: 在做調(diào)試的時(shí)候一定要清楚的認(rèn)識到自己的顯示大小端的一致性,不要跟著原理圖來走,按照它的邏輯出牌基本是要掛的,除非你使用的標(biāo)準(zhǔn)件!
|