Contiki时钟时间模块不更新

标签 c timer embedded sensors contiki

我正在尝试在 Contiki 中定期生成一些样本。我使用ctimer来生成,如下图:

PROCESS_THREAD(null_app_process, ev, data)
{
    PROCESS_BEGIN();
    printf("Sine Wave Started\n");

    app_conn_open(&nullApp_callback);

    if (node_id != 0)
    {
        ctimer_set(&ct,102,sample_fun,(void*)NULL);
    }
    PROCESS_END();
}

static void sample_fun(void)
{
    int8_t data_buf[6] = {0};
    uint8_t i;
    for(i = 0; i < 6; i++)
    {
        data_buf[i] = sinI(counter);
        counter++;
    }
    app_conn_send((uint8_t *)data_buf,6*sizeof(int8_t));
    ctimer_reset(&ct);

}

但是,样本不会定期生成,从下面的日志可以看出:

TDMA RDC: SN sends 52, 12 bytes 14202
0,165,16,
TDMA RDC: SN sends 53, 18 bytes 14458
0,166,16,
TDMA RDC: SN sends 54, 12 bytes 14714
0,167,16,
TDMA RDC: SN sends 55, 18 bytes 14970
0,168,16,
TDMA RDC: SN sends 56, 12 bytes 15226
0,169,16,
TDMA RDC: SN sends 57, 18 bytes 15482
0,170,16,
TDMA RDC: SN sends 58, 12 bytes 15738
0,171,16,
TDMA RDC: SN sends 59, 18 bytes 15994
0,172,16,
TDMA RDC: SN sends 60, 12 bytes 16250
0,173,16,
TDMA RDC: SN sends 61, 0 bytes 16257
0,174,16,
TDMA RDC: SN sends 62, 0 bytes 16257
0,175,16,
TDMA RDC: SN sends 63, 0 bytes 16257
0,176,16,
TDMA RDC: SN sends 64, 0 bytes 16257
0,177,16,
TDMA RDC: SN sends 65, 0 bytes 16257
0,178,16,
TDMA RDC: SN sends 66, 0 bytes 16257
0,179,16,
TDMA RDC: SN sends 67, 0 bytes 16257
0,180,16,
TDMA RDC: SN sends 68, 0 bytes 16257
0,181,16,
TDMA RDC: SN sends 69, 18 bytes 16506
0,182,16,
TDMA RDC: SN sends 70, 12 bytes 16762
0,183,16,
TDMA RDC: SN sends 71, 18 bytes 17018
0,184,16,
TDMA RDC: SN sends 72, 12 bytes 17274
0,185,16,
TDMA RDC: SN sends 73, 18 bytes 17530

生成样本后,SN 发送几个字节。当未生成样本时,SN 发送零字节。该行末尾的数字是时钟时间 (clock_time())。当没有生成样本时,时钟时间似乎没有更新。因此,我怀疑时钟模块在某些情况下不会更新。有人见过这个吗?如果有的话,能解释一下原因吗?

最佳答案

我正在使用 Sky mote。 @kfx 给出的建议解决了这个问题。在我的代码中,卡住期正好是 2 秒(我使用 1024 个刻度作为一秒,传输周期为 1/4 秒)。 @kfx 给出的补丁(github.com/contiki-os/contiki/pull/727)修复了这个问题,这是由于 MSP430 f1xxx 的模块不正确造成的。

关于Contiki时钟时间模块不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25544738/

相关文章:

c - 如何让 gcc 警告返回局部变量的地址?

c - 关于 _Bool 使用的 VS2013 编译问题

java - jlabel 更改其文本之前计时器暂停

jakarta-ee - CommonJ TimerManager 与 EJB3 TimerService

c - 出现错误时安全退出到特定状态

c - C 中棘手的宏

c - AVX2 1GB长阵列

以太网传输时字节顺序的变化

c# - 代码应在短暂延迟后执行一次

c -/lib/libc.so.6 : version `GLIBC_2.17' not found