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

来源:互联网 发布:淘宝直通车收费标准 编辑:程序博客网 时间:2024/05/16 16:12

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;

使用例子:
  1. #define MPF_ID          1   
  2. #define MPF_BEGINADDR   0x2300000
  3. #define MPF_SIZE        1000       
  4. ER ret;
  5. VP p_blk;//内存块地址
  6. T_RMPF k_rmpf;//内存池状态
  7. ret = vcre_mpf(MPF_ID, (VP)MPFBeginAddr, (VP)(MPF_BEGINADDR + MPF_SIZE + 8), MPF_SIZE);
  8. if(ret == E_OK)   //创建成功
  9. {
  10.     ref_mpf(&k_rmpf, MPF_ID); 
  11.     if(k_rmpf.frbcnt>0)//判断是否内存池已满
  12.     {
  13.         ret = get_blf(&p_blk, MPF_ID);//读取内存块
  14.         //数据处理....
  15.         ret = rel_blf(MPF_ID, p_plk);//释放申请内存
  16.     }   
  17. }
  18. else if(ret == E_PAR){}    //参数错误
  19. else if(ret == E_NOEXS){}  //指定的mpfid已存在或者不可用(大于最大范围)

原创粉丝点击