1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

非同期Core間でのセンサーデータの同期

Posted at

初めに

presenseの大きな特徴として、マルチコアという点があります。

このマルチコアの各コアごとに、センサーを高速で読み出しかつ信号処理などを独立して実装するとPortability や Modifiability がかなり向上するかと思います。

ただ、その場合、それらのセンサーのデータが同期できないという問題が発生しますが、これは、RTCを使うことで解決できるのでその方法を書いておきます。

ブログ(元ネタ)

この記事は、以下のブログに過去に投稿したもののまとめです。

SpresenseのRTCライブラリ

RTC(Real Time Clock)とはリアルタイムクロックの略称で、SpresenseにはすべてのCoreから読み出せるRTCがあります。

RTC.png

RTCの使い方に関しては、こちらにライブラリの説明があるのでわかりやすいです。

使い方

MainCoreの中で、起動時にRTCを設定します。

#include <RTC.h>

void setup()
{
  // Initialize RTC at first
  RTC.begin();

  // Set the temporary RTC time
  RtcTime compiledDateTime(__DATE__, __TIME__);
  RTC.setTime(compiledDateTime);
  

このように設定したRTCは、SubCore側で以下のように読み出すことができます。


#include <RTC.h>

void printClock(RtcTime &rtc)
{
  printf("%04d/%02d/%02d %02d:%02d:%02d:%08ld\n",
         rtc.year(), rtc.month(), rtc.day(),
         rtc.hour(), rtc.minute(), rtc.second(),rtc.nsec());
}

void setup()
{
  int ret = 0;

  ret = MP.begin();
  if (ret < 0) {
    errorLoop(2);
  }

  // Initialize RTC at first
  RTC.begin();
}

void loop()
{
  RtcTime now = RTC.getTime();
  printClock(now);

}

このようにRTCを取得し、この時刻をセンサーデータに付与するとで、
各データを同期させることが可能になります!

サンプルコード

SubCore1でアナログのデータを、SubCore2でI2Cセンサーのデータを非同期に取得し、それぞれにRTCのタイムスタンプをつけて、MainCoreに渡すサンプルです。

分、秒、ミリ秒までの時間を付与しています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?