4.2 嵌入式程序設計語言
與通用軟件相比,嵌入式軟件具有自身的一些特點,如規模較小、實時性和可靠性要求較高、與硬件結合緊密等。因此並不是所有的編程語言都適合與嵌入式的開發。
4.2.1 程序設計語言概述
1.低級語言與高級語言
彙編語言,是一種面向機器的語言。人們通常把機器語言和彙編語言統稱爲低級語言。
2.彙編程序、編譯程序和解釋程序
用彙編語言或者高級語言編寫出來的程序並不能直接的在計算機上運行,而需要經過專門的翻譯,把它變成機器指令的形式,然後才能運行。擔任翻譯任務的程序爲語言處理程序。
對語言的翻譯程序,大致可以分爲三種類型:彙編程序、解釋程序和編譯程序。
彙編語言需要經過彙編程序的翻譯工作,翻譯成機器碼,才能在機器上運行。
高級語言需要經過相應的解釋程序或編譯程序對齊翻譯後,才能在機器上運行。
3.程序設計語言的定義
一般情況下,程序設計語言的定義會涉及到語法、語義、語用和語境四個方面。
4.程序語言的發展概述
FORTRAN是第一個被廣泛用來進行科學計算的高級語言。
ALGOL60主導了上世界60年代程序語言的發展。
COBOL是一種面向事務處理的高級語言。
PASCAL是一種結構化的程序設計語言。
C語言是20世界70年代出現的。
C++ 在C的基礎上,增加了類的機制,使其成爲一種面向對象的程序設計語言。
5.嵌入式程序設計語言
鑑於嵌入式自身的特點,嵌入式語言需要考慮以下因素
(1 ) 實時性 在某種情況下,要求確定的、可重複出現的、不管系統當時的內部狀態如何,都是可以預測的。
(2 ) 併發性 要求支持多任務,能夠處理併發事件。
(3 ) 有限的硬件資源。
(4 )涉及底層軟件的開發
在該語言的基礎上,編寫出的代碼必須滿足以下條件:
(1 )功能必須正確。
(2 )源碼簡潔、可讀性好、可維護。
(3 )對於實時性要求高的代碼,它的運行速度必須足夠快。
(4 )生成的目標代碼要小,效率高。
4.2.2 彙編語言
一個典型的嵌入式程序的生成過程如下:
“高級語言代碼”→“編譯程序”進行編譯→翻譯成“彙編語言代碼”→再經過“彙編程序”的翻譯→生成“目標代碼”→在經過“鏈接程序”的鏈接→生成“可執行的二進制代碼”→“裝入程序”→“執行”
1.基本原理
一般來說,一個程序中,可以有三類語句:指令語句、僞指令語句、宏指令語句
(1 )指令語句 經彙編後,生成相應的機器代碼,可被CPU識別並執行。
指令語句可分爲:傳送指令、算術運算指令、邏輯運算指令、移位指令、轉移指令和處理器控制指令等等。
(2 )僞指令語句 僞指令語句指示彙編程序在對源程序進行彙編的時完成某些工作。如:給變量分配存儲單元地址,給某個符號賦一個數值等。
僞指令語句與指令語句的區別:
僞指令語句經彙編後,不產生及其代碼,而指令語句經彙編後要產生相應的機器代碼。另外,僞指令語句所指示的操作是在源程序被彙編時完成的,而指令語句的操作,必須在程序運行時完成。
通常 ,彙編語言都設立下列僞指令。
常數定義僞指令
①XX EQU 50 ;功能:標記符 XX的值爲50
②存儲定義僞指令
str DCB "this is a test"
這條語句用來分配一片連續的字節存儲單元並進行初始化,str表示被分配的存儲區域的起始地址。
③彙編控制僞指令
IF、ELSE、ENDIF:條件判斷僞指令
WHILE、WEND:循環執行指令
④開始僞指令 如ARM中,使用ENTRY僞指令來指定彙編程序的入口點。
⑤ARM中,用END僞指令,通知編譯器,已經到了源程序的結尾。
每一條彙編指令語句,有四部分組成,即標號區、操作碼區、操作數區、和註釋區,各個區域之間用確定的符號分開。
標號區:其中的標號用於指示一條彙編指令語句,實際代表着指令該指令的內存單元地址;
操作碼區:即指令助記符,或者僞指令碼。
操作數區:即本條指令的運算對象,用尋址方式指定操作數的來源,常用的是寄存器操作數和內存單元操作數。
(3 )宏指令語句
2.ARM彙編語言
(1 )彙編語言程序格式
ARM彙編語言以段(section)爲單位,來組織源文件。段是相對獨立的,具有特定的名稱、不可分割的指令或者數據段。段又可分爲代碼段、和數據段。
4.2.3 面向過程的語言
1.概述
2.數據成分
3.運算成分
4.控制成分
5.函數
4.2.4面向對象的語言
1. 面向對象的基本概念
(1 )對象
(2 )消息
(3 )類
(4 )繼承
(5 )多態
(6 )綁定
2.面向對象的程序設計語言
(1) Smalltalk
(2 )Eiffel
(3 )C++
(4 )Java
4.2.5 彙編、編譯與解釋程序的基本原理
1.彙編程序基本原理
彙編程序是最早最成熟的一種系統軟件,它的功能是將彙編語言源程序翻譯成及其嗲嗎。彙編程序,既可以用彙編語言來編寫,也可以用高級語言來編寫。
彙編程序類型:
(1 )交叉彙編程序:如運行彙編程序的計算機與彙編後目標程序所運行的機器是不同的。如,彙編程序在PC上運行,而彙編生成的目標程序是在MCS-51單片機上運行。
(2)駐留彙編程序:運行這種彙編程序的計算機就是執行目標程序的計算機。
(3)宏彙編程序:它允許把一組指令序列定義爲一條宏指令,有宏彙編功能。
一般的彙編程序,至少需要兩次掃描源程序才能完成翻譯的過程。
2.編譯程序基本原理
編譯器的工作階段
(1 )詞法分析階段
(2 )語法分析階段
詞法分析與語法分析,都是對源程序的結構進行分析。
(3 )語義分析階段
語義分析階段主要檢查源程序是否存在語法錯誤,並收集類型信息供後面的代碼生成階段使用。只有語法和語義都正確的源程序才能翻譯成正確的目標代碼。
(4 )中間代碼生成器
中間代碼是一種簡單且含義明確的記號系統,可以有若干種形式,它們的共同特徵是與具體的機器無關。
語義分析和中間代碼生成所依據的是語言的語義規則。
(5 )代碼優化階段
優化是編譯器重要的組成部分,由於編譯器將源程序翻譯成中間代碼的工作時機械的、按固定模式進行的,因此,生成的中間代碼往往在空間和時間上都有很大的浪費。
優化所依據的原則是程序的等價交換原則。
(6 )目標代碼生成階段
這一階段的任務是把中間代碼變換成特定機器上的絕對指令碼、可重定位的指令代碼或彙編指令碼。這一階段的工作與具體機器密切相關。
(7 )符號表相關
符號表的作用是記錄源程序中各個符號的必須信息,以輔助語義的正確性檢查和代碼生成。
(8 )出錯處理
程序大概錯誤分爲:靜態錯誤和動態錯誤。
動態錯誤也稱爲動態語義錯誤,指程序中包含的邏輯錯誤。這種錯誤發生在程序運行時,如:數組下標越界,變量取0時,做除法等等。
靜態錯誤,是指編譯階段發現的程序錯誤,可分爲語法錯誤和靜態語義錯誤。
3.解釋程序基本原理
解釋程序,是另一種的語言處理程序,在詞法、語法和有語義分析方面與編譯程序的工作原理基本相同,但是在運行用戶程序時,它直接執行源程序或源程序的內部形式。因此,它不產生源程序產生目標程序。