用VC6開發嵌入式LINUX程序

黃山鬆 (Tom Huang) 發表於博客園http://www.cnblogs.com/tomview/html

    首先說明一下,VC6天然不能直接開發LINUX程序,主要使用的是它的編輯環境而已,可是做爲一個一直在WINDOWS上使用VC6的開發者,不以VC6做爲開發的核心是多麼地不習慣啊。linux

    還要說明的是,本身對linux是門外漢,提到的linux的事情都是門外漢的見解,僅供參考。算法

    2015年忽然有點雄心壯志,準備把本身的車牌識別系列軟件移植到LINUX系統中,這樣能夠固化在攝像頭裏面,也能夠作成嵌入式的硬件。通過簡單的考察,選擇了INTEL公司的EDISON平臺。優勢是(1)體積小,自帶wifi模塊;(2)速度快於同期的樹莓派;(3)x86體系,原來算法裏面的特殊指令優化(如MMX指令)能夠繼續有效;(4)有官方論壇和技術支持;缺點也是很明顯,價格高,Edison模塊+Braekout底板的價格至少是樹莓派的2倍。但因爲是在LINUX下開發,因此更換平臺應該比較容易。編程

愛迪生模塊和Breakout底板

    下面的連接是Intel的Edison主頁:網絡

http://www.intel.com/content/www/us/en/do-it-yourself/edison.html函數

     對於一直在WIN下一直用VC6集成環境開發的人來講,搞清楚linux編程的make就是一個挑戰,找對整個工具鏈並可以正確配置也有難度,特別對於沒有積累,沒有老師,徹底靠網絡資源的狀況下。工具

    剛開始使用愛迪生開發的標準工具鏈,使用Eclipse,配合愛迪生的交叉編譯器,實現愛迪生的開發。但發現不少不習慣的地方,一個是Eclipse運行慢,毫不像Vc6那樣行雲流水;另一個是Eclipse必須使用intel的插件,可是收費的(由於Intel編譯器有一個 --sysroot 選項,標準的Eclipse裏面好像沒法處理;不過如今好像有個Eclipse的Intel專版)。測試

    後來決定用VC6的集成環境來編寫程序,具體採用了以下的措施:優化

(1)每一個程序創建一個VC的工程,管理並編輯修改源文件和頭文件;spa

VC6的linux工程

(2)程序要在win32先編譯成功,並能正確運行。在這一步以後再用交叉編譯器編譯爲linux下的程序。爲了實現這一點,要(1)儘可能用純C的庫函數,保證大部分代碼在兩個平臺通用;(2)儘可能減小平臺相關的代碼;(3)確實須要的平臺相關的代碼,封裝一下,經過條件編譯調用不一樣的代碼;(4)全部通信儘可能都用網絡通信,封裝統一的SOCKET通信模塊;

    因爲是嵌入式程序,所以上面對於代碼實現的這些要求容易實現。

(3)本身作了一個調用intel交叉編譯器的工具,自動讀取vc6工程的文件列表,進行編譯鏈接;並把編譯信息和錯誤顯示在VC6的輸出窗口裏面。下圖是個人編譯工具的參數設置界面。

交叉編譯工具

    個人編譯工具把Intel交叉編譯器的編譯消息也輸出到VC6的編譯輸出窗口裏面,以下圖:

image

      工具程序自動修改intel編譯器的輸出消息裏面的源文件名和行號的格式,能夠實如今VC6編譯信息輸出窗口裏面雙擊編譯錯誤消息自動跳到對應的源代碼。

image

(4)在編譯完成以後自動經過網絡發佈到愛迪生板子上

image

(5)下面就是最重要的部分了,在線調試程序

    實如今線調試仍是很複雜的,沒有打算本身實現,目前在win下先實現功能,並進行測試,而後再到linux下運行驗證;此外程序儘可能多輸出調試信息。若是非要在線單步調試,那要按照標準的linux遠程調試方法來操做了。

    順便提一下,這個項目已經取消了,由於忽然就厭倦了編程……