highlight.js

星期一, 1月 28, 2019

MicroPython 的記憶體限制

MicroPython 由於是跑在資源有限的單晶片控制板上, 所以寫程式時必須錙銖必較, 在 MicroPython ESP8266 的文件上有提到一種作法是避免建立不必要的物件, 原文是這樣說的:

There are a number of situations where objects may unwittingly be created and destroyed. This can reduce the usability of RAM through fragmentation.

底下有舉例, 一個常見的例子就是字串的串接操作, 每次使用 '+' 來串接字串時, 就會牽涉到 3 個字串物件, '+' 號左右各一個, 以及串接後建立的新字串物件。最近就剛好遇到一個案例, 使用 urequests.get 向 OpenWeatherMap 網站查詢器項資料, 為了讓人看清楚整個參數的結構, 所以寫成這樣 (整個程式不只這樣):


結果程式一執行, 雖然可以看到結果, 但是程式結束後要回到交談模式時, ESP8266 就會當掉。只要把其中 "q=" + ... 這邊改成不要串接, 直接寫成 "q=Taipei,TW" + 就可以了, 還害我找了好久的問題。畢竟在單晶片控制板上跑的 Python 和在一般電腦上跑得不一樣, 撰寫程式時要特別小心。

4 則留言:

Unknown 提到...

你好 我看過你17年教的開機不停loop 影片,請問如果我想一開機不停重播一個mp4影片(A) ,當按鍵便播放另一個mp4影片(B), 播放完便回去不停重覆播放影片(A). 請問可以嗎?謝謝你

meebox 提到...

你是指 這篇文章嗎?如同文章中所說, 我也是跟別人學的, 借花獻佛, 就我的認知, 恐怕無法完成您的需求, 要另尋他法。

Unknown 提到...

是的, 是這篇。 那請問如果我只想外接按鈕,當正負接通便播放影片一次, 那可以嗎? 謝謝

meebox 提到...

我想是可以的, 文章中以下的指令就是播放指定的影片:

omxplayer -r 檔案路徑

你可以自行用 C++ 或是 Python 程式偵測按鈕狀態, 並利用函式庫的函式執行上述指令。不過因為我沒有做過, 所以無法提供現成的範例給您參考。