1. 程式人生 > >一個簡單而強大的微控制器記憶體管理器-不帶記憶體碎片整理

一個簡單而強大的微控制器記憶體管理器-不帶記憶體碎片整理

微控制器簡單記憶體管理器

本程式碼基於無作業系統的STM32微控制器開發,功能強大,可申請到地址空間連續的不同大小的記憶體空間,且使用者介面簡單,使用方便

轉載請註明出處:http://blog.csdn.net/u011833609/article/details/46834203

memory.h

[cpp] view plain copy  print?
  1. #ifndef __MEMORY_H__
  2. #define __MEMORY_H__
  3. #include "stdio.h"
  4. #include "string.h"
  5. #include "includes.h"
  6. //使用者使用
  7. typedefstruct
  8. {  
  9.     void    *addr;      //申請到的記憶體的起始地址
  10.     uint32_t size;      //申請到的記憶體的大小,按照塊大小分配,大於等於申請大小
  11.     uint16_t  tb;        //申請表序號,申請記憶體時分配,釋放記憶體時使用,使用者不使用
  12. }DMEM;  
  13. //若返回空,則申請失敗
  14. DMEM *DynMemGet(uint32_t size);  
  15. void DynMemPut(DMEM *pDmem);  
  16. #endif //__MEMORY_H__

memory.c [html]
 view plain copy  print?
  1. #include "memory.h"  
  2. #define DMEM_BLOCK_SIZE         256      //記憶體塊大小為128位元組  
  3. #define DMEM_BLOCK_NUM          20       //記憶體塊個數為40個  
  4. #define DMEM_TOTAL_SIZE         (DMEM_BLOCK_SIZE*DMEM_BLOCK_NUM)    //記憶體總大小  
  5. typedef enum  
  6. {  
  7.     DMEM_FREE   = 0,  
  8.     DMEM_USED
       = 1,  
  9. }DMEM_USED_ITEM;  
  10. typedef struct  
  11. {  
  12.     DMEM_USED_ITEM   used;       //使用狀態  
  13.     uint16_t         blk_s;      //起始塊序號  
  14.     uint16_t         blk_num;    //塊個數  
  15. }DMEM_APPLY;  
  16. typedef struct  
  17. {  
  18.     DMEM_USED_ITEM  tb_blk[DMEM_BLOCK_NUM];  
  19.     DMEM            tb_user[DMEM_BLOCK_NUM];        //使用者申請記憶體資訊  
  20.     DMEM_APPLY      tb_apply[DMEM_BLOCK_NUM];       //系統分配記憶體資訊  
  21.     uint16_t        apply_num;      //記憶體申請表佔用數目  
  22.     uint16_t        blk_num;        //記憶體塊佔用數目  
  23. }DMEM_STATE;  
  24. static uint8_t DMEMORY[DMEM_TOTAL_SIZE];  
  25. static DMEM_STATE DMEMS = {0};  
