SWAP 巧妙擴充套件你的CPU記憶體

2021-06-25 15:53:44 字數 1389 閱讀 2620

swap-巧妙擴充套件你的cpu記憶體

2014 酷玩創意

低端處理器硬體資源有限,尤其是記憶體,硬體廠商在處理器配置上別會精打細算甚至斤斤計較。當然一分錢一分貨,根據實際應用需求選好晶元是非常關鍵的。有一種情況當您開發的**越來越大甚至超出了硬體配置時該怎麼辦呢?如果你不換硬體就可以嘗試swap的方法!

mcu一般不帶mmu,不使用作業系統,也就沒有記憶體管理機制了,當程式處理的資料量越來越大時記憶體越界的風險就越來越明顯。之前使用stm8做jpeg解碼就遇到程式老是棧溢位執行異常的問題,為了節省成本最終配合swap的方法還是在2k記憶體的**上成功完成解碼。

扯了半天何為swap呢,其實這個概念是從作業系統中借鑑過來的。swap就是將程式中的占用空間很大的資料先寫回fllash儲存,用的時候再從flash中讀出來。一般處理器的flash容量比記憶體大幾十倍,以stm8105為例其配置位片內ram 2k flash 32k,記憶體耗盡了 flash卻還有一大片。在這種情況想可以考慮使用swap方法解決記憶體吃緊的問題。

swap的方法首先需要對處理器的儲存器做充分了解,從flash中劃出一塊來做記憶體資料交換。一般我們從flash尾巴開始往前面計算位址,以免踩**資料。如下是我們做jpeg解碼工程時的位址定義情況:

交換flash基位址、偏移位址定義

這些基位址的偏移位址根據實際晶元平台和使用情況來定。去頂分割槽位址接下來就是資料訪問介面的問題,需要考慮8位、16位、32位;有符號、無符號資料或者資料塊的的儲存和訪問處理。

在工程中我們有如下資料結構和介面定義:

資料訪問介面

意思很明確,其中對於負數的儲存和訪問需要注意一下外其他的就不再囉嗦了貼**:

負數儲存

這種處理方法可以將記憶體擴充套件到很大,也不需增添外圍器件,對於小記憶體處理器是乙個不錯的解決方案。但必須指出相比操作記憶體資料cpu訪問flash還是非常耗時的,且flash的壽命也是有限的,頻繁操作同一區域的flash可能會減少晶元壽命。就目前來看stm8 2k記憶體完成jpeg解碼,已經算是乙個奇蹟了, 嘿嘿。

完整**工程可通過取得

更多趣味演算法、應用更新中。

openwrt 用swap來擴充套件我的記憶體

本文使用mkswap建立檔案形式的swap交換空間檔案。mkswap介紹 設定交換區 mkswap cf v0 v1 裝置名稱或檔案 交換區大小 mkswap可將磁碟分割槽或檔案設為linux的交換區。引數 c 建立交換區前,先檢查是否有損壞的區塊。f 在sparc電腦上建立交換區時,要加上此引數。...

swap分割槽的擴充套件

linux中swap 即 交換分割槽 類似於windows的虛擬記憶體,就是當記憶體不足的時候,把一部分硬碟空間虛擬成記憶體使用,從而解決記憶體容量不足的情況。swap分割槽在非高記憶體的伺服器上必不可少,但是swap不能充當記憶體使用。1.首先用磁碟管理工具fdisk開啟磁碟,然後將新建的分割槽 ...

打爆你的 CPU

這是這個煞筆 系列的最後一篇 full cpu,相對來說也比前面三個簡單一些,沒有那麼多的知識點。今天來嘗試寫一段 把 cpu 打滿,讓所有處理器的 cpu 使用率達到 100 let s do it.想要提高 cpu 的使用率就是要讓 cpu 一直在工作,單位時間內,cpu 做的工作越多 cpu ...