0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MicroPython 在嵌入式開發(fā)中的興起

陳韻瑄 ? 2023-01-04 11:17 ? 次閱讀

換崗:MicroPython嵌入式開發(fā)中的崛起

MicroPython 技術(shù)演進(jìn)

計(jì)算機(jī)編程語言是對技術(shù)發(fā)展的一項(xiàng)引人入勝的研究。從機(jī)器代碼和匯編語言到 CBOL 和 FORTRAN 等第一批高級語言,向更強(qiáng)大但更易于理解的語言邁進(jìn)使得開發(fā)周期更快,并將編程帶給越來越廣泛的創(chuàng)作者,從專業(yè)到業(yè)余。

Arduino 和 Raspberry Pis 出現(xiàn)之前,許多原型制造商開始使用 PBASIC微控制器,例如 BASIC Stamp。在專業(yè)的嵌入式領(lǐng)域,C 編程語言長期以來一直占據(jù)著至高無上的地位。實(shí)際上,Arduino“編程語言”由一組 C/C++ 函數(shù)組成。這允許抽象出各種嵌入式設(shè)備編程的復(fù)雜性,從而對那些剛剛開始嵌入式電子教育的人更加友好。因此,雖然 C 語言的主導(dǎo)地位仍然相當(dāng)穩(wěn)固,但變革之風(fēng)正在醞釀之中。輸入 Python 編程語言。

根據(jù) 2020 年 7 月的 IEEE 研究,Python 是 2020 年最流行的編程語言。它的創(chuàng)建者 Guido van Rossum 解釋說,創(chuàng)建 Python 的原因如下:

“我在 CWI 的 ABC 小組實(shí)施解釋性語言方面擁有豐富的經(jīng)驗(yàn),并且通過與這個小組的合作,我學(xué)到了很多關(guān)于語言設(shè)計(jì)的知識。這是許多 Python 特性的起源,包括使用縮進(jìn)進(jìn)行語句分組和包含非常高級的數(shù)據(jù)類型?!?/p>

Guido 繼續(xù)解釋其他語言對 Python 設(shè)計(jì)選擇的影響:

“Modula-3 是用于異常和其他一些 Python 特性的語法和語義的起源?!?/p>

還:

“我在 Amoeba 中處理錯誤的經(jīng)歷讓我敏銳地意識到異常作為一種編程語言特性的重要性。”

Python 編程語言于 30 多年前首次發(fā)布。Python 代碼首先被編譯成字節(jié)碼,然后提供給解釋器,這是一個大型 C 程序(看,你就是無法避免 C)。Python 的一個流行方面是交互式解釋器模式或讀取-評估-打印-循環(huán) (REPL),這是一種通過命令行交互式提示與 Python 交互以在將代碼提交到.py文件之前測試概念的方法。MicroPython 固件也可以在沒有編譯器的情況下構(gòu)建和運(yùn)行,因?yàn)樘摂M機(jī)可以運(yùn)行預(yù)編譯 ( .mpy) 程序。

快進(jìn)到 2014 年,MicroPython 發(fā)布了。對于具有桌面編程經(jīng)驗(yàn)的人,您可能會使用稱為 CPython 的特定 Python 實(shí)現(xiàn),這是該語言的參考實(shí)現(xiàn)。MicroPython 只是另一種實(shí)現(xiàn),它針對內(nèi)存和處理受限的硬件(例如微控制器)進(jìn)行了優(yōu)化。MicroPython 包含完整的 Python 3 編譯器、運(yùn)行時和 Python 標(biāo)準(zhǔn)庫的子集。順便說一句,MicroPython 已經(jīng)分叉到 CircuitPython 中,后者更專注于教育和創(chuàng)客社區(qū)。以下是 MicroPython 在嵌入式開發(fā)中的多功能性和影響力的示例。

使用 MicroPython 對微控制器進(jìn)行編程的快速和骯臟

