

現在 arduino IDEで作成したプログラムを、もう少し細かく制御したくspresense SDKに  
移植する作業をしています。  
その中で、`millis()`関数がspresense SDKには存在しない様でした。  
代わりになる関数もしくは、代替の方法をご存知でしたらご教授ください。


CC BY-SA 4.0
2020-01-22T18:28:26.493
62467
2020-01-25T11:38:59.870
2020-01-22T19:47:09.517
32986
37258
question
spresense
spresense sdk での millis関数の実装について


spresenseについては全くわかりませんが、Arduino Core
Libraryの[実装](https://github.com/sonydevworld/spresense-arduino-
compatible/blob/d9e5aa018c1624c7e3825ea84d69d01ff8094109/Arduino15/packages/SPRESENSE/hardware/spresense/1.0.0/cores/spresense/time.c#L46)を見ると、`clock_gettime`なる関数を使っているようです。これは[SDKが提供するAPIのように見える](https://github.com/sonydevworld/spresense-
nuttx/blob/33597a88e7fe6ce151ad892379d316d1fa1786e1/sched/clock/clock_gettime.c#L68)ので、これを呼ぶことができれば`millis`と同じ動作を実現できると思われます。


CC BY-SA 4.0
2020-01-23T13:52:50.747
62494
2020-01-23T13:52:50.747
37568
62467
answer


SPRESENSE の Arduino コアライブラリの time.c に次の様に実装されているようです。

[code]

    #include <time.h>
    #include <Arduino.h>
    
    ... snip ...
    
    uint64_t millis(void)
    {
        struct timespec tp;
    
        /* Wait until RTC is available */
        while (g_rtc_enabled == false);
    
        if (clock_gettime(CLOCK_MONOTONIC, &tp)) {
            return 0;
        }
    
        return (((uint64_t)tp.tv_sec) * 1000 + tp.tv_nsec / 1000000);
    }
    
[/code]

ご参考まで。


CC BY-SA 4.0
2020-01-25T11:38:59.870
62540
2020-01-25T11:38:59.870
27334
62467
answer