經過了這半年多,甚至是更久的嵌入式自學,可謂是不斷在絕望中求生。性格使然,我是乙個我也不知這種性格的學名叫什麼,就是學習一種東西,非得想要能理解每一處的含義作用為什麼要這樣做沒有其他辦法了嗎等等問題。並且當乙個問題找不到讓我能接受的解釋時,那麼我的學習路程也就幾乎要停在這裡了,大概是因為我討厭一知半解(可能是小時候被老師教導不要做書呆子的教育有關,小時候,聽話孩子,認真,長輩的教育對孩子的影響真的是非常的大,很多影響如果你不細心的觀察自己,你根本不能察覺這些進入了你骨子的觀念,在我成長過程中,這些長輩的教育除了某些讓我自己經歷到並徹底認識到某個觀念並不正確時,我才會形成自己的觀點,自己的觀念,但這些自己的觀念在所有的價值觀中,猶如滄海一粟。這種討厭一知半解的性格,在現在這個社會來說,可以說是極端的,因為現在你學習使用的很多東西,他都不是從零開始的,就好比,你程式設計使用的是高階語言而不是低階語言不是機器碼),所以我的整個學習過程是非常緩慢緩慢地進行著,這麼說吧,前面說我經過了半年多的學習,但是到現在為止,我接觸嵌入式已經有兩個年頭了,也就是說,學習期間,我有一年多是在停滯著。
學習嵌入式,或者說學習現代的計算機程式設計,如果你想學好,有乙個比較要求,那就是你能接受它的設定、它的模式。反過來說,當你真正接受它的設定、它的模式,並記住它們時,我認為,你已經學好了。
之所以突然著開部落格,會寫這篇文章,是因為,昨夜,我又置之死地而後生了一次。
下面我說下自編驅動與核心驅動原始碼各自的問題:
自便驅動:
程式簡單簡潔,它只能驅動特定的某個裝置。如果裝置換了需要支援另一款裝置,那麼你需要重新修改該驅動;如果需要系統同時支援兩種lcd,那麼它就會變成複雜並且對於核心驅動的簡潔優勢會削弱不少;如果你想驅動支援多種裝置,那自編驅動,相對了核心驅動原始碼的簡潔優勢會變成了劣勢,因為程式設計思想的適用範圍不同而產生的結果。
核心自帶驅動原始碼:
①從系統層次去考量,變數、巨集定義使用多,甚至有些巨集定義的值為了方便能讓各種在不同的階段需要不同的值呼叫,把簡單的乙個賦值呼叫變成了需要進行多次運算才能檢測到該值是否滿足使用要求,因為我們不是該驅動的編碼者,不清楚這樣做的好處,也或許是核心驅動原始碼的開發者從整個系統的程式設計簡潔性去考量,這樣做或許也是為了讓整個系統**更少,簡潔的一種做法,因為每個裝置你都給它賦具體的值的話,整個系統中有幾百種驅動裝置原始碼,給所有裝置的這個位置引數都賦乙個值的話,那各裝置關於這個值的**就要多了幾百行了,所以還不如,讓各裝置根據各種平台去對某個巨集進行各自的計算來得到合適的值,但某些計算中相同的演算法的也整合在一起,這樣就減少了系統不少行**。所以系統中驅動原始碼是系統開發者對系統原始碼的整合,是基於系統層的整合。所以,對於我這種對單個裝置驅動編碼的人,就會覺得系統原始碼有好多不人性化的地方,會覺得簡單的地方也被弄得很複雜。
②核心自帶驅動還有一些**是為了相容以前的版本而新增了,比如以前硬體記憶體資源稀少,需要使用調色盤的方法來減少程式執行時的記憶體使用量,這也會真假**的複雜性,這一步雖不是必要的,但如果沒弄好,那lcd驅動也不能正常使用。
③程式複雜,為了適用在多種裝置型號,更簡單地新增不同型號的裝置驅動,核心對驅動抽象分離,把驅動分為平台管理部分,驅動**部分(與硬體無關碼),和裝置**部分(硬體相關**)。使用者新增新型號裝置驅動時,只需要在平台管理部分檢查新增裝置的匹配資訊,和提供乙個硬體裝置相關的**(有格式)檔案即可。
現在,站在驅動開發者而非系統開發者的角度去衡量。
①自編的驅動,簡潔,要點明確。這個對於驅動開發者的用處就是:無論你使用的是哪個版本的核心,哪個晶元平台,你可以通過自編碼比較簡單方便地就可以確認硬體裝置的情況,是否正常。如果自編碼通過,那可以試用自編碼上使用的引數去與核心進行核對、修改,然後再去測試。如果不成功,對於核心中多餘的設定(這些大多可能是提供核心用做基本判斷的變數)可以先遮蔽,編譯出錯了,根據提示,找到出錯的位置修改新增。因為這些多餘的設定,設定對了還行,設定錯了,你又不好去定位錯在哪。
自編的驅動在此處的用處,除錯時,可以讓你排除多餘的失敗可能性問題,在較少的**去查出錯誤位置,如果你確定你的設定滿足了該裝置的必需設定,還是失敗,你可以比較放心地去懷疑是硬體問題了。如果自編碼成功,那個又可以當做你修改核心驅動的乙個標準。
②核心驅動原始碼支援管理多種型號的裝置的優勢是我用使用它的原因。先了解本版本本平台的裝置驅動結構,如果是新增型號支援,那就根據自編驅動的引數與設定即可,如果是第一次啟動這類裝置,你就還需要檢測結構是完整性,如果結構完整,引數無誤依舊錯誤,那就把核心驅動原始碼精簡到自編碼的簡單粗暴設定吧。最終就變成了在基於核心驅動架構下的自編驅動。如果還不行,那無疑是結構性問題了。
所以自編驅動,還是有其存在價值的。核心驅動原始碼內容會變,平台會變,但自編驅動是變得最小的乙個,也是最容易實現驅動目的的乙個。是一碼打天下不可缺少的重要組成部分。下篇簡單是講一下,如何成為乙個理直氣壯的驅動開發者。
嵌入式學習心得(二)
c語言之父 丹吉斯.里奇 linux與unlx的發展過程中對我的影響 unlx在國外是一種商業開發的模板,對於linux而言在當時有著無法比擬的優勢,但是由於其付費模式的應用,是的不少人對於這種模式的反感,是的網路上出現了開源社群,而linux就在這種環境中成長了,得益於gpl協議,不斷地技術人員將...
嵌入式學習心得(六)
gcc 編譯多種語言,也是交叉平台編譯器,不是與作業系統有關而是處理器,pc端一般的都是x86,體系 預處理包括 標頭檔案展開,巨集替換,條件編譯 e只進行到預處理的操作 重定向 預處理的檔案字尾為 i 搜尋路徑 系統的頭檔案目錄,找不到就報錯 搜尋路徑 現在當前的目錄尋找,再到系統頭檔案目錄尋找,...
嵌入式每日學習心得2017 07 08
linux系統管理技術 linux系統的使用方式 1 桌面環境操作 傻瓜化,但功能不夠強大,某些操作效率很低甚至無法完成 2 shell命令 專業高效,但非常不直觀友好,學習難度大,需要記憶命令 要成為unix linux系統骨灰級玩家,必須常用掌握shell命令!常用的桌面環境 gnome kde...