我猜,有ROM和地方軟件控制部分存儲一些CPU芯片。
許多嵌入式系統使用micro-controller(MCU)或system-on-a-chip (SoC),這些包括在單個芯片上的一個或多個CPU核心,加ROM(通常爲閃存)存儲器,RAM,以及選擇外圍設備和這樣的接口的如UART,USB,GPIO,ADC,DAC,SPI,I2C,定時器/計數器,以太網控制器,CAN,SDIO,LCD控制器等等。由於芯片空間的限制以及閃存和SRAM的密度相對較低,MCU也可能具有外部ROM或RAM存儲器,並且可能具有SDRAM控制器以允許使用高密度且廉價的SDRAM。
通常代碼存儲在片上Flash或OTP ROM(一次性可編程ROM)中,但可以使用外部存儲器。某些系統直接從ROM執行代碼,其他系統則將ROM映像複製到RAM中執行(通常速度更快,ROM映像可能會被壓縮以減少佔用空間)。如果代碼不是從ROM中執行的,而是複製到RAM中,則代碼可以存儲在廉價,高密度的NAND Flash中。
現在這個軟件通常用Java或低級C(++?)編寫,甚至更低?
運行Java需要一個JVM,通常是一個操作系統。手機應用程序和Android應用程序通常用java編寫,但它不是系統級語言。核心操作系統和JVM本身將用低級本地執行的語言編寫。一些芯片包括硬件中的部分Java字節碼執行(例如ARM的Jazelle單元),但是這樣做的目的是加速Java執行,而不是直接在硬件中實現完整的JVM。
C是深度嵌入式系統中最常用的系統和應用程序級語言,越來越多地使用C++,特別是在大型系統上。彙編代碼通常只用於最低級別的引導程序和初始化代碼;一旦建立了C運行時環境,更高級的語言更爲常見。一些非常小的8位系統仍然可能在彙編器中完全編碼。而如果你的系統足夠大以運行Linux,它甚至可以爲應用程序的某些元素使用腳本語言。儘管通常的標準功能和算法通常由工具或芯片供應商(有時是相同的)提供爲更高級語言的庫,但許多時間關鍵的DSP功能通常也以彙編方式編碼。
是否有任何圖書館常用於這種事情?或者芯片是用這些或者一些基本的操作系統預編程的?
有一個廣泛的嵌入式系統庫的生態系統,包括商業和開源。這些可能包括RTOS內核,完整的操作系統,文件系統和外設庫。芯片供應商通常會提供驅動程序庫或片上外設。這些驅動程序通常是「裸機」(即不依賴操作系統),作爲源代碼提供,通常爲低級別。如果你在一個操作系統中使用它們,你通常可能需要使用它們來構建一個更高級別,更適合操作系統的驅動程序。
設備通常不會預編程。某些開發和評估硬件可能會使用演示代碼進行預編程,較大的評估硬件可能預裝有Linux或WinCE。
該芯片如何用軟件編程?有什麼需要的ROM寫入設備是正確的?
有可能的方法。許多現代MCU包括片上調試和編程硬件(通常是JTAG接口,儘管專用接口也是通用的),這允許片上,並且在許多情況下使用JTAG從PC主機對片外閃存進行編程調試器或程序員。
爲了允許編程而不需要昂貴的JTAG編程器,許多MCU都包含一個預編程的bootrom。這是一個小程序,允許通過諸如UART(串行)或USB等接口加載和執行代碼。 bootrom可能包含Flash編程代碼,或者它可能比這更簡單,並且需要在RAM中加載和執行輔助啓動加載程序並將該程序設置爲Flash。
對於批量生產,芯片可以在被團伙編程人員放置在板上之前進行預編程。這通常是由設備供應商或電路板組裝商提供的服務。
是這個東西,就能夠通過我的筆記本電腦玩在家裏,如果是的話,我需要在除了筆記本電腦什麼樣的設備?
該問題的答案完全取決於您的預算。你可以開始幾十美元。對於嚴重的開發,您將需要一些調試硬件,以便您可以在PC應用程序中使用基於PC的源代碼級調試器運行芯片。
任何人都可以指向我的資源,我可以閱讀更多關於它嗎?
專業資源是Embedded.Com(現在已更名但不易記憶爲嵌入式EETimes),但這應該從深層次開始!你可能會更喜歡相對簡單的Arduino project或更高端的BeagleBoard project。
如果您碰巧選擇了Atmel AVR系列MCU,那麼一個很好的愛好者資源是AVR Freaks。 AVR的優勢在於我認爲GNU編譯器支持的唯一的8位器件。
另一個資源,如果你想在ARM平臺上開發使用開源工具的項目(或者其中有很多),那麼在Windows上是Martin Thomas的優秀網站ARM-Projects。他主持了自己的GNU工具分發,但也有可能更新和維護的其他鏈接。
我想知道它是如何工作的,它是如何參與的,以及需要什麼技能來獲得這個工作。
自己可能需要一段時間才能獲得有趣的啓動和運行,但是有很多示例和應用說明可以讓您更快速地滿足您的需求。電子知識是有用的。雖然大多數開發板和評估板都有各種接口,開關,按鈕,指示器,有時還有LCD顯示器或其他設備,但它們通常主要用於與您自己構建的專用硬件接口。對於機電一體化系統尤其如此,在這種系統中,您將需要額外的硬件來驅動和控制大電流設備,例如電機和執行器,或與傳感器連接。
這是微控制器的世界,並且經常改變Microchip,Atmel,TI等8/16位處理器的世界。你可能想看看http://electronics.stackexchange.com。通常,這些微控制器具有內置的一切功能,並且只有少量的外部I/O接口連接到外部世界。通常和現在大部分都是現在用C編程的。 – kenny
@kenny,在編程過程中,您從未真正編寫過驅動程序!是的,[Electronics.stackexchange.com](http://electronics.stackexchange.com)涵蓋了很多這方面的內容,並且有很多可用的問題。 – Kortuk
此http://www.cvel.clemson.edu/auto/auto_buses01.html描述了當前汽車中可能存在的各種網絡。這家公司http://www.matrixmultimedia.com/eblocks.php構建了你想要的包含CAN和LIN模塊的系統。 – dbasnett