MicroPython 解釋器可用于許多具有各種硬件功能的開發(fā)板上。獲取基于MicroPython的開發(fā)板時,首先要做的是將解釋器固件更新到最新版本。這是通過訪問 MicroPython固件網(wǎng)站并為您的特定開發(fā)板下載最新的設(shè)備固件更新 ( .dfu) 文件來完成的。每塊板都有不同的進(jìn)入更新模式的物理方法。它通常涉及在向電路板供電時將某個引腳短接至電壓或接地。將開發(fā)板插入計(jì)算機(jī)并設(shè)置為更新模式后,啟動一個名為dfu-util的實(shí)用程序,將新固件刷入開發(fā)板。

確切的使用機(jī)制dfu-util將因您的主機(jī)系統(tǒng)操作系統(tǒng)(Windows、Mac OS、Linux)而異。如果使用基于 Windows 的主機(jī),可能需要一些額外的步驟。

完成后,從開發(fā)板上拔下 USB 電纜并重新插入。開發(fā)板應(yīng)枚舉為可移動介質(zhì),例如 USB 閃存驅(qū)動器或光盤。該驅(qū)動器應(yīng)列為/flash,并且應(yīng)包含以下四個文件:

boot.py:包含特定開發(fā)板的配置信息。

main.py:包含您的特定應(yīng)用程序的源代碼。

pybcdc.inf:這是一個 Windows 驅(qū)動程序文件,可以讓主機(jī)作為串行 USB 設(shè)備與開發(fā)板接口。

readme.txt:開發(fā)人員可以在其中向最終用戶或可能希望派生 main.py 文件以滿足自己需求的開發(fā)人員留下任何注釋的文件。

可以通過主機(jī)上的串行終端使用 REPL 與開發(fā)板進(jìn)行交互?;蛘?,我們可以使用代碼編輯器來編輯主.py文件。MicroPython 和相關(guān)開發(fā)板的一個巧妙特性是源代碼保留為用戶可訪問的文件。只需將開發(fā)板插入計(jì)算機(jī),它就會枚舉為可移動存儲設(shè)備。然后可以在最終用戶選擇的代碼編輯器中直接查看和編輯源代碼文件。然后彈出開發(fā)板,拔下電源并給開發(fā)板加電,執(zhí)行新的或修改后的源代碼。

一些開發(fā)工具能夠處理 MicroPython。一些更受歡迎的選擇包括:

Mu:一個免費(fèi)的、準(zhǔn)系統(tǒng)的編輯器,有很多花里胡哨的功能,包括代碼完成、REPL、文件管理器,以及通過簡單的鼠標(biāo)點(diǎn)擊來整理代碼的能力。這是一個很好的入門平臺,在簡單性方面與 Arduino IDE 最為相似。

PyCharm:PyCharm 提供免費(fèi)社區(qū)版和付費(fèi)專業(yè)版,是 Python 開發(fā)環(huán)境的主力。免費(fèi)版本包含僅供其他類似開發(fā)工具的付費(fèi)版本使用的功能。調(diào)試器、重構(gòu)、代碼檢查、即時錯誤突出顯示和快速修復(fù)等功能都是免費(fèi)提供的。

Visual Studio Code:萬能的代碼編輯器,已經(jīng)成為許多開發(fā)人員的默認(rèn)編輯器。Microsoft 提供的這一免費(fèi)產(chǎn)品易于擴(kuò)展,并且可以與 GitHub 等其他第三方工具集成。這可以使 Visual Studio Code 成為 MicroPython 項(xiàng)目的一體化開發(fā)環(huán)境。

編寫 CPython 和 MicroPython 代碼之間的實(shí)際差異

MicroPython 已經(jīng)移植到許多基于 Arm ? Cortex ? -M4的嵌入式平臺(包括STM32、TI CC3200 /WiPy、Teensy boards、Nordic nRF 系列、SAMD21和 SAMD51),此外,它還被移植到其他架構(gòu),如 ESP8266 、ESP32、16 位 PIC、RISC-V(RV32 和 RV64),甚至 Lego Mindstorms EV3。MicroPython 必須應(yīng)對大量不同的體系結(jié)構(gòu)和嵌入式系統(tǒng)規(guī)范,而 CPython 的環(huán)境相對更加單一(主要是 x86/x64 和 ARM 體系結(jié)構(gòu))。因此,CPython 和 MicroPython 之間存在一些并非微不足道的差異。一些主要區(qū)別包括:

