1. 程式人生 > >【Allwinner ClassA20類庫分析】 1.ARM上的Delphi

【Allwinner ClassA20類庫分析】 1.ARM上的Delphi

     提起上位機上的Delphi,在以前可能熟悉的人很多,雖然前幾年隨著Borland公司的倒閉,使用Delphi的人越來越少,但是這並不能掩蓋她先進的VCL框架、全能選手的光芒。在Windows平臺上,無論從Win95,還是到Win8.1,編譯過一次的exe檔案可以在無需安裝任何執行時庫的情況下直接執行,曾經也是病毒編寫優先考慮的語言;而在各種管理系統的開發中,Delphi也是開發效率運、行效率極其優秀的語言。只是由於Borland公司過度捆綁Windows的策略,使其應用於其他平臺的機會大大減少。她的姐妹,在x86的Linux上的Kilix也是曇花一現沒有流行起來,在ARM上就更不用說了。 近期,被易博龍收購了的Delphi,在新的公司的帶領下開始絕地反擊,推出的Delphi XE系列不僅可以開發Windows 32位、64位的原生程式,同時也可以在不更改程式碼的情況下直接編譯為Android和iOS的程式,大大擴充套件了應用場合。而且繼續保持了快速開發、控制元件豐富等優點。試想一下可視開發,直接在窗體中拖過來幾個按鈕輸入框什麼的,就能在你的裝置上執行起來,這樣的開發簡直是種享受。

    說了這麼多,該輪到主角現身了。不過彆著急,這次的主角不是Delphi,而是非常類似於Delphi的但無任何血緣關係的兄弟:free pascal。都是基於pascal語言,但是這個兄弟更加神通廣大,無論是x86的Windows、Linux、Android、MacOS等,還是ARM的WinCE、Linux、Android、iOS之類的,亦或是MIPS架構的作業系統,都可以成為他活躍的平臺。和Delphi的相似度達到98%以上,並且秉承Delphi的優點,號稱可以“一次編寫,到處編譯”。編寫好的程式,採用自身不同的編譯器,可以直接編譯為對應系統的程式,極大地減少了系統間移植的工作量。

    free pascal正如其名,他是免費的,無論是學習還是開發產品都在許可之內。free pascal是一種語言,他有自己的IDE環境:Lazarus。經過了很長一段時間的發展,修正了許許多多的bug之後,現在的版本是1.2x,比較穩定了,可以正式使用了。他的長相和Delphi 5很像,不管是新手還是老手都可以很快的使用起來。等不及了,還是快快請Lazarus展示一下吧。

    忍不住還是要羅嗦幾句,此次所提到的開發環境、編譯環境、執行環境,都是在香蕉派上的ARM Lubuntu進行的,而環境的搭建沒有任何高難度操作,沒有花哨的技巧,一切只為了簡單實用、快速開發。對於其他Linux的發行版亦是如此,其他的ARM裝置同樣操作。在香蕉派上編譯出的可執行檔案,可以直接拷貝到其他ARM板上執行(牽扯到的底層驅動除外),不需要攜帶一大堆的so或其他檔案。

    言歸正傳,開始安裝Lazarus。只需要4條命令:

1.sudo apt-get update

2.sudo apt-get upgrade

3.sudo apt-get install fpc

4.sudo apt-get install lazarus

    其實只要最後一條命令也是可以的,在安裝lazarus時,fpc編譯器在某些Linux版本中可以自動安裝。不過為了保險起見,還是單獨安裝一下比較好。並且為了保證安裝的是最新版本,最前面的兩條命令也是執行一下為好。

    安裝過程就不再贅述了,沒有需要手動更改的東西。程式比較大,大概2、300M的樣子,網速和SD卡的速度很大程度上影響安裝速度,但是我已很滿足,至少比QT之類的要快速和容易很多。安裝好後,在開始選單中的程式設計子選單中可以找到它,Lazarus,執行吧。

    執行後,是這個樣子地:


    都是英文的,不怕,常用的操作沒有幾個。不過Lazarus還是很貼心地提供了中文語言,這個語言外掛是由中國愛好者開發的,再次感謝他。中文語言可以在選單“Tools”->“Options”->“Desktop”->“Language”中選擇。


    儲存設定後,需要關閉Lazarus,再次執行後就變成中文了。


    Lazarus執行後,預設建立一個帶有窗體的工程,根據圖中的編號,各個部分的功能簡單介紹如下:


1.視覺化的編輯窗體:這個窗體就是編譯程式顯示的窗體,所見即所得;

2.執行、斷點除錯部分:可直接運行當前的程式,並可以單步執行每一條語句。執行到斷點時,將滑鼠放在某一變數上會顯示當前的執行值;

3.元件工具欄部分:選擇需要的元件,可以放置在編輯窗體上合適的位置,雙擊後可以直接跳轉到對應的程式碼行,自行新增功能程式碼;

4.物件觀察器:顯示編輯窗體上已放置的所有元件,由於覆蓋而造成不能用滑鼠點選的元件可以在這裡選擇;

5.屬性和事件編輯部分:選擇某個元件後,可以在這裡設定一些屬性值,改變其功能或樣式,也可為其新增事件等(窗體也是元件);

6.程式碼編輯器:這個不用多說了,寫程式碼的地方。用滑鼠點選行號前的空白可以設定斷點,再次點選取消斷點;

7.訊息窗體:編譯時的一些資訊在這裡顯示,包括警告、錯誤等;

    大體功能介紹完畢,還是來看一下執行之後是什麼樣子的吧。如果直接點選執行除錯部分的綠色三角執行起來,那實在是太沒意思了,還是來點實用的功能吧:點選關閉按鈕,彈出對話方塊,讓使用者選擇是否退出程式。

    首先,在元件工具欄中選擇"Button",並放置在窗體中;在屬性中找到"Caption",並更改值為"Quit"回車,這個是在按鈕上顯示的文字;


    然後,雙擊窗體中的這個"Button",自動跳轉到程式碼編輯器中的"Button_Click"事件程式碼中,在其中編寫程式碼

Close; 


不區分大小寫;

    最後,選擇窗體,再在事件屬性和事件編輯部分選擇事件標籤,找到"OnCloseQuery",雙擊跳轉到程式碼後,編寫程式碼

CanClose:= Application.MessageBox('Are you sure?', 'Title', MB_OKCANCEL) = IDOK;

別忘了在程式碼編輯器最上邊的程式碼uses後面加入一個常量定義的單元LCLType;如果不加這個單元,就要把MB_OKCANCEL和IDOK都改為1,否則會在編譯時提示找不到定義。



    開始執行,點選綠色的三角,第一次執行時間有些長,尤其是帶有窗體的程式。從第二次之後就快很多了。執行之後,點選Quit按鈕,彈出對話方塊


選擇“OK”,退出程式;選擇“Cancel”,返回到窗體。

    執行原理:當點選"Quit"按鈕時執行關閉程式碼,正常情況下應該直接關閉窗體退出程式。但是由於添加了"OnCloseQuery"事件,也就是在關閉窗體前觸發的事件,並在其中添加了對話方塊來讓使用者選擇是否退出,根據使用者選擇的結果來判斷下一步需要執行的動作。如果使用者取消了操作,則不再執行關閉窗體的動作了。

    現在你已經編寫了一個可以在Windows95~8.1、Linux、MacOS、WinCE、ARM Linux、Android上執行的程式程式碼,只要到相應的平臺下編譯就OK了。至此對Lazarus有了感性的認識,操作起來是否比較方便?如果有興趣,請看下一節,講述pascal程式碼單元的結構及常用除錯方法。