您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

一种嵌入式系统的内存分配方案

时间:2007-1-20栏目:电子通信论文

>Void store; /*缓冲区指向的内存指针*/

STATUS(*createFn)(void*,ulong_t argl); /*创建缓冲区时的回调函数指针*/

STATUS(*destroyFn)(void*,ulong_targl);/*释放缓冲区时的回调函数指针*/

Ulong_t argVal;/*回调函数的参数*/

} buf_pool_t;

结构中的参数包括检查标记MAGIC、是否本地分配、空闲链表、内存指针、创建缓冲池的回调函数指针、释放时的回调函数指针、回调函数参数。

(2)相关函数

◆BufPoolInitializeStorage:分配和初始化存储区。参数包括存储区地址(如为NULL,则本地分配)、缓冲区大小、缓冲区个数。

①根据缓冲区大小和个数获得所需的内存大小。

②如果指针为NULL,则调用calloc分配内存。设置本地分配标志。

③初始化内存为0。

④初始化指针。分配的内存块最前面为缓冲池结构buf_pool_t。实际的存储区紧随其后。Buf_pool_t包含参数检查标记、是否本地分配、存储区地址、分配时回调函数、释放时回调函数、回调函数变量。此时只设置存储区指针。

◆BufPoolCreate:创建缓冲池。参数为内存制止。缓冲区尺寸和个数,创建时回调函数、释放时回调函数、回调函数参数。

①尺寸对齐。

②调用bufPoolInitializeStorage初始化内存区和buf_pool_t结构。

③用传入参数填充buf_pool_t结构。

④将缓冲区添加到空闲链表中,最后的缓冲区在最前面。

◆BufPoolDestroy:删除缓冲池。参数为buf_pool_t指针。

①检查缓冲池结构中的MAGIC字段是否被个性。

②如果是本地分配的则翻放内存区。

◆BufPoolAlloc:从缓冲池中分配一个缓冲区,参数为缓冲池结构指针。如果存在空闲缓冲区,则从空闲链表中除并提供给调用者,执行创建时回调函数。如果回调函数返回错误,则将缓冲区返还给空闲链表。

①检查缓冲池结构中的MAGIC标记是否完好。

②从空闲链表中取出头一个节点。

③如果节点不为空,清空节点,以其地址为参数调用回调函数。

④如果回调函数返回错误,则将节点还给空闲链表。

⑤返回得到空闲缓冲区地址。

◆BufPoolFree:将缓冲区返回给缓冲池。如果定义了回调函数,将在归还缓冲之间调用回调函数。参数为缓冲池结构和缓冲区指针。

①缓冲池MAGIC标记是否完好。

②如果定义回调函数、调用之。如果返回错误,则设置错误号。

③将缓冲区添加到空闲链表中头部。

注意该函数有2点:①回调函数返回错误,照样归还缓冲区。②没有检查缓冲区是否二次释放,这一点与Intel的驱动程序不同。

另外,TMS的缓冲池没有BLOCK要领,不需要判断哪个CELL属于哪个BLO

CK,简化 了操作。

上一页  [1] [2] [3] [4] [5] [6] 下一页

下页更精彩:1 2 3 4 下一页