如何添加自定義庫:與 CPython 不同,MicroPython 不理解當(dāng)前目錄的概念。因此,雖然它也用于sys.path查找模塊,但它是相對于0:/(指的是開發(fā)板的內(nèi)部閃存)或相對于1:/(指的是 SD 卡,如果開發(fā)板配備的話)。創(chuàng)建模塊有兩種方法。

第一種選擇是在閃存或 SD 卡的根目錄下創(chuàng)建一個文件,例如mymodule.py. 然后在 中main.py,只需添加一行 with import mymodule,位于其中的所有功能都module.py將對 可用main.py。

第二個選項(xiàng)是在根目錄中創(chuàng)建一個目錄,例如,mymodule. 在mymodule文件夾,創(chuàng)建一個名為的文件__init__.py并在文件中添加任何需要的自定義函數(shù)。然后從內(nèi)部main.py添加行import mymodule。

在任何一種情況下,要訪問存儲在 SD 卡上的任何模塊,該行sys.path.append('1:/')也必須添加到main.py.

內(nèi)存管理:CPython 使用自動引用計(jì)數(shù)作為內(nèi)存管理的手段,而 MicroPython 使用垃圾收集。

有限的和特定于微的模塊:Python 的主要便利之一是能夠輕松導(dǎo)入提供許多有用功能的代碼——例如解析 JSON、字符串處理或 Web 套接字編程。但是,MicroPython 無法訪問完整的 CPython 模塊。此外,許多標(biāo)準(zhǔn) CPython 模塊的 MicroPython 實(shí)現(xiàn)考慮了嵌入式硬件的內(nèi)存和處理速度限制。一些模塊使用標(biāo)準(zhǔn)的 Python 名稱。其他人以“u”開頭;例如, import array(CPython) 和import uarray(MicroPython)。

此外,一些模塊是特定于嵌入式硬件的。更通用的導(dǎo)入機(jī)器模塊允許代碼最大限度地提高各種 MicroPython 友好開發(fā)板的可移植性。還有特定于電路板的模塊,例如導(dǎo)入pyb(針對 pyBoard)或?qū)雃sp(針對基于 ESP8266 的電路板)。電路板特定模塊利用任何獨(dú)特的硬件組件或最大限度地提高效率。例如,pyb.delay(ms)或者pyb.disable_irq()是分別請求延遲或禁用中斷的機(jī)制,專門為 pyBoard 量身定制。此處

提供了可用于 MicroPython 的模塊的完整列表。

語法差異:

MicroPython 要求文字?jǐn)?shù)字和關(guān)鍵字之間有空格,相比之下,CPython 沒有此要求。

MicroPython 允許使用:=賦值給理解變量,CPython 引發(fā) SyntaxError。

語言和內(nèi)置類型差異:

MicroPython 中未實(shí)現(xiàn)異常鏈接。

內(nèi)置類型的處理方式不同;例如,MicroPython 不支持刪除數(shù)組。

不支持函數(shù)的用戶定義屬性。

覆蓋sys.stdin, sys.stdout, 和sys.stderr是不可能的。

CPython 和 MicroPython 之間的全部差異太多,無法在此一一列舉。在大多數(shù)情況下,除了最挑剔的 Python 編碼人員之外,其他人的差異應(yīng)該很小。如果您在嘗試實(shí)現(xiàn)您知道可與 CPython 一起使用的功能時遇到錯誤,請查看此站點(diǎn)以獲取CPython 和 MicroPython 之間的強(qiáng)大差異列表。

開發(fā)商,集結(jié)!

如果優(yōu)先考慮速度,則可以在 MicroPython 中編寫內(nèi)聯(lián)匯編代碼。內(nèi)聯(lián)匯編程序支持 ARM Thumb-2 指令集的一個子集。內(nèi)聯(lián)匯編隨后被轉(zhuǎn)換為 Python 函數(shù)調(diào)用。根據(jù)體系結(jié)構(gòu)參考手冊,“... [匯編] 指令對 32 位帶符號整數(shù)數(shù)據(jù)進(jìn)行操作,除非另有說明。大多數(shù)支持的指令僅在寄存器 R0-R7 上運(yùn)行:在支持 R8-R15 的地方,有說明。從函數(shù)返回之前,寄存器 R8-R12 必須恢復(fù)到它們的初始值。寄存器 R13-R15 分別構(gòu)成鏈接寄存器、堆棧指針和程序計(jì)數(shù)器?!?/p>

