微控制器簡單記憶體管理器
本**基於無作業系統的stm32微控制器開發。功能強大。可申請到位址空間連續的不同大小的記憶體空間,且使用者介面簡單,使用方便
memory.h
#ifndef __memory_h__
#define __memory_h__
#include "stdio.h"
#include "string.h"
#include "includes.h"
//使用者使用
typedef struct
dmem;
//若返回空。則申請失敗
dmem *dynmemget(uint32_t size);
void dynmemput(dmem *pdmem);
#endif //__memory_h__
memory.c
#include "memory.h"
#define dmem_block_size 256 //記憶體塊大小為128位元組
#define dmem_block_num 20 //記憶體塊個數為40個
#define dmem_total_size (dmem_block_size*dmem_block_num) //記憶體總大小
typedef enum
dmem_used_item;
typedef struct
dmem_state;
static uint8_t dmemory[dmem_total_size];
static dmem_state dmems = ;
dmem *dynmemget(uint32_t size)
//申請記憶體不可超過總記憶體大小
if(size > dmem_total_size)
//申請記憶體不可超過剩餘記憶體大小
if(size > (dmem_block_num - dmems.blk_num) * dmem_block_size)
//申請表必須有空餘
//計算所需連續塊的個數
blk_num_want = (size + dmem_block_size - 1) / dmem_block_size;
//尋找申請表
for(loop = 0; loop < dmem_block_num; loop++)
}//沒有找到可用申請表,理論上是不會出現此現象的,申請表剩餘已在上面校驗
if(loop == dmem_block_num)
//尋找連續記憶體塊
for(loop = 0; loop < dmem_block_num; loop++)
}if(find >= blk_num_want)
dmems.blk_num += blk_num_want;
return user;
}else}}
//搜尋整個記憶體塊,未找到大小適合的空間
return null;
}void dynmemput(dmem *user)
//釋放記憶體空間
//釋放申請表
}
乙個鬧鐘的微控制器程式
乙個鬧鐘的微控制器程式。其中蜂鳴器接p37,我的微控制器數碼管是四位共陽數碼管,接p0和p2,k1接p14,k2接p15,k3接p16,k4接p17。晶振採用12mhz。stc89c52 file clock.c include const unsigned char led7code unsign...
乙個鬧鐘的微控制器程式
乙個鬧鐘的微控制器程式。其中蜂鳴器接p37,我的微控制器數碼管是四位共陽數碼管,接p0和p2,k1接p14,k2接p15,k3接p16,k4接p17。晶振採用12mhz。stc89c52 file clock.c include const unsigned char led7code unsign...
微控制器中段程式 微控制器中乙個程式的執行過程
微控制器中乙個程式的執行過程 微控制器中乙個程式的執行過程分為取指令,分析指令和執行指令幾個步 驟。取指令的任務是 根據程式計數器 pc中的值從程式儲存器讀出現行指 令,送到指令暫存器。分析指令階段的任務是 將指令暫存器中的指令操作碼取出後進行解碼,分析其指令性質。如指令要求運算元,則尋找運算元位址...