1. 程式人生 > >那些年啊,那些事——一個程式設計師的奮鬥史 ——67

那些年啊,那些事——一個程式設計師的奮鬥史 ——67

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                    入贅到嚴董公司旗下一週之後,段伏櫪那種不安感不僅沒有消失,反而更加強烈了。雖然在利劍電子的時候,段伏櫪憑藉著不懈的努力,在程式設計水平上已經有很大的提升,特別是對C++的瞭解以及Win32程式設計的熟練度,相對於剛畢業之時已經有非常明顯的區別。只是侷限性也是非常明顯的,這些經驗都是建築於應用程式之上。雖然Windows CE是嵌入式系統,但段伏櫪在上面開發應用程式,其實與開發Windows的桌面程式沒多大區別,根本就算不上是嵌入式開發。如果非要扯上“嵌入式”這槓大旗,那麼最多就是“偽嵌入式”——打著嵌入式的幌子,幹著桌面的事。
    
    和段伏櫪不同,老柳做的是Windows CE的底層,簡單點來說,就是Bootloader和驅動層。以這個層面而言,則是徹徹底底地和硬體打交道。雖然說官方在放出BSP包的時候,已經將外圍器件的驅動基本已經完善,客戶只需要做簡單的更改就好。可是段伏櫪對此沒有絲毫的接觸,雖然在浩程微也編譯過系統,但那是基於老柳已經將所有的設定都修改好並且只給自己庫檔案的基礎之上,自己所需要做的是選擇一個“Make Image”命令而已,因此對於底層而言可謂知之甚少。
    
    現在老柳不在了,那麼這底層的工作自然是由段伏櫪接手。以前老柳沒有給段伏櫪看過任何底層的程式碼,那麼現在自己肯定也沒有老柳修改過後的任何檔案,甚至連編譯過的lib庫都沒有。對於段伏櫪來說,現在只能是從原廠方面獲得最原始的BSP包程式碼,然後再根據原理圖仔細修改。只是這樣的做法無異於一切重新開始,但這卻又是沒有辦法的事情。因為過來之前,武總跟嚴董承諾,一個月之內就能將之前的“旅行家”這款機器給除錯完畢進行出售,所以另選方案之類的決議是絕對不可能的。如果要在這武總幻想的期限內整出個產品,那麼就只能在原有的產品上打文章。
    
    所幸的是,之前批量產100臺機器的時候,因為需要燒錄系統,所以曹燕擁有老柳編譯好的bootloader和系統的二進位制檔案。因為硬體是完全沒有更改的,所以這系統檔案肯定是不必要做任何更改便能符合硬體需求。本以為見到了一絲希望,但沒想到最後的結果還是沮喪的。雖然說擁有了二進位制檔案,並且也能燒錄到機器中,但跑起來的時候需要檢測金鑰——如果沒有金鑰,那系統就會退出!而這金鑰,偏偏只有老柳一個人掌握。以前批量產的機器,都必須要經過老柳進行金鑰的寫入,否則是絕對不能正常執行的。
    
    一般的,從善意的角度來說,老柳的做法是為了保護公司。因為對於硬體,只要有一塊實體版,就有人可以直接抄出來。可能很多人覺得抄板是一件非常神祕非常有技術含量的活,找到抄板的人很困難;其實在華強北的賽格廣場,你只要隨便逛一圈,就發現不少攤位上都擺著“抄板”的廣告。正是因為硬體複製是如此的簡單快捷,為了避免競爭對手複製產品,只能在軟體的加密上下功夫。只可惜實際上,老柳這一記的真實用意防的是武總,因為他們害怕這100臺成功生產之後,後續機器武總會直接繞開他們,讓他們白費功夫。老柳和武總的互相不信任,其實是由來已久。
    
    具有諷刺意味的是,老柳這一招確實起到了實際的功效。段伏櫪他們雖然掌握有編譯好的系統,但卻無法讓它正常運作。讓武總去找老柳要加密的方法?這和天方夜譚差不多。如果老柳肯給,那麼今天也不會鬧成這樣了。
    
    怎麼辦?嚴董的庫房還有400套機器的物料呢,還盼望著這產品大賺一筆。想直接放棄,另起爐灶?門都沒有。沒辦法,段伏櫪只能硬著頭皮上。只不過,對於真正嵌入式開發來說,還算沾點邊的話,只能算大學時代碰的微控制器了。沒有任何理論知識,想旁門左道都沒有辦法,只好踏踏實實買本《MIPS處理器設計透視》回來仔細研究。
    
    不能不說,這本書讓段伏櫪接觸到了不一樣的領域。自己終於知道硬體在啟動時,PC指標原來會指向一個特定的地址,而這個特定的地址往往又是向量表所在之處,當然還有虛擬地址和實際實體記憶體地址的轉換,而諸多種種,是段伏櫪原來寫應用程式所沒有接觸過的。其實如果說實話,讓段伏櫪感到驚詫的這些內容,完全是做嵌入式開發所必須具備的基礎知識;如果連這些基礎的東西都好不知情的話,那麼在嵌入式領域絕對是舉步維艱。
    
    雖然說段伏櫪現在知道了有這麼些知識的存在,但也僅僅是知道一些概念,完全無法將它們和實際的開發相結合起來。特別是AU1200這款CPU相對怪異的方式,更讓人摸不著頭腦。對於現在的很多支援Windows CE的CPU來說,如果需要編譯Bootloader,那麼完全可以不用額外的編譯工具,直接使用Platform Builder即可。可AU1200根本就不按常理出牌,系統雖然是可以使用Platform Builder,但Bootloader卻另闢蹺徑,必須在Linux使用GCC進行編譯。
    
    Linux?對於段伏櫪這個只接觸過Window的菜鳥來說,簡直是又是一大阻礙。何況Linux的發行版本那麼多,是不是每個都支援AU1200 Bootloader的編譯,也未可而知。雖然說Linux是免費獲取,但下載那麼多版本也需要時間,何況還有安裝這漫長的過程。所幸還有Cygwin這玩意,可以在Window的環境中模擬Linux的環境進行編譯。
    
    當然咯,雖說有Cygwin這麼一個玩意可以避免安裝Linux系統,可這也是一個煩人的東西。就以下載來說,有1G的大小,如果使用迅雷之前的可斷點下載的程式倒不會覺得有什麼,可它偏偏只能使用自帶的下載程式。不僅如此,在國內居然沒有映象網站,下載的源地址都是在國外,以致於那個速度簡直是龜速。這也就罷了,慢就慢吧,只要穩定了,那也就是時間問題。可要命的時,還時不時連線不通,如果點繼續,又會重新下載。折騰了幾次,實在讓段伏櫪想撞豆腐自殺。所幸很多網友都遇到這樣的問題,並且給出瞭如何強制斷點下載的方法,否則段伏櫪不知道還要在這問題上折騰多久。
    
    好不容易將Bootloader編譯好之後,又遇到燒錄這個老大難問題。AU1200既不能像很多晶片那樣支援USB燒錄,也沒有自帶的燒錄工具,而必須藉助於模擬器。老柳當時用的是BDI的模擬器,而這個模擬器也是嚴董出錢購買然後借給利劍電子的,只是當時分家的時候根本就沒有給還。現在燒錄必須使用模擬器,而購買和之前一模一樣的型號也是不可能的,因為這模擬器價格非常貴,售價達到3萬人民幣,再次讓嚴董出資購買肯定會露出馬腳。讓武總這鐵公雞自己出錢?那還不如殺了他來的爽快。
    
    唯一的解決方法,便是尋找另一款能支援AU1200的模擬器,然後以改進開發效率等介面,再次像嚴董申請資金進行購置。只不過MIPS架構不像ARM那麼遍地開花,支援ARM架構的模擬器數不勝數,價格由高到低,可供選擇餘地非常大;而MIPS找來找去,只找到一款USB2DEMON的模擬器。物以稀為貴,雖然這型號比BDI要便宜,但也要一萬多。不過,武總才不會去理會這些,只要不是他出錢,只要型號不同,他就能夠找到不同的籍口向嚴董申請。
    
    可能是因為武總和嚴董的關係,也可能是武總又畫了一張很大的餅,這模擬器的申請很快就批下來了。再過沒多久,模擬器也回來了。事情發展總不會那麼一帆風順,雖然有了模擬器,雖然將Bootloader燒錄進了NOR Flash,可如何知道程式執行到了何處?是USB2DEMON的資料匱乏,還是自己實在太榆木腦袋了?這模擬器怎麼無法做斷點除錯呢?無法從串列埠輸出除錯資訊,無法通過工具斷點除錯,段伏櫪覺得自己簡直就是盲人摸象,不知所云。
    
    雖然找到了AU1200的售後工程師,但自己卻無法和對方溝通。怎麼溝通啊?對方問自己除錯狀況是怎樣,可自己根本就回答不上來。究竟這個時候Bootloader是正常跑起來了呢,還是沒有?自己完全沒有辦法確定。菜鳥問大牛問題,很多時候也類似如此。菜鳥問問題,可能會簡單地問:“為什麼我的程式無法跑起來?”任何一個大牛,除非他會掐指一算,否則對於這樣的問話,肯定是一頭霧水。一般的大牛,對於這樣的問題很多都是置之不理;好心一點的,則會進一步詢問相應的狀況,比如DLL有沒有放進指定的目錄啊,是不是許可權沒有開放啊。可對於一些菜鳥,他也許根本就不知道什麼叫DLL,許可權和程式有什麼關係,所以他根本就無法藉助於大牛來解決問題。此時的段伏櫪,就是這個無頭蒼蠅的菜鳥。
    
    如果有更多的時間,段伏櫪或許可以慢慢來,將這Bootloader如何載入並執行系統的機制整得明明白白;可是時間卻只有一個月,那是無論如何都不可能按時完成的。第一次,段伏櫪覺得自己是那麼的力不從心,有那麼嚴重的無力感。“旅行家”這款產品,該何去何從?還有,嚴董那剩餘的400套物料,又該如何交代?以前這些問題都可以由黃華中頂著,可現在自己卻是處於風浪尖的第一個人。突然間,段伏櫪覺得自己莫名地煩躁了起來。
    
    
    
    PS:關於AU1200的燒錄文章如下:
    《小議DBAU1200 Development Board的Boot Flash更新》 http://blog.csdn.net/norains/article/details/2293461
    《USB2DEMON燒錄DBAU1200開發板flash入門教程》http://blog.csdn.net/norains/article/details/2518180
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述