我想你可能會認爲上傳代碼到Arduino是單向通信:這就好比將草莓放在攪拌機中,然後出現Daquiri。如果是這樣的話,你可以把任何IDE轉儲到串口上,將它保存到一個文件中,並且你有一個Arduino二進制文件。 (跳到TL; DR如果對細節不感興趣的話:Upshot:這個假設是不正確的)。
單向通信假設並不完全正確:在Arduino上有一個程序(稱爲「a bootloader」),它負責與程序員進行通信(「程序員」:對Arduino進行編程的程序,假設它現在是Arduino IDE)。在他們最「自然」的狀態下,Arduino CPU不能通過串行線進行編程。相反,這些芯片可以通過system programming(ISP)或viaJTAG協議進行編程。自舉程序是一個在Arduino CPU上運行並通過串口加載草圖/程序的程序。該程序在啓動時運行,並通過串口查找編程命令。
如果它發現程序員正在嘗試傳遞編程信息,它將讀取通過串行鏈接傳來的編譯後的Arduino二進制文件,將其存儲在閃存中,並通過串行鏈接發送回驗證,如果所有內容成功後,退出並啓動存儲的草圖。如果沒有編程信息出現在串口上,也就是說,沒有程序員試圖寫一個新的草圖,那麼bootloader只是退出並啓動已存儲在閃存中的程序。
TL; DR:爲了實現你的串口上有僞的Arduino你必須寫一個程序一些代碼,你的虛擬串口的另一端模擬一個Arduino(引導程序)。所以當程序員/ IDE對Arduino說「你在嗎?」你的程序會迴應「是!」,就像Arduino一樣。
默認Arduino的引導加載器是STK-500 compatible:這意味着,它實現STK-500命令 - 的量,參考可以發現here。如果你決定這樣做,那麼最簡單的事情可能是從現有的引導加載程序開始,比如Arduino或AdaFruit(也有其他),並對其進行修改。這樣的引導程序將擁有所有已經實現的命令,並且由於它是用C語言編寫的(我不會選擇程序集引導程序來修改:),所以它應該很容易修改。
或者,您可能會認爲STK-500太難實施。如果是這種情況,可以使用Avrdude支持的任何編程器協議:Avrdude是用於編程AVR芯片的程序,Arduino IDE內部使用Avrdude將草圖發送給Arduino。如果你這樣做,那麼你必須改變你使用的編程器在Arduino IDE中的設置。
就個人而言,我認爲STK-500兼容是最好的選擇,但YMMV。
如果您想獲取已編譯的程序(即原始機器碼),爲什麼不直接查看生成的Intel Hex文件? – 2013-04-03 10:42:12
有兩個原因,首先,如果您打開IDE並上傳代碼,就像使用實際的Arduino一樣,那將會是一個更好的用戶體驗。其次,根據我所瞭解的.hex文件的路徑變化,所以在我的應用程序中使用它並不容易。 –