結(jié)論

MicroPython 是進(jìn)入嵌入式開發(fā)世界的令人興奮的新入口。它為專業(yè)人士和制造商提供了誘人的新可能性。盡管它可能不適合某些具有極其嚴(yán)格的時序和性能要求的邊緣用例,但它可以成為傳統(tǒng) C 編程語言的有力伙伴。再加上 Python 語言的興起,MicroPython 可以作為希望開始嵌入式硬件開發(fā)的桌面應(yīng)用程序開發(fā)人員的橋梁。

.tb_button {padding:1px;cursor:pointer;border-right: 1px solid #8b8b8b;border-left: 1px solid #FFF;border-bottom: 1px solid #fff;}.tb_button.hover {borer:2px outset #def; background-color: #f8f8f8 !important;}.ws_toolbar {z-index:100000} .ws_toolbar .ws_tb_btn {cursor:pointer;border:1px solid #555;padding:3px} .tb_highlight{background-color:yellow} .tb_hide {visibility:hidden} .ws_toolbar img {padding:2px;margin:0px} .tb_button {padding:1px;cursor:pointer;border-right: 1px solid #8b8b8b;border-left: 1px solid #FFF;border-bottom: 1px solid #fff;}.tb_button.hover {borer:2px outset #def; background-color: #f8f8f8 !important;}.ws_toolbar {z-index:100000} .ws_toolbar .ws_tb_btn {cursor:pointer;border:1px solid #555;padding:3px} .tb_highlight{background-color:yellow} .tb_hide {visibility:hidden} .ws_toolbar img {padding:2px;margin:0px}

審核編輯hhy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5060

    文章

    18976

    瀏覽量

    302217
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4773

    瀏覽量

    84385
收藏 人收藏

    評論

    相關(guān)推薦

    零基礎(chǔ)嵌入式開發(fā)學(xué)習(xí)路線

    嵌入式開發(fā)”沒有接觸過的同學(xué)可能會不明覺厲,但是只要你了解了,感興趣并且有一個正確的學(xué)習(xí)路線的話,零基礎(chǔ)也能入門。給大家介紹一個簡單易懂的學(xué)習(xí)路線,讓你能夠從零開始學(xué)習(xí)嵌入式開發(fā)。 第一步:掌握
    發(fā)表于 10-25 15:55

    嵌入式開發(fā)常見問題排查

    嵌入式開發(fā)問題排查很多人認(rèn)為嵌入式開發(fā)很難,主要是因?yàn)樵谶@個過程中常常會遇到各式各樣的問題。這些問題的復(fù)雜性和多樣性使得許多人感到困惑和無所適從。然而,如果將這些問題逐一拆解,實(shí)際上大部分都可以
    的頭像 發(fā)表于 09-22 08:04 ?242次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>常見問題排查

    聚焦嵌入式開發(fā)的合規(guī)性工具、項(xiàng)目管理工具、版本迭代工具應(yīng)用

    ,就嵌入式開發(fā)與管理領(lǐng)域的最新趨勢、工具選擇以及DevSecOps實(shí)踐應(yīng)用等方面展開了深入探討。 本期對話龍智資深DevSecOps顧問徐晨暉, 分享嵌入式開發(fā)的合規(guī)性工具、項(xiàng)目管理和版本管理的工具選擇,以及DevSecOps
    的頭像 發(fā)表于 07-29 15:15 ?443次閱讀

    嵌入式開發(fā)前景怎么樣?

    嵌入式開發(fā)前景非常廣闊,這主要得益于物聯(lián)網(wǎng)、人工智能、大數(shù)據(jù)等技術(shù)的快速發(fā)展,以及嵌入式系統(tǒng)各個領(lǐng)域的廣泛應(yīng)用。以下是對嵌入式開發(fā)前景的詳細(xì)分析
    的頭像 發(fā)表于 07-10 09:00 ?2371次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>前景怎么樣?

    嵌入式開發(fā)就業(yè)前景怎么樣?

    智能家居領(lǐng)域,嵌入式開發(fā)的主要工作是開發(fā)各種智能化設(shè)備和系統(tǒng),如智能照明、智能安防、智能家電等。嵌入式開發(fā)人員需要掌握相關(guān)的硬件和軟件技術(shù),如處理器、傳感器、通信技術(shù)、操作系統(tǒng)等,
    發(fā)表于 06-07 14:51

    ARM Cortex-A53嵌入式開發(fā)平臺Android手冊

    電子發(fā)燒友網(wǎng)站提供《ARM Cortex-A53嵌入式開發(fā)平臺Android手冊.pdf》資料免費(fèi)下載
    發(fā)表于 04-28 15:10 ?0次下載

    fpga是嵌入式開發(fā)

    FPGA(現(xiàn)場可編程門陣列)與嵌入式開發(fā)之間確實(shí)存在一定的關(guān)聯(lián),但它們本質(zhì)上是兩個不同的領(lǐng)域。
    的頭像 發(fā)表于 03-15 14:18 ?951次閱讀

    嵌入式開發(fā)常見的C語言技巧與方法分享

    嵌入式開發(fā),常常要操作寄存器,對寄存器進(jìn)行寫入,讀出等等操作。每個寄存器都有自己固有的地址,通過C語言訪問這些地址就變得尤為重要。
    的頭像 發(fā)表于 12-26 09:55 ?1031次閱讀

    嵌入式開發(fā)學(xué)習(xí)的十三法則分享

    嵌入式開發(fā)學(xué)習(xí)是一個不斷積累和總結(jié)的過程,來自一個嵌入式開發(fā)高級工程師為我們總結(jié)的關(guān)于嵌入式開發(fā)學(xué)習(xí)的十三法則,大家不妨參考一下: 一、冗余度法則
    發(fā)表于 12-21 06:32

    嵌入式開發(fā)的交叉編譯詳解

    嵌入式開發(fā),經(jīng)常會遇到目標(biāo)平臺資源貧乏,無法運(yùn)行需要的編譯器。亦或是目標(biāo)平臺上不允許或不能夠安裝需要的編譯器。這時候就需要使用交叉編譯了。
    的頭像 發(fā)表于 12-01 13:24 ?1120次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b><b class='flag-5'>中</b>的交叉編譯詳解

    嵌入式開發(fā)測試秘訣

    嵌入式軟件開發(fā)過程中,花在測試和花在編碼的時間比通常在3:1左右(實(shí)際上可能更多)。這個比例會隨著工程師編程、測試水平的提高而不斷下降,但無論如何,軟件測試都是嵌入式軟件
    的頭像 發(fā)表于 11-24 16:18 ?494次閱讀

    c語言嵌入式開發(fā)

    電子發(fā)燒友網(wǎng)站提供《c語言嵌入式開發(fā).zip》資料免費(fèi)下載
    發(fā)表于 11-17 14:11 ?2次下載
    c語言<b class='flag-5'>嵌入式開發(fā)</b>

    嵌入式開發(fā)系統(tǒng)基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《嵌入式開發(fā)系統(tǒng)基礎(chǔ)知識.pdf》資料免費(fèi)下載
    發(fā)表于 11-17 10:59 ?11次下載
    <b class='flag-5'>嵌入式開發(fā)</b>系統(tǒng)基礎(chǔ)知識

    嵌入式開發(fā)學(xué)習(xí)路線

    電子發(fā)燒友網(wǎng)站提供《嵌入式開發(fā)學(xué)習(xí)路線.doc》資料免費(fèi)下載
    發(fā)表于 11-17 10:13 ?13次下載
    <b class='flag-5'>嵌入式開發(fā)</b>學(xué)習(xí)路線

    嵌入式開發(fā)學(xué)習(xí)路線分享

    現(xiàn)代生活,嵌入式技術(shù)已經(jīng)廣泛應(yīng)用于各個領(lǐng)域,比如以手機(jī)、智能手表、電子書等移動手持設(shè)備為代表的消費(fèi)類電子行業(yè);汽車電子行業(yè)的GPS定位導(dǎo)航;智慧醫(yī)療行業(yè)的外科手術(shù)機(jī)器人等這些都屬于嵌入式
    的頭像 發(fā)表于 11-15 11:51 ?1281次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>學(xué)習(xí)路線分享