[html] view plain copy  print?
  1. DMEM *DynMemGet(uint32_t size)  
  2. {  
  3.     uint16_t loop = 0

    相關推薦

    一個簡單強大微控制器記憶體管理-記憶體碎片整理

    微控制器簡單記憶體管理器 本程式碼基於無作業系統的STM32微控制器開發,功能強大,可申請到地址空間連續的不同大小的記憶體空間,且使用者介面簡單,使用方便 轉載請註明出處:http://blog.csdn.net/u011833609/article/de

    一個漂亮強大的RecyclerView

    初始化 end table eth 事件監聽 全局 pem 修改 包括 代碼地址如下:http://www.demodashi.com/demo/13470.html 簡介 主要提供了簡單易用強大的RecyclerView庫,包括自定義刷新加載效果、極簡通用的萬能適配器

    Yarn更強大的包管理

    Yarn簡介: Yarn 對你的程式碼來說是一個包管理器, 你可以通過它使用全世界開發者的程式碼, 或者分享自己的程式碼。Yarn 做這些快捷、安全、可靠,所以你不用擔心什麼。 通過Yarn你可以使用其他開發者針對不同問題的解決方案,使自己的開發過程更簡單。 使用過程中遇到問題,你

    大內高手 記憶體管理

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    實現一個簡單的marked編輯格式轉換部分功能

    首先需要在專案裡安裝marked格式編輯包 在專案根目錄下執行npm install marked 安裝依賴包 至此,package.json裡面 dependencies 已經新增     "marked": "^0.5.1", 然後在需要顯示的元件裡編寫顯示區域

    一個簡單又漂亮的404頁面原始碼

    https://www.daixiaorui.com/read/114.html<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD

    Dry:一個命令列互動式 Docker 容器管理

    Docker 是一種所謂容器化的作業系統級的虛擬化軟體。 基於 Linux 核心的 cgroup 和 names

    SLAB與SLUB 記憶體管理

    SLUB記憶體分配器 譯者按:不知道讀者朋友們有沒有誤入過 /sys/slab 目錄,進過這個嚇人的目錄之後,你可能就很想知道它到底是怎麼回事,這和 slab 記憶體分配器有關,當然,更和 SLUB 記憶體分配器相關了,/sys/slab 和 slub 一同在 2.6.2

    malloc記憶體管理記憶體釋放的解決方法

            最近在對程式測試時發現,程式在執行某項操作後記憶體有一部分不會釋放,但是,在多次執行後又不會繼續增加,執行緒數越多,多次執行同樣的操作,記憶體佔用還會增大。檢查程式碼,並沒有程式碼上的記憶體洩漏,甚是苦惱。         網上搜索發現是malloc的原因:

    C++程式設計記憶體管理記憶體池)

    一、New/malloc記憶體分配很慢 C語言中的標準庫函式malloc、free、calloc和realloc,以及C++中的new、new[]、delete和delete[] 操作符,是這兩種語言中記憶體管理的關鍵之處。(注意一下C語言裡面的是函式,在C++裡面是操作

    實現一個簡單的基於asio的定時

    定時器的精度為秒級,程式碼如下: timer.h #ifndef ASIO_TIMER_H #define ASIO_TIMER_H #include <map> #include <vector> #include <mutex> #i

    DELPHI實現的記憶體管理

      unit unitMemoryManager; interface procedure SnapCurrMemStatToFile(Filename: string); implementation uses  Windows, SysUtils, TypInfo; co

    軟體除錯23章 堆管理記憶體管理釋放的疑惑

        張銀奎老師的<軟體除錯>第23章提到可以用windbg !heap -v HeapHandle來檢視堆解除提交的粒度。我在win7 32bit機器上測試系統堆解除提交的情況,得到了不同的結果。     首先我的系統堆地址是0x360000: 0:001

    Github專案解析(十一)-->一個簡單強大的自定義廣告活動彈窗

    上一篇文章中講解了我最近寫的一個快速整合二維碼掃描庫,其核心的實現掃描的功能,是通過呼叫ZXing庫實現的。由於在實現二維碼掃描功能的時候發現整合二維碼掃描功能並不是特別方便,於是有了將其製作成標準庫的想法,這個二維碼庫能夠快速,方便的整合二維碼掃描功能,專

    一個簡單影響執行的日誌函式

    I/O操作比較耗時,在硬碟頻繁讀寫時尤其耗時,比如防毒軟體掃描,磁碟碎片整理,索引服務之類的。如果在執行效率有要求的環境下有大量I/O的話就不得不考慮如何讓I/O不影響執行。 I/O操作比如說日誌,可以輸出到DbgView,也可以輸出到檔案。當有bug時,可以告訴我們問題出

    Bandit:一種簡單強大的線上學習演算法

    假設我有5枚硬幣,都是正反面不均勻的。我們玩一個遊戲,每次你可以選擇其中一枚硬幣擲出,如果擲出正面,你將得到一百塊獎勵。擲硬幣的次數有限(比如10000次),顯然,如果要拿到最多的利益,你要做的就是儘快找出“正面概率最大”的硬幣,然後就拿它賺錢了。 這個問題看起來很數學

    關於Activity呼叫Ondestroy()方法之後記憶體管理為什麼沒有釋放佔用資源

    最近在研究activity 執行了finish之後為什麼還有很多資源沒有釋放的問題,關於這個原因的產生,最直接的想法就是activity裡面還有很多資源沒有手動釋放,因為大家知道,activity只不過是一個高度抽象的UI元件,他僅僅只是一個控制介面的功能,包括分發tou

    UiStatus一個簡單強大的AndroidUi檢視狀態控制庫.

    開發十年,就只剩下這套架構體系了! >>>   

    spark記憶體管理--MemoryManager原始碼解析

    MemoryManager記憶體管理器 記憶體管理器可以說是spark核心中最重要的基礎模組之一,shuffle時的排序,rdd快取,展開記憶體,廣播變數,Task執行結果的儲存等等,凡是需要使用記憶體的地方都需要向記憶體管理器定額申請。我認為記憶體管理器的主要作用是為了儘可能減小記憶體溢位的同時提高記憶體利

    AutoCAD 許可管理起作用,或未正確安裝,現在將關閉

    選擇 分享 log eight src ref 問題 通過 重新安裝 問題描述 重新安裝了也還是這樣,而且第二次打開都跳不出申請碼界面就關閉了。 問題原因,初步認為:AutoCAD 在首次彈出申請激活類型的類型時,直接選擇了網絡激活,而且沒有激活成功。再