您的位置:首页 > 其它

iTron3学习笔记(一) System Calls of Memory Pool Management Functions

2008-11-07 17:33 567 查看
iTron3学习笔记(一)
System Calls of Memory Pool Management Functions

1、创建固定内存池(Create Fixed Memory Pool)
说明:在RAM中的固定位置,创建一块内存池。
函数声明:
ER vcre_mpf(ID mpfid,VP start_addr,VP end_addr,INT blfsz)
参数说明:
ID mpfid:创建内存池的ID号
VP start_addr:起始地址
VP end_addr:结束地址
INT blfsz:固定内存池的大小

2、读取内存池中申请固定内存块(Get Fixed-Size Memory Block)
说明:从内存池中申请指定ID的内存地址。
函数声明:
ER get_blf( VP *p_blf, ID mpfid );
参数说明:
VP *p_blf 申请内存指针
ID mpfid 申请内存块ID号

3、释放指定ID号申请的固定内存块(Release Fixed-size Memory Block)
说明:如果在使用后不释放内存块的话,在内存池已满时调用get_blf的任务会进入WAIT状态,直到rel_blf调用后内存池中有空内存块为止。
函数声明:
ER rel_blf(ID mpfid, VP blf)
参数说明:
ID mpfid 释放内存块ID号
VP blf 内存块起始地址指针

4、查看指定ID的内存块状态
函数声明:
ER ref_mpf(T_RMPF *pk_rmpf,ID mpfid)
参数说明:
T_RMPF *pk_rmpf:
ID mpfid

typedef struct pk_rmpf {
BOOL_ID wtsk;//进入WAIT状态的TASKID
INT frbcnt;//内存池中剩余内存块的总数
} T_RMPF;

使用例子:

#define MPF_ID 1
#define MPF_BEGINADDR 0x2300000
#define MPF_SIZE 1000
ER ret;
VP p_blk;//内存块地址
T_RMPF k_rmpf;//内存池状态

ret = vcre_mpf(MPF_ID, (VP)MPFBeginAddr, (VP)(MPF_BEGINADDR + MPF_SIZE + 8), MPF_SIZE);
if(ret == E_OK) //创建成功
{
ref_mpf(&k_rmpf, MPF_ID);
if(k_rmpf.frbcnt>0)//判断是否内存池已满
{
ret = get_blf(&p_blk, MPF_ID);//读取内存块
//数据处理....
ret = rel_blf(MPF_ID, p_plk);//释放申请内存
}
}
else if(ret == E_PAR){} //参数错误
else if(ret == E_NOEXS){} //指定的mpfid已存在或者不可用(大于最大范围)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: