1. gzyueqian
      13352868059

      嵌入式開發(fā):在Micro-Python中管理堆空間

      更新時(shí)間: 2022-07-05 09:29:37來源: 粵嵌教育瀏覽量:7906

        Python變得越來越流行,現(xiàn)在實(shí)時(shí)嵌入式軟件開發(fā)人員可以通過Micro Python在微控制器上訪問Python,開發(fā)人員了解Micro Python堆比以往任何時(shí)候都更重要。嵌入式開發(fā)人員需要了解幾個(gè)與堆相關(guān)的庫(kù)和內(nèi)核選項(xiàng)。

        首先,并非所有的Micro Python端口都充分利用了微控制器中可用的RAM空間。Micro Python最初是為具有128 KB RAM的STM32F405開發(fā)的。大多數(shù)端口以STM32F405作為默認(rèn)模板,這意味著堆仍然只能分配到0x1C000字節(jié)。這看起來似乎有很多堆空間,但是Python解釋器在運(yùn)行時(shí)使用堆來分配對(duì)象和處理腳本,所以可用的堆空間越多越好!

        開發(fā)人員可以在他們的內(nèi)核鏈接器文件中查找變量_heap_end。該變量的大小應(yīng)與微控制器的RAM大小相匹配。例如,STM32F405的RAM為128 kB,has _heap_end = 0x2001C000。使用STM32F429等具有192 kB RAM的器件的開發(fā)人員會(huì)希望確保_heap_end = 0x2002C000。為堆分配額外的0x10000 64 kB內(nèi)存。進(jìn)行這種調(diào)整可以防止腳本中出現(xiàn)內(nèi)存不足的錯(cuò)誤。

        


        即使嵌入式開發(fā)人員有很多堆空間,他們也會(huì)希望定期監(jiān)控他們的堆空間使用情況,以確保堆得到有效使用。當(dāng)Python解釋器執(zhí)行它的腳本時(shí),對(duì)象將被創(chuàng)建和銷毀。有一個(gè)垃圾收集器可以回收被丟棄的對(duì)象,但有時(shí)它運(yùn)行得不夠快。隨著時(shí)間的推移,堆會(huì)變得非常零碎,幾乎無法使用。開發(fā)人員可以通過導(dǎo)入gc庫(kù)并調(diào)用collect方法來強(qiáng)制垃圾回收。

        Import gc

        gc.collect()

        在執(zhí)行期間,可以使用mem_info方法密切監(jiān)視Micro Python的內(nèi)存使用情況。調(diào)用mem_info()將打印出基本信息,如堆棧使用情況、總堆空間、已用堆空間,甚至可用塊數(shù)。當(dāng)開發(fā)人員使用詳細(xì)模式(傳入1)調(diào)用mem_info時(shí),事情變得非常有趣。當(dāng)這種情況發(fā)生時(shí),仍然提供基本信息,但是也打印出堆如何被使用的完整輸出。

        嵌入式開發(fā)人員不能忘記,即使Python運(yùn)行在微控制器上,他們編寫代碼的方式也可能會(huì)產(chǎn)生實(shí)時(shí)和內(nèi)存后果。從內(nèi)存的角度來看,在開發(fā)過程中使用mem_info是一種很好的方式,可以監(jiān)控堆的使用情況,以及堆是否會(huì)分裂到試圖分配另一個(gè)對(duì)象最終會(huì)失敗的程度。

      免費(fèi)預(yù)約試聽課

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

      
      

      1. 五月天综合缴情好婷婷网 | 久久福利网站免费视频 | 在线视频综合站 | 亚洲国产第一在线 | 亚洲精品国产综合99 | 日本亚洲欧美国产ay |