phparm
① 編程都有哪些語言
編程語言有機器語言,匯編語言,高級語言這三類。
題主應該問的是常見的高級編程語言:C、C++、C#、java、JavaScript、php、Python、go……這些都是。
看下圖:
編程都有哪些語言
② PHP中文亂碼
看看html頁面文件本身編碼格式是否gbk
用記事本打開html文件,選擇另存為,然後在下面可以看到文件編碼,改成 ANSI
③ 關於虛擬機的事!!
什麼是虛擬機?
虛擬機的概念比較寬泛,通常人們接觸到的虛擬機概念有VMware那樣的硬體模擬軟體,也有JVM這樣的介於硬體和編譯程序之間的軟體。這里所指的是後者。
虛擬機是一個抽象的計算機,和實際的計算機一樣,具有一個指令集並使用不同的存儲區域。它負責執行指令,還要管理數據、內存和寄存器。這台虛擬的機器在任何平台上都提供給編譯程序一個的共同的介面。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然後由解釋器來將虛擬機代碼轉換為特定系統的機器碼執行。
Java虛擬機
一、什麼是Java虛擬機
Java虛擬機是一個想像中的機器,在實際的計算機上通過軟體模擬來實現。Java虛擬機有自己想像中的硬體,如處理器、堆棧、寄存器等,還具有相應的指令系統。
1.為什麼要使用Java虛擬機
Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平台上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機後,Java語言在不同平台上運行時不需要重新編譯。Java語言使用模式Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(位元組碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行位元組碼時,把位元組碼解釋成具體平台上的機器指令執行。
2.誰需要了解Java虛擬機
Java虛擬機是Java語言底層實現的基礎,對Java語言感興趣的人都應對Java虛擬機有個大概的了解。這有助於理解Java語言的一些性質,也有助於使用Java語言。對於要在特定平台上實現Java虛擬機的軟體人員,Java語言的編譯器作者以及要用硬體晶元實現Java虛擬機的人來說,則必須深刻理解Java虛擬機的規范。另外,如果你想擴展Java語言,或是把其它語言編譯成Java語言的位元組碼,你也需要深入地了解Java虛擬機。
3.Java虛擬機支持的數據類型
Java虛擬機支持Java語言的基本數據類型如下:
byte://1位元組有符號整數的補碼
short://2位元組有符號整數的補碼
int://4位元組有符號整數的補碼
long://8位元組有符號整數的補碼
float://4位元組IEEE754單精度浮點數
double://8位元組IEEE754雙精度浮點數
char://2位元組無符號Unicode字元
幾乎所有的Java類型檢查都是在編譯時完成的。上面列出的原始數據類型的數據在Java執行時不需要用硬體標記。操作這些原始數據類型數據的位元組碼(指令)本身就已經指出了操作數的數據類型,例如iadd、ladd、fadd和dadd指令都是把兩個數相加,其操作數類型別是int、long、float和double。虛擬機沒有給boolean(布爾)類型設置單獨的指令。boolean型的數據是由integer指令,包括integer返回來處理的。boolean型的數組則是用byte數組來處理的。虛擬機使用IEEE754格式的浮點數。不支持IEEE格式的較舊的計算機,在運行Java數值計算程序時,可能會非常慢。
虛擬機支持的其它數據類型包括:
object//對一個Javaobject(對象)的4位元組引用
returnAddress//4位元組,用於jsr/ret/jsr-w/ret-w指令
注:Java數組被當作object處理。
虛擬機的規范對於object內部的結構沒有任何特殊的要求。在Sun公司的實現中,對object的引用是一個句柄,其中包含一對指針:一個指針指向該object的方法表,另一個指向該object的數據。用Java虛擬機的位元組碼表示的程序應該遵守類型規定。Java虛擬機的實現應拒絕執行違反了類型規定的位元組碼程序。Java虛擬機由於位元組碼定義的限制似乎只能運行於32位地址空間的機器上。但是可以創建一個Java虛擬機,它自動地把位元組碼轉換成64位的形式。從Java虛擬機支持的數據類型可以看出,Java對數據類型的內部格式進行了嚴格規定,這樣使得各種Java虛擬機的實現對數據的解釋是相同的,從而保證了Java的與平台無關性和可
移植性。
二、Java虛擬機體系結構
Java虛擬機由五個部分組成:一組指令集、一組寄存器、一個棧、一個無用單元收集堆(Garbage-collected-heap)、一個方法區域。這五部分是Java虛擬機的邏輯成份,不依賴任何實現技術或組織方式,但它們的功能必須在真實機器上以某種方式實現。
1.Java指令集
Java虛擬機支持大約248個位元組碼。每個位元組碼執行一種基本的CPU運算,例如,把一個整數加到寄存器,子程序轉移等。Java指令集相當於Java程序的匯編語言。
Java指令集中的指令包含一個單位元組的操作符,用於指定要執行的操作,還有0個或多個操作數,提供操作所需的參數或數據。許多指令沒有操作數,僅由一個單位元組的操作符構成。
虛擬機的內層循環的執行過程如下:
do{
取一個操作符位元組;
根據操作符的值執行一個動作;
}while(程序未結束)
由於指令系統的簡單性,使得虛擬機執行的過程十分簡單,從而有利於提高執行的效率。指令中操作數的數量和大小是由操作符決定的。如果操作數比一個位元組大,那麼它存儲的順序是高位位元組優先。例如,一個16位的參數存放時佔用兩個位元組,其值為:
第一個位元組*256+第二個位元組位元組碼指令流一般只是位元組對齊的。指令tabltch和lookup是例外,在這兩條指令內部要求強制的4位元組邊界對齊。
2.寄存器
Java虛擬機的寄存器用於保存機器的運行狀態,與微處理器中的某些專用寄存器類似。
Java虛擬機的寄存器有四種:
pc:Java程序計數器。
optop:指向操作數棧頂端的指針。
frame:指向當前執行方法的執行環境的指針。
vars:指向當前執行方法的局部變數區第一個變數的指針。
Java虛擬機
Java虛擬機是棧式的,它不定義或使用寄存器來傳遞或接受參數,其目的是為了保證指令集的簡潔性和實現時的高效性(特別是對於寄存器數目不多的處理器)。
所有寄存器都是32位的。
3.棧
Java虛擬機的棧有三個區域:局部變數區、運行環境區、操作數區。
(1)局部變數區 每個Java方法使用一個固定大小的局部變數集。它們按照與vars寄存器的字偏移量來定址。局部變數都是32位的。長整數和雙精度浮點數占據了兩個局部變數的空間,卻按照第一個局部變數的索引來定址。(例如,一個具有索引n的局部變數,如果是一個雙精度浮點數,那麼它實際占據了索引n和n+1所代表的存儲空間。)虛擬機規范並不要求在局部變數中的64位的值是64位對齊的。虛擬機提供了把局部變數中的值裝載到操作數棧的指令,也提供了把操作數棧中的值寫入局部變數的指令。
(2)運行環境區 在運行環境中包含的信息用於動態鏈接,正常的方法返回以及異常傳播。
·動態鏈接
運行環境包括對指向當前類和當前方法的解釋器符號表的指針,用於支持方法代碼的動態鏈接。方法的class文件代碼在引用要調用的方法和要訪問的變數時使用符號。動態鏈接把符號形式的方法調用翻譯成實際方法調用,裝載必要的類以解釋還沒有定義的符號,並把變數訪問翻譯成與這些變數運行時的存儲結構相應的偏移地址。動態鏈接方法和變數使得方法中使用的其它類的變化不會影響到本程序的代碼。
·正常的方法返回
如果當前方法正常地結束了,在執行了一條具有正確類型的返回指令時,調用的方法會得到一個返回值。執行環境在正常返回的情況下用於恢復調用者的寄存器,並把調用者的程序計數器增加一個恰當的數值,以跳過已執行過的方法調用指令,然後在調用者的執行環境中繼續執行下去。
·異常和錯誤傳播
異常情況在Java中被稱作Error(錯誤)或Exception(異常),是Throwable類的子類,在程序中的原因是:①動態鏈接錯,如無法找到所需的class文件。②運行時錯,如對一個空指針的引用
·程序使用了throw語句。
當異常發生時,Java虛擬機採取如下措施:
·檢查與當前方法相聯系的catch子句表。每個catch子句包含其有效指令范圍,能夠處理的異常類型,以及處理異常的代碼塊地址。
·與異常相匹配的catch子句應該符合下面的條件:造成異常的指令在其指令范圍之內,發生的異常類型是其能處理的異常類型的子類型。如果找到了匹配的catch子句,那麼系統轉移到指定的異常處理塊處執行;如果沒有找到異常處理塊,重復尋找匹配的catch子句的過程,直到當前方法的所有嵌套的catch子句都被檢查過。
·由於虛擬機從第一個匹配的catch子句處繼續執行,所以catch子句表中的順序是很重要的。因為Java代碼是結構化的,因此總可以把某個方法的所有的異常處理器都按序排列到一個表中,對任意可能的程序計數器的值,都可以用線性的順序找到合適的異常處理塊,以處理在該程序計數器值下發生的異常情況。
·如果找不到匹配的catch子句,那麼當前方法得到一個"未截獲異常"的結果並返回到當前方法的調用者,好像異常剛剛在其調用者中發生一樣。如果在調用者中仍然沒有找到相應的異常處理塊,那麼這種錯誤傳播將被繼續下去。如果錯誤被傳播到最頂層,那麼系統將調用一個預設的異常處理塊。
(3)操作數棧區 機器指令只從操作數棧中取操作數,對它們進行操作,並把結果返回到棧中。選擇棧結構的原因是:在只有少量寄存器或非通用寄存器的機器(如Intel486)上,也能夠高效地模擬虛擬機的行為。操作數棧是32位的。它用於給方法傳遞參數,並從方法接收結果,也用於支持操作的參數,並保存操作的結果。例如,iadd指令將兩個整數相加。相加的兩個整數應該是操作數棧頂的兩個字。這兩個字是由先前的指令壓進堆棧的。這兩個整數將從堆棧彈出、相加,並把結果壓回到操作數棧中。
每個原始數據類型都有專門的指令對它們進行必須的操作。每個操作數在棧中需要一個存儲位置,除了long和double型,它們需要兩個位置。操作數只能被適用於其類型的操作符所操作。例如,壓入兩個int類型的數,如果把它們當作是一個long類型的數則是非法的。在Sun的虛擬機實現中,這個限制由位元組碼驗證器強制實行。但是,有少數操作(操作符pe和swap),用於對運行時數據區進行操作時是不考慮類型的。
4.無用單元收集堆
Java的堆是一個運行時數據區,類的實例(對象)從中分配空間。Java語言具有無用單元收集能力:它不給程序員顯式釋放對象的能力。Java不規定具體使用的無用單元收集演算法,可以根據系統的需求使用各種各樣的演算法。
5.方法區
方法區與傳統語言中的編譯後代碼或是Unix進程中的正文段類似。它保存方法代碼(編譯後的java代碼)和符號表。在當前的Java實現中,方法代碼不包括在無用單元收集堆中,但計劃在將來的版本中實現。每個類文件包含了一個Java類或一個Java界面的編譯後的代碼。可以說類文件是Java語言的執行代碼文件。為了保證類文件的平台無關性,Java虛擬機規范中對類文件的格式也作了詳細的說明。其具體細節請參考Sun公司的Java虛擬機規范。
回答者: 笑嘆滄桑 - 舉人 四級 12-15 22:27
--------------------------------------------------------------------------------
您覺得最佳答案好不好? 目前有 0 個人評價
50% (0)
50% (0)
其他回答 共 2 條
虛擬機的概念比較寬泛,通常人們接觸到的虛擬機概念有VMware那樣的硬體模擬軟體,也有JVM這樣的介於硬體和編譯程序之間的軟體。這里所指的是後者。
虛擬機是一個抽象的計算機,和實際的計算機一樣,具有一個指令集並使用不同的存儲區域。它負責執行指令,還要管理數據、內存和寄存器。這台虛擬的機器在任何平台上都提供給編譯程序一個的共同的介面。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然後由解釋器來將虛擬機代碼轉換為特定系統的機器碼執行。
Java虛擬機
一、什麼是Java虛擬機
Java虛擬機是一個想像中的機器,在實際的計算機上通過軟體模擬來實現。Java虛擬機有自己想像中的硬體,如處理器、堆棧、寄存器等,還具有相應的指令系統。
1.為什麼要使用Java虛擬機
Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平台上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機後,Java語言在不同平台上運行時不需要重新編譯。Java語言使用模式Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(位元組碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行位元組碼時,把位元組碼解釋成具體平台上的機器指令執行。
2.誰需要了解Java虛擬機
Java虛擬機是Java語言底層實現的基礎,對Java語言感興趣的人都應對Java虛擬機有個大概的了解。這有助於理解Java語言的一些性質,也有助於使用Java語言。對於要在特定平台上實現Java虛擬機的軟體人員,Java語言的編譯器作者以及要用硬體晶元實現Java虛擬機的人來說,則必須深刻理解Java虛擬機的規范。另外,如果你想擴展Java語言,或是把其它語言編譯成Java語言的位元組碼,你也需要深入地了解Java虛擬機。
3.Java虛擬機支持的數據類型
Java虛擬機支持Java語言的基本數據類型如下:
byte://1位元組有符號整數的補碼
short://2位元組有符號整數的補碼
int://4位元組有符號整數的補碼
long://8位元組有符號整數的補碼
float://4位元組IEEE754單精度浮點數
double://8位元組IEEE754雙精度浮點數
char://2位元組無符號Unicode字元
幾乎所有的Java類型檢查都是在編譯時完成的。上面列出的原始數據類型的數據在Java執行時不需要用硬體標記。操作這些原始數據類型數據的位元組碼(指令)本身就已經指出了操作數的數據類型,例如iadd、ladd、fadd和dadd指令都是把兩個數相加,其操作數類型別是int、long、float和double。虛擬機沒有給boolean(布爾)類型設置單獨的指令。boolean型的數據是由integer指令,包括integer返回來處理的。boolean型的數組則是用byte數組來處理的。虛擬機使用IEEE754格式的浮點數。不支持IEEE格式的較舊的計算機,在運行Java數值計算程序時,可能會非常慢。
虛擬機支持的其它數據類型包括:
object//對一個Javaobject(對象)的4位元組引用
returnAddress//4位元組,用於jsr/ret/jsr-w/ret-w指令
注:Java數組被當作object處理。
虛擬機的規范對於object內部的結構沒有任何特殊的要求。在Sun公司的實現中,對object的引用是一個句柄,其中包含一對指針:一個指針指向該object的方法表,另一個指向該object的數據。用Java虛擬機的位元組碼表示的程序應該遵守類型規定。Java虛擬機的實現應拒絕執行違反了類型規定的位元組碼程序。Java虛擬機由於位元組碼定義的限制似乎只能運行於32位地址空間的機器上。但是可以創建一個Java虛擬機,它自動地把位元組碼轉換成64位的形式。從Java虛擬機支持的數據類型可以看出,Java對數據類型的內部格式進行了嚴格規定,這樣使得各種Java虛擬機的實現對數據的解釋是相同的,從而保證了Java的與平台無關性和可
移植性。
二、Java虛擬機體系結構
Java虛擬機由五個部分組成:一組指令集、一組寄存器、一個棧、一個無用單元收集堆(Garbage-collected-heap)、一個方法區域。這五部分是Java虛擬機的邏輯成份,不依賴任何實現技術或組織方式,但它們的功能必須在真實機器上以某種方式實現。
1.Java指令集
Java虛擬機支持大約248個位元組碼。每個位元組碼執行一種基本的CPU運算,例如,把一個整數加到寄存器,子程序轉移等。Java指令集相當於Java程序的匯編語言。
Java指令集中的指令包含一個單位元組的操作符,用於指定要執行的操作,還有0個或多個操作數,提供操作所需的參數或數據。許多指令沒有操作數,僅由一個單位元組的操作符構成。
虛擬機的內層循環的執行過程如下:
do{
取一個操作符位元組;
根據操作符的值執行一個動作;
}while(程序未結束)
由於指令系統的簡單性,使得虛擬機執行的過程十分簡單,從而有利於提高執行的效率。指令中操作數的數量和大小是由操作符決定的。如果操作數比一個位元組大,那麼它存儲的順序是高位位元組優先。例如,一個16位的參數存放時佔用兩個位元組,其值為:
第一個位元組*256+第二個位元組位元組碼指令流一般只是位元組對齊的。指令tabltch和lookup是例外,在這兩條指令內部要求強制的4位元組邊界對齊。
2.寄存器
Java虛擬機的寄存器用於保存機器的運行狀態,與微處理器中的某些專用寄存器類似。
Java虛擬機的寄存器有四種:
pc:Java程序計數器。
optop:指向操作數棧頂端的指針。
frame:指向當前執行方法的執行環境的指針。
vars:指向當前執行方法的局部變數區第一個變數的指針。
Java虛擬機
Java虛擬機是棧式的,它不定義或使用寄存器來傳遞或接受參數,其目的是為了保證指令集的簡潔性和實現時的高效性(特別是對於寄存器數目不多的處理器)。
所有寄存器都是32位的。
3.棧
Java虛擬機的棧有三個區域:局部變數區、運行環境區、操作數區。
(1)局部變數區 每個Java方法使用一個固定大小的局部變數集。它們按照與vars寄存器的字偏移量來定址。局部變數都是32位的。長整數和雙精度浮點數占據了兩個局部變數的空間,卻按照第一個局部變數的索引來定址。(例如,一個具有索引n的局部變數,如果是一個雙精度浮點數,那麼它實際占據了索引n和n+1所代表的存儲空間。)虛擬機規范並不要求在局部變數中的64位的值是64位對齊的。虛擬機提供了把局部變數中的值裝載到操作數棧的指令,也提供了把操作數棧中的值寫入局部變數的指令。
(2)運行環境區 在運行環境中包含的信息用於動態鏈接,正常的方法返回以及異常傳播。
·動態鏈接
運行環境包括對指向當前類和當前方法的解釋器符號表的指針,用於支持方法代碼的動態鏈接。方法的class文件代碼在引用要調用的方法和要訪問的變數時使用符號。動態鏈接把符號形式的方法調用翻譯成實際方法調用,裝載必要的類以解釋還沒有定義的符號,並把變數訪問翻譯成與這些變數運行時的存儲結構相應的偏移地址。動態鏈接方法和變數使得方法中使用的其它類的變化不會影響到本程序的代碼。
·正常的方法返回
如果當前方法正常地結束了,在執行了一條具有正確類型的返回指令時,調用的方法會得到一個返回值。執行環境在正常返回的情況下用於恢復調用者的寄存器,並把調用者的程序計數器增加一個恰當的數值,以跳過已執行過的方法調用指令,然後在調用者的執行環境中繼續執行下去。
·異常和錯誤傳播
異常情況在Java中被稱作Error(錯誤)或Exception(異常),是Throwable類的子類,在程序中的原因是:①動態鏈接錯,如無法找到所需的class文件。②運行時錯,如對一個空指針的引用
·程序使用了throw語句。
當異常發生時,Java虛擬機採取如下措施:
·檢查與當前方法相聯系的catch子句表。每個catch子句包含其有效指令范圍,能夠處理的異常類型,以及處理異常的代碼塊地址。
·與異常相匹配的catch子句應該符合下面的條件:造成異常的指令在其指令范圍之內,發生的異常類型是其能處理的異常類型的子類型。如果找到了匹配的catch子句,那麼系統轉移到指定的異常處理塊處執行;如果沒有找到異常處理塊,重復尋找匹配的catch子句的過程,直到當前方法的所有嵌套的catch子句都被檢查過。
·由於虛擬機從第一個匹配的catch子句處繼續執行,所以catch子句表中的順序是很重要的。因為Java代碼是結構化的,因此總可以把某個方法的所有的異常處理器都按序排列到一個表中,對任意可能的程序計數器的值,都可以用線性的順序找到合適的異常處理塊,以處理在該程序計數器值下發生的異常情況。
·如果找不到匹配的catch子句,那麼當前方法得到一個"未截獲異常"的結果並返回到當前方法的調用者,好像異常剛剛在其調用者中發生一樣。如果在調用者中仍然沒有找到相應的異常處理塊,那麼這種錯誤傳播將被繼續下去。如果錯誤被傳播到最頂層,那麼系統將調用一個預設的異常處理塊。
(3)操作數棧區 機器指令只從操作數棧中取操作數,對它們進行操作,並把結果返回到棧中。選擇棧結構的原因是:在只有少量寄存器或非通用寄存器的機器(如Intel486)上,也能夠高效地模擬虛擬機的行為。操作數棧是32位的。它用於給方法傳遞參數,並從方法接收結果,也用於支持操作的參數,並保存操作的結果。例如,iadd指令將兩個整數相加。相加的兩個整數應該是操作數棧頂的兩個字。這兩個字是由先前的指令壓進堆棧的。這兩個整數將從堆棧彈出、相加,並把結果壓回到操作數棧中。
每個原始數據類型都有專門的指令對它們進行必須的操作。每個操作數在棧中需要一個存儲位置,除了long和double型,它們需要兩個位置。操作數只能被適用於其類型的操作符所操作。例如,壓入兩個int類型的數,如果把它們當作是一個long類型的數則是非法的。在Sun的虛擬機實現中,這個限制由位元組碼驗證器強制實行。但是,有少數操作(操作符pe和swap),用於對運行時數據區進行操作時是不考慮類型的。
4.無用單元收集堆
Java的堆是一個運行時數據區,類的實例(對象)從中分配空間。Java語言具有無用單元收集能力:它不給程序員顯式釋放對象的能力。Java不規定具體使用的無用單元收集演算法,可以根據系統的需求使用各種各樣的演算法。
5.方法區
方法區與傳統語言中的編譯後代碼或是Unix進程中的正文段類似。它保存方法代碼(編譯後的java代碼)和符號表。在當前的Java實現中,方法代碼不包括在無用單元收集堆中,但計劃在將來的版本中實現。每個類文件包含了一個Java類或一個Java界面的編譯後的代碼。可以說類文件是Java語言的執行代碼文件。為了保證類文件的平台無關性,Java虛擬機規范中對類文件的格式也作了詳細的說明。其具體細節請參考Sun
④ php or 嵌入式
嵌入式的前景當然更好,PHP一般都是相對簡單,工資也沒有那麼高。嵌入式系統無疑是當前最熱門最有發展前途的IT應用領域之一。嵌入式系統用在一些特定專用設備上,通常這些設備的硬體資源(如處理器、存儲器等)非常有限,並且對成本很敏感,有時對實時響應要求很高等。特別是隨著消費家電的智能化,嵌入式更顯重要。像我們平常常見到的手機、PDA、電子字典、可視電話、VCD/DVD/MP3 Player、數字相機(DC)、數字攝像機(DV)、U-Disk、機頂盒(Set Top Box)、高清電視(HDTV)、游戲機、智能玩具、交換機、路由器、數控設備或儀表、汽車電子、家電控制系統、醫療儀器、航天航空設備等等都是典型的嵌入式系統。
嵌入式系統是軟硬結合的東西,搞嵌入式開發的人有兩類。
一類是學電子工程、通信工程等偏硬體專業出身的人,他們主要是搞硬體設計,有時要開發一些與硬體關系最密切的最底層軟體,如BootLoader、Board Support Package(像PC的BIOS一樣,往下驅動硬體,往上支持操作系統),最初級的硬體驅動程序等。他們的優勢是對硬體原理非常清楚,不足是他們更擅長定義各種硬體介面,但對復雜軟體系統往往力不從心(例如嵌入式操作系統原理和復雜應用軟體等)。
另一類是學軟體、計算機專業出身的人,主要從事嵌入式操作系統和應用軟體的開發。如果我們學軟體的人對硬體原理和介面有較好的掌握,我們完全也可寫BSP和硬體驅動程序。嵌入式硬體設計完後,各種功能就全靠軟體來實現了,嵌入式設備的增值很大程度上取決於嵌入式軟體,這佔了嵌入式系統的最主要工作(目前有很多公司將硬體設計包給了專門的硬體公司,稍復雜的硬體都交給台灣或國外公司設計,國內的硬體設計力量很弱,很多嵌入式公司自己只負責開發軟體,因為公司都知道,嵌入式產品的差異很大程度在軟體上,在軟體方面是最有"花頭"可做的),所以我們搞軟體的人完全不用擔心我們在嵌入式市場上的用武之地,越是智能設備越是復雜系統,軟體越起關鍵作用,而且這是目前的趨勢。
從事嵌入式軟體開發的好處是:
(1) 目前國內外這方面的人都很稀缺。一方面,是因為這一領域入門門檻較高,不僅要懂較底層軟體(例如操作系統級、驅動程序級軟體),對軟體專業水平要求較高(嵌入式系統對軟體設計的時間和空間效率要求較高),而且必須懂得硬體的工作原理,所以非專業IT人員很難切入這一領域;另一方面,是因為這一領域較新,目前發展太快,很多軟硬體技術出現時間不長或正在出現(如ARM處理器、嵌入式操作系統、MPEG技術、無線通信協議等),掌握這些新技術的人當然很找。嵌入式人才稀缺,身價自然就高,越有經驗價格就越高。其實嵌入式人才稀少,根本原因可能是大多數人無條件接觸,這需要相應的嵌入式開發板和軟體,另外需要有經驗的人進行指導開發流程。
(2)與企業計算等應用軟體不同,嵌入式領域人才的工作強度通常低一些(但收入不低)。搞企業應用軟體的IT企業,這個用戶的系統搞完了,又得去搞下一個用戶的,而且每個用戶的需求和完成時間都得按客戶要求改變,往往疲於奔命,重復勞動。相比而言,搞嵌入式系統的公司,都有自己的產品計劃,按自己的節奏行事。所開發的產品通常是通用的,不會因客戶的不同而修改。一個產品型號開發完了,往往有較長一段空閑時間(或只是對軟體進行一些小修補),有時間進行充電和休整。另外,從事嵌入式軟體的每個人工作范圍相對狹窄,所涉及的專業技術范圍就是那些(ARM、RTOS、MPEG、802.11等),時間長了這些東西會越搞越有經驗,賣賣老本,幾句指導也夠讓那些初入道者琢磨半年的。若搞應用軟體,可能下一個客戶要換成一個完全不同的軟體開發平台,那就苦了。
(3) 哪天若想創業,搞自已的產品,那麼嵌入式是一個不錯的主意,這可不像應用軟體那樣容易被盜版。土木學院有一個叫啟明星的公司開發出一個好象叫「工程e」的掌上PDA(南校區門口有廣告),施工技術人員用該PDA可當場進行土木概預算和其它土木計算,據說銷路特好。我認識的某大學老師,他開發的飯館用的點菜PDA(WinCE平台,可無線連網和上網),據他說銷路不錯,飯館點點PDA讓客戶點菜,多顯派頭檔次。我記得00級2+2班當年有一組同學在學Windows程序設計課程時用VC++設計了一個功能很強的點菜系統做為課程項目,當時真想建議他們將這個軟體做成PDA,估計會有些銷路(上海火車站南廣場的Macdonald便使用很漂亮的PDA給用戶點食品,像摸像樣的)。這些PDA的硬體設計一般都是請其它公司給訂做(這叫「貼牌」:OEM),都是通用的硬體,我們只管設計軟體就變成自己的產品了。
學習嵌入式,該學習什麼基本的知識呢?
首先C語言,這個是毋庸置疑的,不管是做嵌入式軟體還是硬體開發的人員,對C語言的掌握這個是必需的,特別是對於以後致力於嵌入式軟體開發的人,現在絕大部分都是用C語言,你說不掌握它可以嗎?至於如何學習C語言,我想這些基礎的知識每個人都有自己的方法,關鍵要去學習,看書也好,網上找些視頻看也好。很多人會問,C語言要學到怎麼樣,我覺得這沒有標準的答案。我想至少你在明白了一些基礎的概念後,就該寫代碼了,動手才是最重要的,當你動手了,遇到問題了,再反過來學習,反過來查查課本,那時的收獲就不是你死看書能得到的。
其次,應該對操作系統有所了解,這對你對硬體和軟體的理解,絕對有很大的幫助。應該把系統的管理理解一下,比如進程、線程,系統如何來分配資源的,系統如何來管理硬體的,當然,不是看書就能把這些理解透,如果不是一時能理解,沒關系,多看看,結合以後的項目經驗,會有更好的理解的。
還有應該學習嵌入式系統,如linux或者wince下的編程,這些對以後做應用的編程很有幫助,當然,如果做手機的話,那可以學習MTK、塞班、Android等操作系統,Android是以後發展的趨勢,現在很熱門,Android也是基於linux系統封裝的,所以建議先學習下linux。
還有,應該學習下單片機或者ARM或者MIPS,很多人說我沒有單片機的經驗,直接學ARM可以嗎?我覺得那完全沒有問題的,當然如果你學習過單片機,那最好不過了,以後學習ARM就更簡單了。
最後如果你把以上的知識都有所了解後,就該去閱讀閱讀一些優秀的代碼,比如結合arm晶元手冊學習去學習下UBOOT的源代碼,了解下最小的系統開發,那對你整個嵌入式開發的非常有幫助的,可以的話,還可以學習下linux的源代碼,當然如果你直接閱讀2.6的代碼,我想你會很痛苦的,可以先看看linux 代碼早期的版本,比如0.12 的代碼等等,麻雀雖小,五臟俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程師。
至於上面說的知識如何學習呢?每個人都應該去找自己最好的方法,所謂的最好的方法就是最適合自己的方法。很多人看不進書,那就去看看視頻吧。視頻也應該要選擇,不是隨便看看,應該要有所選擇,有所挑選。我也是這樣一路走過來的,不過我這人比較懶,我看不進書,一看書我就想睡覺,所以這幾年我都是看視頻過來的,現在也算學有所成,但也不敢說是高手吧。
我在網上看到,有人把自己學習嵌入式的視頻總結出來,嵌入式系列實踐和視頻教程,大家可以看看網址http://www.004r.com/embedvideo.htm 我仔細看了覺得很不錯,我本來也想整理下,可是奈何我自己的電腦硬碟空間才40G,沒有辦法,時間也是不夠,心有餘而力不足,我不是在幫他做廣告,雖然要花錢,我覺得算不錯,至少自己不用去整理和花大量的時間去找資源,當然如果網上有的下,你網速和硬碟都夠的話,我建議大家自己網上下也好。想想我自己該開始學的時候,那時視頻資源少之又少,我買書和買視頻至少花了幾千塊,但是我覺得那很值,至少我現在賺回來了很多知識。
最後,希望這篇文章對熱愛嵌入式,想致力於嵌入式開發的朋友有所幫助。送給大家一句簡單而又樸素的話,堅持就是勝利,貴在堅持,也可以看看如何堅持嵌入式學習!
最後希望樓主選擇嵌入式,早日成為嵌入式的高手。
⑤ 華為嵌入式軟體,硬體工程師,晶元設計工程師 哪個較有前景
相對比較來說,嵌入式軟體前景比較好點兒,
經調查,從事嵌入式系統工程師表示,做軟體實際上有高下之分,開發語言從機器語言、匯編到C、C++,再到紅透半邊天的Java、C#等,該學哪種呢?為什麼有些開發者工資低,而有些開發者千金難求?為什麼3年的Java高級程序員薪水僅僅8k-10k,而一個Linux底層C語言程序員兩年經驗就敢要10k的薪水?
還是門檻,比如月薪15k的Linux嵌入式系統開發職位,門檻就有
Linux系統、Shell編程、Linux開發環境、C語言、ARM硬體平台、數據結構、Linux內核、驅動程序等,粗略數數就有8道關口,他需要非常熟悉整個的計算機體系,能做出實際的產品,而Java的開發者卻僅僅是會使用名叫Java的語言工具,始終高高飄在眾多層次之上,開發項目非常快,甚至可以不知道OSI模型,很可能自始至終都是軟體藍領。
嵌入式系統開發本身也有高下之分,至少包含嵌入式應用程序工程師和底層的驅動內核工程師兩種。前者同樣是使用現成工具進行簡單勞動,比如使用J2ME
開發小游戲或者進行一些界面開發,而後者是根據晶元具體情況把操作系統(如Linux)移植到上面,同時編寫必要的驅動程序,改寫相應的內核代碼。很顯然後者是一個公司真正的技術核心。而技術核心的工資很可能是其他開發者的數倍。
嵌入式系統開發突出強制和項目,學習不僅僅是學習幾項技術,而是構建你的知識體系。比如學習嵌入式系統開發,就要從基礎Linux,C語言,數據結構開始,到ARM,匯編,Linux內核、驅動等,更重要的是更多的項目練習,設計至少5個項目,多達10000行強制核心代碼的編寫可以讓你真正獲得知識。為進入外企或者出國做准備。
未來的幾年內,隨著信息化,智能化,網路化的發展,嵌入式系統技術也將獲得廣闊的發展空間。美國著名未來學家尼葛洛龐帝99年1月訪華時預言,4~5年後嵌入式智能(電腦)
工具將是PC和網際網路之後最偉大的發明。
⑥ 要用ARM板裝LINUX可能還要配置php伺服器
用ARM板裝LINUX+php伺服器是沒問題的。
在 http://www.ubuntu.com/download/arm 這里你能下載到 ARM 版本的 Linux 操作系統。
在該版本的 Linux 操作系統上你安裝 PHP 沒有任何問題。
其實,幾乎所有的 X86上的 Linux 上能運行的軟體都可以在 ARM 版的 Linux 上運行,因為它們一般都能下載到源代碼,你用源代碼在 ARM 的 Linux 上用arm-linux-gcc編譯一下就能用了。
⑦ 手機CPU天梯圖,看看你的手機CPU屬於什麼位置
樓主可以參考下面手機CPU的天梯圖片
⑧ ARM-linux boa php支持session嗎
支持。
注意: 順便說下4.8.1的64位gdb在debug編譯的32位程序會崩潰.
⑨ 計算架構的變化對未來雲計算領域會產生什麼樣的影響
雲計算具有高可靠性、高擴展性、按需服務、使用成本低等特點,它被視為科技業的下一次革命。雲計算的發展已經改變很多領域的工作模式。雲計算革的命性不僅僅是針對企業,
同時也影響著我們的日常生活。這是因為在我們的日常生活因為與互聯網的交互,使我們一定會遇到雲計算,無論我們是否知道那就是雲計算。因此雲計算正在改善著我們的生活,或至少在某些方面改變著我們的生活。下面就一起來看看:
1.電源提供不中斷的速度和運算能力。當一個人想成為一個「真正的玩家」,需要硬體來支持,或者至少是支持這個游戲的硬體,在以一種正確的方式運作。當然,那需要大量的資金投入。但是,雲計算正在改變這一切。
想像一下,在平板電腦上玩對硬體要求苛刻的游戲。是的,這是完全有可能的,因為游戲本身將運行在硬體能力很強的伺服器上,當這名球員在移動設備上或弱簡單的流媒體視頻伺服器,並上傳實時控制的計算機。所有你需要的是一個互聯網連接的媒體視頻的流暢。例如OnLive的服務。
2.可以做到及時改正。計算通過全面的信息和警報將真正地使生活變得更輕松,並通過特定的信息交流。例如,你的車運行狀況都可以得到計算機的監控,如果你不能達到最近的加油站,
它可以及時發送警報,從而避免意外的發生。如果您的車壞了,如果可以彌補,電腦可以簡單地給出一些關於如何解決它的方案。如果不能,則會通知最近的拖車公司。
3.計算將成為無形的。4.可見性和可靠性的庫存記錄。5.公司將成為值得信賴的顧問。6.提供了一個獨特的銷售方式。
7.小規模企業的全球化。由於非常低的門檻,雲計算按次付費的使用模式,即使是小企業也有比擬大型跨國公司的IT能力,從而使他們能夠參與全球競爭。例如,一個發展中國家小的圖形工作室也可以通過各種雲計算解決方案,面向全球出售自己的在線服務,例如菲律賓,這在十年前是不可想像的。
8.安全的數據存儲在筆記本電腦中。通過工業間諜活動竊取企業的筆記本電腦,是獲取敏感信息最簡單的方式。而存儲在雲上的重要文件和數據,它是安全的,因為可以從世界上任何地方訪問到他,而不是被束縛在一個特定的地方。也就是說,可以及時更改或者刪除被盜取數據。
9.雲計算助力發展中國家發展。在發展中國家,可能沒有足夠的IT設備提供給大型企業。所以組織和企業為提升發展速度將擁抱雲計算,以保持競爭力,這甚至可能使自身企業成為市場的領導者。
10.請大家自力更生。由於雲計算可以整合利用現有大量的資源,這就使得企業完全可以通過自身的實力來充分挖掘利用這些資源。它可以用於產品開發、測試,通過協作來降低我們的發展成本。
有了雲計算,企業的性質正在迅速發生變化,讓中小企業也有了與大的企業集團競爭的機會。也正因為如此,消費者將大大受益,因為從長遠來看,競爭會促進市場產生更好的服務和產品,消費者也將因此受益。
⑩ 編程都有哪些語言
常見的高級編程語言有:C、C++、C#、Java、JavaScript、PHP、Python、go……
可以看下圖:
編程都有哪些語言