收藏 分享(赏)

OPNET中常用函数.doc

上传人:j35w19 文档编号:7860284 上传时间:2019-05-27 格式:DOC 页数:10 大小:53.50KB
下载 相关 举报
OPNET中常用函数.doc_第1页
第1页 / 共10页
OPNET中常用函数.doc_第2页
第2页 / 共10页
OPNET中常用函数.doc_第3页
第3页 / 共10页
OPNET中常用函数.doc_第4页
第4页 / 共10页
OPNET中常用函数.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、OPNET 中常用函数1、与调度相关:(1)Evhandle op_intrpt_schedule_self(op_sim_time()+ 仿真推进的时间 T,中断码),为调用进程调度一个自中断。通过调用它,你可以设置在何时产生一次中断,然后针对中断类型,作出相应的处理。其中,参数 time 指定了中断时间,而 code 是你自己定义的一个中断标识,通过这个标识可以知道当前的中断类型。返回类型就是此中断事件的句柄。a)你可以利用这个函数来表示一次 time out。譬如,接收机正在等待接收数据包,如果 2s 后仍然没有收到相应数据,于是产生一个超时中断,便可以这样用:op_intrpt_sch

2、edule_self(op_sim_time( )+2, PKT_TIMEOUT)。如果在 2s 内收到了数据包,需要用 op_ev_cancel(PKT_TIMEOUT)来取消中断。b)另一种用法是表示一次处理延时。例如,发送方需要一定的时间来产生一个数据包,在这段时间后,才能发送数据包。比如:/* self interrupt scheduling */evh = op_intrpt_schedule_self (sch_time, 5);/* self interrupt cancelling */op_ev_cancel (evh);2、与仿真(指仿真过程)有关:(1)double o

3、p_sim_time (),获得当前的仿真时间。 .3、与事件有关:(1)Compcode op_ev_cancel(Evhandle env),取消前面已经被调度过的一个事件。返回值:OPC_COMPCODE_SUCCESS 或 OPC_COMPCODE_FAILURE。(2) Evhandle op_ev_current (),获理当前执行事件的句柄。(3)int op_ev_type (evhandle), 获得当前执行事件的类型。常用的 type 有如下所示:OPC_INTRPT_ACCESSaccess interruptOPC_INTRPT_BEGSIMbegin simulati

4、on interruptOPC_INTRPT_ENDSIMend simulation interruptOPC_INTRPT_PROCEDUREprocedure interruptOPC_INTRPT_PROCESSprocess interruptOPC_INTRPT_RECOVERnode/link recovery interruptOPC_INTRPT_REGULARregular interruptOPC_INTRPT_REMOTEremote interrupt)OPC_INTRPT_SELFself interruptOPC_INTRPT_STATstatistic inte

5、rruptOPC_INTRPT_STRMstream interrupt 4、与分配/布相关:(1)double op_dist_uniform (double limit),产生0.0-limit)的随机数。(2)Distribution* op_dist_load (const char* dist_name, double dist_arg0, double dist_arg1), 函数的返回值是:指向装入的分布的分布指针. 出错返回常量 OPC_NIL.作用是产生 arg0 到arg1 符合分布 dist_name(分布名,比如泊松)的随机数。(3)double op_dist_out

6、come(Distribution* dist_ptr), 由指定分布产生一个浮点数 .如果出错的话,返回 OPC_DBL_INVALID.5、与数据包相关(fd 为无格式包操作,nfd 为有格式包操作):(1)Packet* op_pk_create (OpT_Packet_Size bulk_size), 创建一个无格式的数据包,大小为bulk_size.返回值:返回指向新创建的数据包的指针, or OPC_NIL。(2)Packet* op_pk_create_fmt (const char* format_name), 新建一个先前定义好的格式数据包。返回指向新数据包的指针,失败返回

7、OPC_NIL。(3) void op_pk_destroy (Packet* pkptr), 销毁包,释放内存空间。(4) void op_pk_format (Packet* pkptr, char* fmt_name), 获得 pkptr 所指向的数据包的包格式类型,赋给 fmt_name。(5)Compcode op_pk_nfd_get (Packet* pkptr, const char* fd_name,void* value_ptr),作用是将pkptr 所指向的包的 fd_name 域的值读入到 value_ptr 中。返回值:如果成功,则返回相应的成功代码,失败则返回 OP

