老師說52單片機之間能夠傳數據,不過,我學的還不熟練。我想通過52單片機傳送52單片機獨立的程序,不知道能不能實現。所以我的問題是:

「52單片機支持通過多機通信的方式將程序打包並傳送給另外一個單片機執行程序嗎?」


實名掛人:

二十幾年的EE,不服來辯。

@RaySir

52單片機支持通過多機通信的方式將程序打包並傳送給另外一個單片機執行程序嗎? - RaySir的回答 - 知乎 https://www.zhihu.com/question/325829887/answer/695363777

-----------------------------------------------------------------------------------

原回答

-----------------------------------------------------------------------------------

首先,老師說「52單片機」並不嚴謹,他形容的應該是市面上很多的型號以52結尾的51內核MCU,實質並沒有「52單片機」一說,類似AT89C52W78E52STC89C52這些型號的MCU,都屬於51內核單片機。

其次,將執行代碼經過串口發包,傳輸給另一個單片機運行是可行並且不複雜的,最容易實現的是使用帶有IAP功能的MCU,將接收到的二進位代碼直接寫入FLASH內,跳轉運行即可,跳轉前注意事先處理好中斷和堆棧。

稍微老舊的型號類似AT89C52這類型號的MCU,可以將RAM CHIP在匯流排上外掛成ROM與RAM切換形式,下載二進位代碼時掛載為RAM,直接寫入,之後切換成外部ROM再跳轉執行。


一點沒問題,編譯完事把二進位存到單片機A,像數組那樣也行。發到單片機B,寫flash 裏,直接跳轉就完事了。

一通操作查了下52單片機的手冊發現不支持IAP,拉到了。。。。

不過思路大概是這樣,我之前做過一個,A單片機把一個函數發往B單片機,然後在B上運行這個函數。。

A在編譯的時候通過分散載入把函數指定到特定的位置,這個函數在A看來就是一個大數組。

把數組發給B

B通過IAP 調用單片機內部代碼,把數組燒寫到特定位置。

搞個函數指針變數指向這個位置,然後運行。


可以的,詳細教程請自行翻閱stc15w系列單片機的開發手冊。


單片機就是singleChip——歸攏到漢語中、就像是名詞「單身漢雞兒」、「光桿」、「單兵」。看著這些名詞你應該就不會遐想單片機可以多機通信打包異地執行了。

IN細節地:單片機的通訊口是用來接更下級的感測器,或者與上層主機通信用、作為一個終端(end)地;單片機沒有大面積的內存——很多單片機設計者在分配緊張內存時、系在那裡一位一位的算的——更沒有外置永久存儲如硬磁碟(磁碟內的單片機基本上比51系列的單片機都要生猛多了),它怎麼打包嘛?打包嘛要把數據調來調去你每內存實體不能說指針一new那內存就急急如律令地憑空跑來三;——

異地執行也是空中樓閣——大家常見的可執行程序如jar、exe等並不是執行代碼內存之直接鏡像,單片機想要運行它們還得作複雜的計算(程序裝載);而且,回到前面地,內存也根本就是≈0。

沒得搞哈。


首先你們老師說的單片機之間可以傳數據,應該是指串口通信。單片機與單片機之間的通訊絕大部分都是基於串口的,也就是說把要發送的數據寫入串口的發送緩存寄存器裏,串口就會自動發出數據,相對於的接收端的單片機在串口的接受緩存寄存器裏就會收到這個數據,每次傳送的數據是一個位元組。你要把程序打包發送的話,必須要編譯成二進位文件,然後把這個文件下載的到內存卡或者單片機的內部,然後配合串口發送程序就能發送出去。這裡不想我們電腦上發送那麼簡單。所有的操作基本都在自己編寫程序實現。

還有其他電子類的問題,可以到芯吧客問答區向專業大神提問,現在還有活動,註冊活躍可以免費拿ESP8266、STM32開發板等!!點擊看看。

知乎新用戶專享!ESP8266、STM32小系統板免費送!!問答—電子芯吧客?

www.icxbk.com


推薦閱讀:
相關文章