<i id="yupd0"></i>
  • <i id="yupd0"></i>
  • <thead id="yupd0"></thead>
    <blockquote id="yupd0"></blockquote>
    <i id="yupd0"></i>
  • 碼迷,www.greeshyz.com
    首頁 > 編程語言 > 詳細

    了解一下 MicroPython 的項目整體架構

    時間:2019-09-13 17:58:25      閱讀:328      評論:0      收藏:0      [點我收藏+]

    標簽:簡單   cat   自動   重要   type   follow   還需要   芯片   標準   

    今天來說說 MicroPython 的架構情況,如果有必要我會做一些源碼分析的文章供大家參考。

    先來認識一下 MicroPython 整體情況,可以從軟件的角度上去看待,首先我們拿到 MicroPython 的主倉庫。

    直接 git clone https://github.com/micropython/micropython ,在 Windows 下進行操作了解一下。

    技術圖片

    之后需要交叉編譯代碼的時候,必然會回到 Linux ,Windows 10 的發展 Linux 內核還需要一些時間,但應該也快了,屆時巨硬霸主將會攜帶跨平臺系統和云端開發服務重新降臨到開發者陣營中,拭目以待。

    目錄情況

    技術圖片

    一般來說,我們先看一下 readme.md 這里大多時候都會存放這個項目的整體情況或 build 情況。

    This is the MicroPython project, which aims to put an implementation
    of Python 3.x on microcontrollers and small embedded systems.
    You can find the official website at micropython.org.

    可知 micropython 是實現了 Python3.x 以上的 Python 語法解釋器,接著看到。

    MicroPython implements the entire Python 3.4 syntax (including exceptions,
    with, yield from, etc., and additionally async/await keywords from
    Python 3.5). The following core datatypes are provided: str (including
    basic Unicode support), bytes, bytearray, tuple, list, dict, set,
    frozenset, array.array, collections.namedtuple, classes and instances.
    Builtin modules include sys, time, and struct, etc. Select ports have
    support for _thread module (multithreading). Note that only a subset of
    Python 3 functionality is implemented for the data types and modules.

    可以看到實現了不少關鍵詞(keywords ),注意 Python3 最大的變化在于 str 和 byte 徹底分離,而 MicroPython 也為此做了很多修改,符合預期。

    然后協程相關的語法糖(yield、async、await)都支持了,with 和 in 也有,再來基本的標準庫 sys 與 time、struct 、math 等。

    最最重要的是,大量現成的基礎容器(str、bytes、bytearray、tuple、list、dict、set、btree),編寫軟件的福利鴨!

    最后就是根據芯片的 RTOS 情況提供的 _thread 多線程庫,功能上略有缺失,因為多線程的設計和 X86 的有些區別。

    but,這些特性并非所有芯片都支持,有時候,要依據不同的芯片情況,對此做裁剪處理,類似制作 linux kernel 一樣,選擇性的放入一些硬件相關的關鍵 C 驅動代碼。

    現在我們接著看很關鍵的倉庫目錄說明,可能有些過時,但這并不影響我們對它的認識。

    Major components in this repository:
    - py/ -- the core Python implementation, including compiler, runtime, and core library.
    - mpy-cross/ -- the MicroPython cross-compiler which is used to turn scripts into precompiled bytecode.
    - ports/unix/ -- a version of MicroPython that runs on Unix.
    - ports/stm32/ -- a version of MicroPython that runs on the PyBoard and similar STM32 boards (using ST's Cube HAL drivers).
    - ports/minimal/ -- a minimal MicroPython port. Start with this if you want to port MicroPython to another microcontroller.
    - tests/ -- test framework and test scripts.
    - docs/ -- user documentation in Sphinx reStructuredText format. Rendered HTML documentation is available at http://docs.micropython.org.
    
    Additional components:
    - ports/bare-arm/ -- a bare minimum version of MicroPython for ARM MCUs. Used mostly to control code size.
    - ports/teensy/ -- a version of MicroPython that runs on the Teensy 3.1 (preliminary but functional).
    - ports/pic16bit/ -- a version of MicroPython for 16-bit PIC microcontrollers.
    - ports/cc3200/ -- a version of MicroPython that runs on the CC3200 from TI.
    - ports/esp8266/ -- a version of MicroPython that runs on Espressif's ESP8266 SoC.
    - ports/esp32/ -- a version of MicroPython that runs on Espressif's ESP32 SoC.
    - ports/nrf/ -- a version of MicroPython that runs on Nordic's nRF51 and nRF52 MCUs.
    - extmod/ -- additional (non-core) modules implemented in C.
    - tools/ -- various tools, including the pyboard.py module.
    - examples/ -- a few example Python scripts.

    可以看到這些是官方做了一些架構上的說明,雖然有點亂,但也是可以窺探一二的。

    只是為了編譯使用 MicroPython 的同學,可以直接看到 ports 文件夾,這里存放著官方移植的一些對應硬件的編譯固件配置,進入到其中選擇你想要編譯的平臺,即可得到一個 MicroPython 解釋器,開始你的 Python 編程。

    如果想知道更多,我繼續往下講。

    想知道更多?

    文件夾列表大致內容如下

    • py Python 解釋器相關的抽象實現的代碼,包含運行時等等。
    • mpy-cross MicroPython 編譯器,處理 Python 代碼回 ByteCode 機器碼。
    • ports 對應平臺移植配置文件
    • tests 框架測試腳本
    • docs 配置到 Sphinx 的文檔網站
    • extmod 一些不需要在 Core 中的抽象 C 接口代碼。
    • tools 各類腳本輔助工具,例如 Pyboard.py 可以通信控制 MicroPython 。
    • examples Python 示例代碼。
    • lib 給 port 用的各自平臺的 SDK 依賴庫,可能在里面,也可能在外面,并不重要。
    • drivers 通過軟實現的硬件驅動,基于 py 的架構使用標準 C 實現的 Python 模塊(C + Python),和芯片自己提供的 SDK 略微不同,有較大的兼容性。

    對于我們做移植或做深層次的開發有兩個方向,假設不破壞官方的架構的基礎上,如何結合到現在自己手頭的硬件或者軟件。

    MicroPython 解釋器核心的基本認識

    我們需要對 MicroPython 的解釋器有一個大概的認識,這就需要初略閱讀一下 py 的結構了,關鍵的文件在 compile(python) 、 obj(alloc) 、 nlr (non-local return) 、vm(execute) 等地,總之全都很重要吧。

    因此一個解釋器的構成情況常有有代碼執行環境(堆棧)、代碼交互接口(REPL)、變量存取接口(allocator)、代碼編譯接口(compile)等。

    就我們通常的使用方法來講解吧。

    一段 Python 代碼,通過 REPL 進入解釋器的緩存中,解釋器程序將會對這段代碼進行解釋(編譯成 ByteCode),接著通過解釋后的 code 進行執行,執行時送到解釋器的函數棧上,該執行的就執行,該報異常的報異常。

    要做到這樣的效果,我們必須深入往下看才能得知具體的細節,關于 py 的部分我就暫且講到這里,之后也會單獨解釋一些 py 的源碼解釋,專門講解它的構成和 debug 或是修改源碼(bug)。

    MicroPython 的測試 & 示例

    如果我們沒有能力去修改 MicroPython ,那就要了解它的外圍代碼和測試,分別在 example 和 tests,這里有許多測試示例代碼供你應用和查閱。

    如看 run-tests-exp.sh 和 run-tests-exp.py 文件,又或是 run-tests ,這些都是自動化的測試接口腳本,通過這樣的方式可以讓 micropython 解釋器進行接口覆蓋性測試。

    自動化生成的示例如下:(均可在 Windows 或 Unix 下運行喔)

    技術圖片

    如圖所見,將在 repl 執行的 Python code 結果返回存到 .exp (example)下進行測試核對。

    了解到它的測試框架后,現在是不是對 MicroPython 稍微有了一些信心呢?接著我們還要看到真正開始使用的部分了。

    MicroPython 中各芯片標準移植接口

    這里就存放著 MicroPython 應用領域中最有價值的代碼,也就是官方提出的專用的移植接口示范,對于一般的開發者來說,足夠使用了,但對于專業的來說,不僅是使用它,包括如何移植它,改造它,修復它等等都是要了解的。

    先看一點簡單的移植示例吧 windows 、unix 、還有 minimal 文件夾。

    比如我現在在 Windows 上,使用 VS2019 直接打開 windows 的 micropython.vcxproj 文件即可編譯生成一個 micropython.exe 解釋器了,如下圖。

    技術圖片

    而 unix 則對應著 linux 或 macOS 環境下直接運行即可,我這里不想多示范了,沒有什么區別。

    但 minimal 很重要,這個是以 STM32F405 的芯片啟動流程做了一個硬件移植示范,關于如何從 main 函數初始化 py 相關資源然后鏈接 nlr 函數等等示例,這將指導你如進行 MicroPython 的移植。

    事實上,無論是 STM 還是 TI 又或是 nRF 家的芯片,都可以依次為依據進行主體的移植,然后根據周邊情況提供標準庫函數的接口,就可以完成 MicroPython 的移植,如果是嵌入式 C 類型的芯片,注意一下替代函數的對接就好了,因為 MicroPython 設計之初就足夠的抽象了,不信看看 bare-arm 的三個關鍵文件 mpconfigport.h 、 mphalport.h 、 qstrdefsport.h ,接著再看看 JavaScript 的接口,就知道我在說什么了,你完全可以把 MicroPython 當作一個解釋器接口模塊導入你的環境,其他動態語言也是如此,例如 lua 和 JerryScript 也是如此,只是 micropython 提供了太多穩定可用的模塊代碼,讓我沒得選擇了(真香。

    結語

    之后我將會以我在做的樂鑫 ESP 系列的芯片 esp8266 和 esp32 來做移植和修改的源碼解析說明,畢竟官方已經移植完了大多數主流的芯片配置項目,所以我只能做一些源碼升級和修改的說明了,那些移植直接抄過來都不是太大的問題。

    寫到這里,仔細一看 micropython 和我當年做的 ZwLib 是同樣的架構鴨,可惜我的太菜了就放棄繼續維護了,大佬不僅強,寫代碼的速度也很快,真令人頭大。

    • 撰寫時間:2019年9月2日
    • 作者名稱:junhuanchen
    • 聯系方式:
    • WeChat & Github: 作者名稱
    • QQ & E-mail: 作者名稱@qq.com

    了解一下 MicroPython 的項目整體架構

    標簽:簡單   cat   自動   重要   type   follow   還需要   芯片   標準   

    原文地址:https://www.cnblogs.com/juwan/p/11447455.html

    (0)
    (0)
       
    舉報
    評論 一句話評論(0
    登錄后才能評論!
    迷上了代碼!
    91色国产论坛,久草99福利资源,青青草在线华人,99热在线视频观看免费,青青草a片免费看,青青草av视频导航,香蕉网站伊人大香蕉 青青碰人青青草免费 国产自拍偷拍在线播放 青青草华人在线av 伊人影院在线大香 无码大香蕉网伊人色 久久大香蕉视频网 青草精品资源在线 伊人大香蕉在线精品 97资源总站久久爱视频 自拍中文字幕 青青草手机在线视频 青青草久久爱大香蕉 国产青青草自拍 伊人大香蕉在线精品 97资源总站久久爱视频 自拍中文字幕 av图片在线看 久草视频福利免费资源站 自拍国产视频在线 www.琪琪色 爱色影爱色搞搞 97资源库 大香萑a久草视频 久草在线福利资站 青青草成人在线免费视频 久久精品国can视频在热 99热国产情侣偷拍 国产自拍 在线 凹凸分类视频97免费 av啪啪中文网站 青青草91自拍视频 奇米影视第四色 国产无限制自拍 大香蕉伊人精品在线 久久手机看片国产免费 无码大香蕉网伊人色 亚洲激情色 久草99福利资源 狼人色终合网站 91色国产色去色 2019奇米777奇米网 久久草妹妹色 米奇影院888奇米色 青青青草成人免费现看 超碰自拍 在线99热这里精品 色琪琪永久无码 伊人大香蕉成人视频综合 国产自拍视频在线 大香蕉伊人久操在线 青青草久草热久久草 偷拍自拍第四色 奇米网电影网 超碰99久久天天拍日日操 天天拍天天拍久草片 激情图片,激情小说 超碰碰av大香蕉伊人 久草97大香蕉伊人 美女伊人色情香蕉网站 青青草华人免费视频在线 大香蕉伊人久草视频 奇米网在线手机在线 青草七次郞视频观看 青青草公开在线观看 狠狠夜夜干大香蕉伊人 777奇米网 日逼视频网站 欧美人和动物XXX 大香蕉色 欧美 国产 奇米影院首页 大香蕉伊人久久爱在线 青青青草免费手机播放 国产青青草 欧美一级黑寡妇夜夜干 啪啪 国产精品 东方aⅴ在线看 手机看A片 777米奇色狠狠俺去啦 香蕉网站伊人中文字幕 久操在线新免费视频 伊人影院在线大香 大香蕉成人伊人在线视频 青青草成人在线视频观看 91国产自拍偷拍视频 青青草色爱久久 精品国产自拍 小色狗 琪琪热热色无码 影音先锋大香蕉久草资源 小明视频看看成人免费 俺去了色网婷婷色 久久色情片 超碰在线青青草 超碰视频起碰视频 国产偷拍自拍影音先锋 小明视频看看成人免费 俺去了色网婷婷色 久久色情片 超碰在线青青草 超碰视频起碰视频 国产偷拍自拍影音先锋 老鸭窝在线视频 www.奇米在线四色 老版本日本怡春院 强奸乱伦在线观看 青青草在观视频 色琪琪在线视频原网 欧美色色大香焦 欧美色热图 亚洲香蕉手机在线观看视频 偷拍偷窥自拍网站 超91在线观看 最新奇米奇色777在线 婷婷网站 微拍秒拍福利视频 自拍在线 精品视频 欧美情色无码在线 久草激情视频 午夜高清影院在线观看 第四色青娱乐奇米影视 青青草在线综合 99热这里有精品 自拍偷拍影音先锋 国产自拍 先锋影音 成人在线视频97 久草在线免费观看大香蕉 99er久久国产精品在线 精品国产在线偷拍 啪啪青青草视频 国内偷拍 亚洲 大香蕉成人手机在线 在线伊人大香蕉手机版 久草伊人久草视频 伊人久久青青草综合网 青青草手机在线视频 青青草久久爱大香蕉 国产青青草自拍 伊人大香蕉在线精品 97资源总站久久爱视频 自拍中文字幕 av图片在线看 久草视频福利免费资源站 自拍国产视频在线 www.琪琪色 爱色影爱色搞搞 97资源库 大香蕉在线视频免费观看 a片直播妹子在线视频 a.v在线视频 开心五月色婷婷免费 香蕉福利视频在线观 青青草成人+激情偷拍 青青草视频大香蕉伊人网 av啪啪中文网站 青青草91自拍视频 奇米影视第四色 国产无限制自拍 大香蕉伊人精品在线 久久手机看片国产免费 无码大香蕉网伊人色 亚洲激情色 久草99福利资源 狼人色终合网站 91色国产色去色 2019奇米777奇米网 久久草妹妹色 米奇影院888奇米色 青青青草成人免费现看 超碰自拍 在线99热这里精品 色琪琪永久无码 伊人大香蕉成人视频综合 国产自拍视频在线 大香蕉伊人久操在线 青青草久草热久久草 偷拍自拍第四色 奇米网电影网 超碰99久久天天拍日日操 天天拍天天拍久草片 激情图片,激情小说 青青草久草热久久草 偷拍自拍第四色 奇米网电影网 超碰99久久天天拍日日操 天天拍天天拍久草片 操好屌色 米奇先锋 久草 偷拍 亚洲,偷拍,自拍,精品 伊人大香蕉综合色 大香蕉久久久 成人色啪啪 大香蕉色看片 欧美自拍在线 久久色综合网站xoxo 久热草大香蕉在线视频 久久大香蕉视频网 肏逼免费视频在线 网友自拍偷拍 欧美 国产 奇米影院首页 大香蕉伊人久久爱在线 青青青草免费手机播放 国产青青草 欧美一级黑寡妇夜夜干 啪啪 国产精品 东方aⅴ在线看 手机看A片 777米奇色狠狠俺去啦 香蕉网站伊人中文字幕 久操在线新免费视频 伊人影院在线大香 大香蕉成人伊人在线视频 青青草成人在线视频观看 91国产自拍偷拍视频 青青草色爱久久 精品国产自拍 小色狗 琪琪热热色无码 影音先锋大香蕉久草资源 小明视频看看成人免费 俺去了色网婷婷色 久久色情片 超碰在线青青草 欧美激情图片 自拍超碰 久草视频在线 天天 综合色伊人网 大香蕉视频成人中文网 大香蕉伊人欧美色 久热在线播放中文字幕 青青草久草福利 欧美色色大香焦 欧美色热图 亚洲香蕉手机在线观看视频 偷拍偷窥自拍网站 超91在线观看 最新奇米奇色777在线 婷婷网站 微拍秒拍福利视频 自拍在线 精品视频 欧美情色无码在线 久草激情视频 午夜高清影院在线观看 第四色青娱乐奇米影视 青青草在线综合 99热这里有精品 自拍偷拍影音先锋 国产自拍 先锋影音 成人在线视频97 久草在线免费观看大香蕉 99er久久国产精品在线
    久久草2019在线观看 99这里有精品 大香蕉免费公开青青草 狠狠色丁香婷婷综合 国产久草福利手机在线 青青草黄色三级网站 大香蕉他也啪 青青草视频大香蕉伊人网 久久爱大香焦在线视频 日本有码视频 成人视屏 国产精品91在线 91国产自拍小视频 伊人狼人香蕉网小说 青青草香蕉草久在线 av青青操 亚洲自拍欧美 91 国产 在线 97超碰资源共享 青青草伊人大香蕉 奇米四色网 国産偷拍91 精品国产在线自拍 伊人大香蕉色琪琪影院 caoprom超碰 青青视频在线视频 开心五月婷婷色婷在线 第四色色 Caoprom超碰视频 亚洲图片欧美图色姐 天天干情色网 操妹妹干妹妹 丁香五月婷婷伊人大香蕉 国产精品自拍偷拍在线 青青青成人社区 成人av在线 碰碰视频在线免费播放 影音先锋 小说色 久久草大香蕉 亚洲情色狼人网 思思久久re热线播放 久久草超碰 播播影院私人影院 大香蕉他也啪 米奇影视 成人国产老鸭窝 伊人大香蕉久久天天啪 男人的天堂 国产精品自偷拍 很很鲁在线97