本文主要是介绍iTron3学习笔记(一) System Calls of Memory Pool Management Functions,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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已存在或者不可用(大于最大范围)
这篇关于iTron3学习笔记(一) System Calls of Memory Pool Management Functions的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!