【Allwinner ClassA20類庫分析】 1.ARM上的Delphi
說了這麼多,該輪到主角現身了。不過彆著急,這次的主角不是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程式碼單元的結構及常用除錯方法。