/* 构建定时器对象, 包括分配内存、初始化触发列表集、初始化锁并将当前时间 time 置为 0. * 此函数返回初始化好的定时器对象. */ static struct timer * timer_create_timer() { struct timer *r=(struct timer *)skynet_malloc(sizeof(struct timer)); /* 将 time 初始化为 0 */ memset(r,0,sizeof(*r)); int i,j; /* 初始化最近的触发列表集 */ for (i=0;i<TIME_NEAR;i++) { link_clear(&r->near[i]); } /* 初始化 4 级触发时间较远的触发列表集 */ for (i=0;i<4;i++) { for (j=0;j<TIME_LEVEL;j++) { link_clear(&r->t[i][j]); } } SPIN_INIT(r) /* current 以及除了 time 以外的其它时间字段还会进一步初始化 */ r->current = 0; return r; }
static int grtm_init3(struct drvmgr_dev *dev) { struct grtm_priv *priv; char prefix[32]; rtems_status_code status; priv = dev->priv; /* Do initialization */ if ( grtm_driver_io_registered == 0) { /* Register the I/O driver only once for all cores */ if ( grtm_register_io(&grtm_driver_io_major) ) { /* Failed to register I/O driver */ dev->priv = NULL; return DRVMGR_FAIL; } grtm_driver_io_registered = 1; } /* I/O system registered and initialized * Now we take care of device initialization. */ if ( grtm_device_init(priv) ) { return DRVMGR_FAIL; } /* Get Filesystem name prefix */ prefix[0] = '\0'; if ( drvmgr_get_dev_prefix(dev, prefix) ) { /* Failed to get prefix, make sure of a unique FS name * by using the driver minor. */ sprintf(priv->devName, "/dev/grtm%d", dev->minor_drv); } else { /* Got special prefix, this means we have a bus prefix * And we should use our "bus minor" */ sprintf(priv->devName, "/dev/%sgrtm%d", prefix, dev->minor_bus); } SPIN_INIT(&priv->devlock, priv->devName); /* Register Device */ status = rtems_io_register_name(priv->devName, grtm_driver_io_major, dev->minor_drv); if (status != RTEMS_SUCCESSFUL) { return DRVMGR_FAIL; } return DRVMGR_OK; }
static struct timer * timer_create_timer() { struct timer *r=(struct timer *)skynet_malloc(sizeof(struct timer)); memset(r,0,sizeof(*r)); int i,j; for (i=0;i<TIME_NEAR;i++) { link_clear(&r->near[i]); } for (i=0;i<4;i++) { for (j=0;j<TIME_LEVEL;j++) { link_clear(&r->t[i][j]); } } SPIN_INIT(r) r->current = 0; return r; }