我正在努力在contiki 2.7上实现一个新的路由协议,我只是重写了core / net / rpl中的rpl文件。我使用example / ipv6 / rpl-udp / udp-server和udp-client来测试我在使用Sky mote的cooja上的路由协议。但是,当我使用ctimer_set函数时,它永远不会进入回调函数。代码如下所示:
void *dis_timer_init_ptr;
void rpl_init(void){
clock_time_t waiting;
srand((unsigned)clock_time());
waiting = (uint32_t)random_rand() % 60; //waiting for 1-60 s randomly
PRINTF("rpl_init, waiting %d\n",(unsigned long)clock_time());
dis_timer_init_ptr = &dis_timer_init;
ctimer_set(&dis_timer_init, CLOCK_SECOND,
handle_dis_timer,dis_timer_init_ptr);
}
和
static void
handle_dis_timer(void *ptr){
struct ctimer* ct_ptr = ptr;
clock_time_t waiting;
dis_output(NULL);
srand((unsigned long)clock_time());
waiting =random_rand() % 60; //waiting for 1-60 s randomly
PRINTF("handle_dis_time, waiting %d\n",(unsigned long)waiting);
if(has_prefix == RPL_NO_PREFIX)
ctimer_reset(ct_ptr);
}
这里rpl_init的使用位置与原来在tcpip.c第823行中的位置完全相同。使用Cooja的Variable Watcher,我发现模拟开始后的秒数为0。如果我使用原始RPL文件,时钟更新正确。那么有谁知道发生了什么?或者有没有人有类似的经历?非常感谢。