1. gzyueqian
      13352868059

      嵌入式開發:在MicroPython中優化堆的5個技巧

      更新時間: 2022-05-17 09:27:02來源: 粵嵌教育瀏覽量:8654

        多年來,嵌入式軟件開發人員一直在PC端使用Python與嵌入式系統進行交互。在過去的幾年里,Micro Python,一種可以在微控制器上運行的Python端口,越來越受歡迎。Python開發人員可能很想構建和編寫他們的Micro Python代碼,類似于他們在PC上編寫Python的方式。

        Micro Python雖然非常強大,但仍然可以在資源受限的設備上運行,這意味著開發人員需要小心他們如何編寫Python代碼。最大的潛在問題與堆、內存碎片和內存不足有關。以下是開發人員可以遵循的幾個技巧,以優化他們的堆使用并從他們的Micro Python應用程序中獲得最大收益。

        技巧1 – 使用mem_info監控堆

        Micro Python在micropython庫中包含一個名為mem_info的內存監視器。調用 mem_info將為開發人員提供堆狀態,以便他們可以確定有多少可用空間以及可以提示堆碎片程度的基本診斷。開發人員從一開始就可以做的最好的事情是使用 mem_info監視堆,以了解他們的軟件如何影響堆?;镜膍em_info輸出如下所示:

        當基本信息不夠時,開發人員可以請求詳細列表,其中提供了堆使用方式的詳細地圖。一個例子可以在下面看到:

        技巧2 – 將模塊編譯成凍結字節碼

        當開發人員創建Micro Python應用程序時,他們正在創建由Python解釋器在運行時執行的腳本。在運行時處理腳本不僅會占用堆空間,還會導致堆碎片化。開發人員可以在他們的應用程序代碼中獲取模塊并將其交叉編譯成字節碼,該字節碼與內核代碼一起存儲在閃存中。創建字節碼將導致模塊代碼從閃存執行,而不是從堆中執行。結果是使用的堆空間更少,并且堆碎片減少。常量值和字符串也可以預編譯成凍結字節碼,以防止它們占用不必要的RAM。

        技巧3 – 使用const()

        與生成可能由其他模塊導入的變量的查找相關的RAM可以通過幾種方式保存。首先,開發人員可以使用位于micropython庫中的const()。開發人員可以通過以下方式使用const():

        A = const(0x100)

        其次,在變量名_A前添加下劃線作為前綴,可以防止將變量添加到字典中,并節省一些RAM字節。雖然一開始節省的費用似乎很少,但在可能有數百個變量的大型應用程序中,節省的費用很快就會增加。

        技巧4 – 預先分配通信緩沖區

        使用Python的好處是可以根據需要在代碼中動態創建緩沖區。例如,從USB設備讀取數據時,開發人員可能會編寫類似于以下內容的代碼:

        while True:

        data = usb.read(64)



        這個應用程序的問題是,每次讀取數據時,都會在堆上創建一個新的64字節緩沖區,這為堆提供了碎片化的可能性。相反,開發人員可以通過執行以下操作預先分配緩沖區:

        buffer = bytearray(64)

        while True:

        usb.readinto(buffer)

        此應用程序代碼將一遍又一遍地使用相同的緩沖區,而不是不斷地創建和銷毀堆上的緩沖區空間。

        技巧5 – 定期調用gc.collect

        Micro Python有一個垃圾收集器,它會定期運行以將超出范圍的對象返回到堆中。雖然垃圾收集是自動的,但有時開發人員定期手動調用gc.collect或在初始化應用程序代碼后調用它會很有用。在gc.collect調用之前調用mem_info總是很有用的,然后立即查看有多少內存返回到堆中。

        結論

        Micro Python可以極大地幫助開發人員加快他們的快速原型設計甚至生產代碼開發。僅僅因為軟件是Python的,并不意味著開發人員現在可以忽略他們在C中習慣的實時約束。使用Micro Python仍然需要開發人員密切監視他們的堆并跟蹤他們是如何使用它的。忽略Micro Python應用程序中的堆肯定會導致“內存不足”錯誤和應用程序崩潰。


      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 中文字幕乱码女一区二区三区 | 日本韩国偷拍视频对白不卡高清精品 | 亚洲日韩一区精品 | 中文美女乱婬试看视频 | 亚洲成在人网站天堂日本 | 色先锋在线中文字幕资源 |