8、C_COMPCODE_FAILURE。比如:op_pk_nfd_get (pkptr, “int_value“, (5)void op_pk_send (Packet* pkptr, int outstrm_index),将 pkptr 所指向的包发送到outstrm_index 所指向的输出流中。(6)Packet* op_pk_get (int instrm_index),从 instrm_index 所指向的输入流中读入数据包,返回指向包的指针。(7)Packet* op_pk_copy (Packet* pkptr),将 pkptr 所指向的数据包复制一份,并返回指向新数据包的指针。(

9、8)Compcode op_pk_fd_get(pkptr, field_index, value_ptr), 返回值是:成功为OPC_COMPCODE_FAILURE,OPC_COMPCODE_SUCCESS otherwise 。比如:op_pk_fd_get(pkptr, 0, (9)Compcode op_pk_fd_set (Packet* pkptr, int fd_index, int type, void* value, int/double/OpT_Int64 size),作用是设定 pkptr 所指向的数据包的字段索引,字段数据类型,字段值,及大小。可用的 type 有:O

10、PC_FIELD_TYPE_INTEGER,OPC_FIELD_TYPE_INT64,OPC_FIELD_TYPE_DOUBLE,OPC_FIELD_TYPE_PACKET_ID,OPC_FIELD_TYPE_OBJECT_ID,andOPC_FIELD_TYPE_ PACKET。比如:/* create an unformatted packet */uf_pkptr = op_pk_create (64);/* assign integer fields in the packet */op_pk_fd_set (uf_pkptr, 0, OPC_FIELD_TYPE_INTEGER, 2

11、511, 16);int64_value = 5 * 200000000000;op_pk_fd_set (uf_pkptr, 1, OPC_FIELD_TYPE_INT64, int64_value, 16);./* encapsulate a higher-level packet in the packet */enc_pkptr = op_pk_create (24);op_pk_fd_set (uf_pkptr, 4, OPC_FIELD_TYPE_PACKET, enc_pkptr, -1); (10)Compcode op_pk_nfd_get_objid (Packet* pk

12、ptr, const char* fd_name, Objid* value_ptr),作用是将 pkptr 所指向的包中域名为 fd_name 的值赋给 value_ptr 所指向的地址,比如:op_pk_nfd_get_objid (pkptr, “prev node id“, (11)Compcode op_pk_nfd_set (Packet* pkptr,const char* fd_name, void* value),将 pkptr所指向的包中域名为 fd_name 域赋值为 value。比如:op_pk_nfd_set (f_pkptr, “fd_int_1“, 2511);(

13、12)void op_pk_send_forced (Packet* pkptr, int outstrm_index),立即将指定的数据包发送到指定的输入输出索引。(13)double op_pk_creation_time_get (Packet* pkptr) ,获得指定包创建的时间。(14)void op_pk_send_quiet (Packet* pkptr, int outstrm_index) ,将包发出去,当到达目的模块时不会调度一个中断或调用,由目的模块主动来发现和获取。(15)OpT_Packet_Size op_pk_bulk_size_get (Packet* pkp

14、tr),获得指定数据包的大小(以bit 记) 。如/* obtain the arriving packet */pkptr = op_pk_get (INPUT_STRM);/* determine the bulk size of the packet */bulk_size = op_pk_bulk_size_get (pkptr);/* Compute the total time required to service the packet based on its size. */* Keep track of the service time as a global statis

15、tic. */svc_time = bulk_size / svc_rate;op_stat_global_write (svc_time_glob_stat, svc_time);(15)Compcode op_pk_total_size_set (Packet* pkptr,OpT_Packet_Size total_size);给指定的数据包设定大小。如:/* create a packet to send to mac */pkptr = op_pk_create_fmt (“fddi_llc_fr“);/* assign its overall size. */op_pk_total

16、_size_set (pkptr, pklen);/* assign the time of creation */op_pk_nfd_set (pkptr, “cr_time“, op_sim_time ();(16)Compcode op_pk_total_size_get (pkptr) ,获得指定数据包的大小。(17)void op_pk_priority_set (Packet* pkptr, double value),给包设置优先级。 (18)double op_pk_priority_get (Packet* pkptr),获得包的优先级。(19)void op_pk_send

17、_delayed (pkptr, outstrm_index, delay)将 pkptr 指向的包在延时 delay 后传送到 outstrm_index 指向的输出流中。6、与统计相关:(1)void op_stat_write (Stathandle stat_handle, double value) ,将(time,value)写入到统计量中;其中 time 指当前时间,而 value 为刚刚由统计量 stat_handle 所指的值,也就是op_stat_write 函数刚写入的 value 值。(2)stathandle op_stat_reg (const char* stat

18、_name, int stat_index, int type),返回一个可以被用来指向一个进程/模型的节点或模块的统计量(局部或全局)句柄。其中,stat_index 为相关统计量的数字索引,如果没有则为 OPC_STAT_INDEX_NONE,type 指OPC_STAT_GLOBAL 或 OPC_STAT_LOCAL 。如ete_gsh=op_stat_reg(“ETE delay“,OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);op_stat_write (ete_gsh, ete_delay);/ete_delay 是计算得出的一个变量。7、与拓扑结构相关

19、:(1)Objid op_topo_parent(Objid child_objid),获得指定实体 ID 的父实体的 ID。(2)Objid op_id_self (),返回所获取的周围处理器或队列的对象 ID。8、IMA 核心函数操作对象(的属性等)(1)Compcode op_ima_obj_attr_get (objid objid,const char* attr_name, void* value_ptr),获得对象 objid 的属性域 attr_name 的值。object ID 可通过如下函数获得:op_id_self(), op_topo_parent(), op_topo

20、_child(), op_id_from_userid(), and op_id_from_name()。如:op_ima_obj_attr_get (own_id, “init_value“,op_ima_obj_attr_get(op_topo_parent(op_id_self(),“name“,my_name);9、与队列相关:子队列操作函数(1)int op_subq_pk_insert (int subq_index, Packet* pkptr,int pos_index) ,将 pkptr 所指向的数据包插入到 subq_index 队列的 pos_index 处。队列出 0

21、开始,依次增加,pos_index 可以是OPC_QPOS_HEAD,OPC_QPOS_TAIL,以及 OPC_QPOS_PRIO。返回插入情况,可以是OPC_QINS_OK, OPC_QINS_FAIL, OPC_QINS_PK_ERROR, OPC_QINS_SEL_ERROR。如 :pkptr = op_pk_get (strm_index);op_subq_pk_insert (strm_index, pkptr, OPC_QPOS_TAIL);(2)Boolean op_subq_empty (subq_index),判断队列是否为空。是空返回 OPC_TRUE,否则返回 OPC_F

22、ALSE。(3)Packet* op_subq_pk_remove (int subq_index, int pos_index),删除指定队列的指定数据包,并返回指向该删除数据包的指针。pos_index 可以是:OPC_QPOS_HEAD, OPC_QPOS_TAIL, and OPC_QPOS_PRIO。/* determine which subqueue is being accessed */subq_index = op_intrpt_code ();/* check if it is empty */if (op_subq_empty (subq_index) = OPC_FA

23、LSE)/* access the first packet in the subqueue */pkptr = op_subq_pk_remove (subq_index, OPC_QPOS_HEAD);/* forward it to the destination over requested stream */* use quiet mode to avoid causing a stream interrupt. */op_pk_send_quiet (pkptr, subq_index);(4)Packet* op_subq_pk_access (int subq_index, i

24、nt pos_index) ,返回子队列索引 subq_index所向的队列的指定位置 pos_index 处的数据包的指针。(5)void op_subq_sort (int subq_index),将子列队按包相关的优先级排序。优先级越大,越靠近队首。10、与中断有关:(1)int op_intrpt_code () ,返回与调用进程当前中断相关的中断/事件码。(2)int op_intrpt_strm (),返回与调用进程当前中断相关的流索引。(3)int op_intrpt_type () ,返回调用进程当前中断的类型。常见的类型有:OPC_INTRPT_ACCESSaccess in

25、terruptOPC_INTRPT_BEGSIMbegin simulation interruptOPC_INTRPT_ENDSIMend simulation interruptOPC_INTRPT_PROCEDUREprocedure interruptOPC_INTRPT_PROCESSprocess interruptOPC_INTRPT_RECOVERnode/link recovery interruptOPC_INTRPT_REGULARregular interruptOPC_INTRPT_REMOTEremote interrupt)OPC_INTRPT_SELFself

26、interruptOPC_INTRPT_STATstatistic interruptOPC_INTRPT_STRMstream interrupt 11、与数据流相关:(1)void* op_strm_flush (instrm_index),清除输入流中数据包。(2)int op_strm_max_index_in ()获得任何与周围进程或队列相连接的输入流的索引中的最大值。(3)Boolean op_strm_connected (int strm_type, int strm_index)判定周围处理器的指定的输入或输出流是否与一个包流实体相关联的。(4)Boolean op_strm

27、_empty (int instrm_index) 判断当前指定的输入流是否有包。(5)Compcode op_strm_access (int instrm_index)向与指定的输入流相关的模块发送一个访问中断。 /* loop through all input streams, generating an access interrupt for each */* determine the number of allocated input streams */alloc_instrms = op_strm_max_index_in ();/* loop through each a

28、llocated stream */for (i = 0; i = alloc_instrms; i+)/* if an input stream is connected, and. */if (op_strm_connected (OPC_STRM_IN, i) = OPC_TRUE)/* if an input stream is connected, access a packet from the source module. */op_strm_access (i);/* Collect and forward the packet onto the bus, if one was

29、 obtained. */if (op_strm_empty (i) = OPC_FALSE)op_pk_send (op_pk_get (i), OUTSTRM_BUS);12、与编程(Programming )有关:(1)void* op_prg_mem_alloc (size),分配指定大小的内存。如:doc_req_msg=(Doc_Req_Msg *)op_prg_mem_alloc (sizeof (Doc_Req_Msg);(2)void op_prg_mem_free (Packet* ptr),释放指定内存。(3)void* op_prg_mem_realloc (mem_ptr, size),为已存在的内存块重新分配大小。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报