前面的硬雜湊
我覺得非常棒!
神文 !
其實我的業務情況硬雜湊這樣很好的 這裡就是練筆!
我做乙個1k的記憶體儲存資料 也就是掉電儲存flash是1k 本地sram也是1k
我用malloc把乙個乙個的節點做出來 每次上電就可以flash->sram 這個樣子乙個樹 就出來了!
本文準備malloc部分
++++之前已經有了malloc模組 需要乙個池子+乙個管理表 我計畫按需分配 不要表了!就是池子!
++++我可以flash--池子完成對應 一上電全部讀出來 整個樹就好了 也可以愛護flash 只保持資料 每次上電我就建立樹
#include "gtreemalloc.h"
#include "stdio.h" //printf
//記憶體池(32位元組對齊)
__align(32) u8 mem1base[mem1_max_size]__attribute__((at(0x10000800))); //sram記憶體池
//記憶體管理表
u16 mem1mapbase[mem1_alloc_table_size] __attribute__((at(0x10000800+mem1_max_size))); //sram記憶體池map
//記憶體管理引數//對接巨集定義
const u32 memtblsize = mem1_alloc_table_size; //記憶體表大小[1024/32]
const u32 memblksize = mem1_block_size; //記憶體分塊大小
const u32 memsize = mem1_max_size; //記憶體總大小
//記憶體管理控制器
struct _m_mallco_dev mallco_dev=
;void mymemcpy(void *des,void *src,u32 n)
void mymemset(void *s,u8 c,u32 count)
//記憶體管理初始化
void my_mem_init(void)
//獲取記憶體使用率
//返回值:使用率(0~100)
u8 my_mem_perused(void)
return (offset*memblksize);//返回偏移位址
} }
return 0xffffffff;//未找到符合分配條件的記憶體塊
} //釋放記憶體(內部呼叫)
//offset:記憶體位址偏移
//返回值:0,釋放成功;1,釋放失敗;
u8 my_mem_free(u32 offset)
return 0;
}else return 2;//偏移超區了.
} //釋放記憶體(外部呼叫)
//ptr:記憶體首位址
void myfree(void *ptr)
//分配記憶體(外部呼叫)
//size:記憶體大小(位元組)
//返回值:分配到的記憶體首位址.
void *mymalloc(u32 size)
u8 used=0;
u8 *p=0;
void malloctest(void)
#ifndef __gtreemalloc_h
#define __gtreemalloc_h
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
#ifndef null
#define null 0
#endif
//mem1記憶體引數設定.mem1完全處於內部sram裡面.
#define mem1_block_size 32 //記憶體塊大小為32位元組
#define mem1_block_num 1 //約定分配多少k記憶體來做malloc功能
#define mem1_max_size mem1_block_num*1024 //最大管理記憶體 40k
#define mem1_alloc_table_size mem1_max_size/mem1_block_size //記憶體表大小
//記憶體管理控制器
struct _m_mallco_dev
;extern struct _m_mallco_dev mallco_dev; //在mallco.c裡面定義
void mymemset(void *s,u8 c,u32 count); //設定記憶體
void mymemcpy(void *des,void *src,u32 n);//複製記憶體
void my_mem_init(void); //記憶體管理初始化函式(外/內部呼叫)
u32 my_mem_malloc(u32 size); //記憶體分配(內部呼叫)
u8 my_mem_free(u32 offset); //記憶體釋放(內部呼叫)
u8 my_mem_perused(void); //獲得記憶體使用率(外/內部呼叫)
//使用者呼叫函式
void myfree(void *ptr); //記憶體釋放(外部呼叫)
void *mymalloc(u32 size); //記憶體分配(外部呼叫)
void malloctest(void);
#endif
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...
二叉樹,完全二叉樹,滿二叉樹
二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...