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