コンテンツにスキップ

システム操作 - 時間パラメータ

1.1. 時間操作の概要

アプリケーション開発、特にログ(日記/記録)機能を設計する際、タイムスタンプの操作が頻繁に行われます。タイムスタンプはプログラムの実行時間や実行効率を直感的に反映することができます。

1.1.1 システム時間(時計)の確認

システム時間を確認するコマンドは以下の通りです。

1.1.1 システム時間(時計)の確認 図19

1.1.1 システム時間(時計)の確認 図19

  • date コマンドで確認できるのはシステム時間(UTC +タイムゾーン)です。現在はCSTなどに設定されています。

1.1.2 システム時間(時計)の設定

システム時間の設定には、【手動での時間設定】と【NTPによる時間設定】の2つの方法があります。

  • 【手動での時間設定】:dateコマンドを使用してシステム時間を設定できます。設定フォーマットは “yyyy-MM-dd HH:mm:ss” です。

1.1.2 システム時間(時計)の設定 図20

1.1.2 システム時間(時計)の設定 図20

  • RTCがある場合:システム時間を設定した後、「hwclock -w」を入力してハードウェアRTCに時間を書き込む必要があります。

  • 時間の変更には通常管理者権限が必要です。管理者ユーザーでない場合はコマンドの先頭に「sudo」を追加する必要があります。

  • 【NTPによる時間設定】:NTPとはネットワークタイムプロトコルのことです。インターネット上のタイムサーバーを通じて、一定の規則(ntp-clientのポリシーによって異なります)に従い、ボードの時刻を自動的に同期します。

1.1.3 RTCクロックの設定

本記事では主にシステム時間について紹介します。RTC部分(該当する場合)については、『周辺機器インターフェース使用説明/ RTC』を参照してください。

1.1.4 タイムゾーンと時刻同期サービス

  • タイムゾーン:【システムクロック】と【RTCクロック】はどちらもUTC時間を使用しています。異なる地域で使用する時間には、タイムゾーンの影響を考慮する必要があります。

  • 時刻同期サービス:【システムクロック】は手動で変更できるだけでなく、時刻同期サービスの影響も受けます。

【タイムゾーン設定】および【時刻同期サービス】について、EASY-EAI-Nano-TBの場合は『アプリケーションノート自動時刻同期とタイムゾーン設定』の記事を参照して操作を行ってください。より詳細な相互作用の仕組みについては、『システム時間管理の概要』を参照してください。

1.1.5 システム稼働時間

システムの電源投入からコマンド実行時までの稼働情報を確認します。

1.1.5 システム稼働時間 図21

1.1.5 システム稼働時間 図21

uptime コマンドで出力される情報は以下の通りです:

  • 現在のサーバー時間

  • 現在のサーバー稼働時間

  • 現在のユーザー数

  • 現在のロードアベレージ(負荷状況)

1.2. クイックスタート

1.2.1 開発環境の準備

このドキュメントを初めて読む場合は、『スタートガイド / 開発環境の準備 /Easy-Eaiコンパイル環境の準備と更新』を一読し、その手順に従ってコンパイル環境の構築を行ってください。

PC上のUbuntuシステムで runスクリプトを実行し、EASY-EAIコンパイル環境に入ります。詳細は以下の通りです。

Terminal window
cd ~/develop_environment
./run.sh 2204

1.2.2 ソースコードのダウンロードとサンプルのコンパイル

EASY-EAIコンパイル環境下で、ソースコードリポジトリを管理するディレクトリを作成します。

Terminal window
cd /opt
mkdir EASY-EAI-Toolkit
cd EASY-EAI-Toolkit
  • ダウンロードリンク: Demos.zip 上記のリンクから Demos.zip 圧縮ファイルをダウンロードし、仮想マシンの /opt/EASY-EAI-Toolkit ディレクトリにアップロードして解凍します。 対応するサンプルのディレクトリに移動し、コンパイル操作を実行します。具体的なコマンドは以下の通りです。
Terminal window
cd EASY-EAI-Toolkit-1126B/Demos/common-system_opt/
./build.sh

💡 注意 : 依存ライブラリがボード上に配置されているため、クロスコンパイル中は必ず/mnt のマウントを維持してください。

1.2.2 ソースコードのダウンロードとサンプルのコンパイル 図23

1.2.2 ソースコードのダウンロードとサンプルのコンパイル 図23

1.2.3 サンプルの実行

シリアルデバッグまたはSSHデバッグを通じてボードのバックグラウンドに入り、サンプルが配置されている場所に移動します。以下の通りです。

Terminal window
cd /userdata/Demo/common-system_opt

1.2.3 サンプルの実行 図24

1.2.3 サンプルの実行 図24

サンプルの実行コマンドは以下の通りです。

Terminal window
./test-timepara-opt

1.2.4 実行結果

実行結果は以下のようになります。

1.2.4 実行結果 図25

1.2.4 実行結果 図25

APIの詳細な説明、およびAPIの呼び出し(本サンプルのソースコード)については、以下の説明を参照してください。

1.3. 時間操作APIの説明

1.3.1 インクルード/参照方法

EASY EAI api ライブラリは、本リポジトリの easyeai-apiディレクトリにあります。お客様がローカルプロジェクトで EASY EAI apiライブラリを直接呼び出せるように、プロジェクト内でリンクする必要があるライブラリやヘッダーファイル等を以下にリストアップしています。

説明CMakeでの記述Makefileでの記述
api.cmake${common_root}/system_opt/api.cmake無し
ヘッダーファイルディレクトリ${SYSTEM_OPT_INCLUDE_DIRS}-I ../../easyeai-api/common/system_opt
ソースファイルディレクトリ${SYSTEM_OPT_SOURCE_DIRS}../../easyeai-api/common/system_opt
ライブラリファイルディレクトリ無し無し
ライブラリリンクパラメータ${SYSTEM_OPT_LIBS}無し

APIソースコードのパスはEASY-EAI-Toolkit-1126B/easyeai-api/common/system_opt/です。ユーザーはソースコードを通じてインターフェースの実装を確認でき、ソースコードを直接変更することも可能です。

1.3.2 タイムスタンプの取得(デバッグ用)

タイムスタンプ取得関数は、秒、ミリ秒、マイクロ秒を取得するために使用されます。関数のプロトタイプは以下の通りです。

uint64_t get_timeval_us();
uint64_t get_timeval_ms();
uint64_t get_timeval_s();

具体的な説明は以下の通りです。

関数名:get_timeval_us()、get_timeval_ms()、get_timeval_s()詳細
ヘッダーファイルeasyeai-api/common/system_opt/system_opt.h
入力パラメータ無し
戻り値タイムスタンプ。それぞれマイクロ秒レベル、ミリ秒レベル、秒レベル
注意事項無し

1.3.3 システム遅延(nanosleepベース)

nanosleep が呼び出されると、スレッド/プロセスは TASK_INTERRUPTIBLE状態に入り、呼び起こされるまでその状態を維持し、その後 TASK_RUNNING状態に戻ります。TASK_INTERRUPTIBLE はシグナルや wake_up()によって呼び起こすことが可能であり、シグナルを受信するとプロセスは「実行可能」状態に設定されます。スレッド/プロセスに対して秒、ミリ秒、マイクロ秒レベルの遅延(スリープ)を行います。関数のプロトタイプは以下の通りです。

uint32_t osTask_usDelay(uint32_t us);
uint32_t osTask_msDelay(uint32_t ms);
uint32_t osTask_sDelay(uint32_t s);

具体的な説明は以下の通りです。

関数名:osTask_usDelay()、osTask_msDelay()、osTask_sDelay()詳細
ヘッダーファイルeasyeai-api/common/system_opt/system_opt.h
入力パラメータ遅延時間。それぞれマイクロ秒レベル、ミリ秒レベル、秒レベル
戻り値スレッド/プロセスが予期せず呼び起こされた場合、実行されずに残った遅延時間
注意事項無し

1.3.4 システム遅延(usleepベース)

スレッド/プロセスに対してミリ秒レベルの遅延(スリープ)を行います。関数のプロトタイプは以下の通りです。

uint32_t msleep(uint32_t ms);

具体的な説明は以下の通りです。

関数名:mssleep()詳細
ヘッダーファイルeasyeai-api/common/system_opt/system_opt.h
入力パラメータ遅延時間(ミリ秒レベル)
戻り値スレッド/プロセスが予期せず呼び起こされた場合、実行されずに残った遅延時間
注意事項システムが提供する usleep や sleep を使用してマイクロ秒レベルや秒レベルの遅延を行うことも可能です

1.3.5 時間の取得

現在のシステム時間を取得します。その値は、UTC(協定世界時)の1970年1月1日00:00:00から現在までの経過秒数を表します。関数のプロトタイプは以下の通りです。

Terminal window
int get_time_stamp();

具体的な説明は以下の通りです。

関数名:get_time_stamp()詳細
ヘッダーファイルeasyeai-api/common/system_opt/system_opt.h
入力パラメータ無し
戻り値タイムスタンプ(秒レベル)
注意事項無し

1.3.6 システム日付・時間の取得

システムの日付および時間を取得する関数のプロトタイプは以下の通りです。

void get_system_date_time(uint32_t \*curDate, uint32_t \*curTime);

具体的な説明は以下の通りです。

関数名:get_system_date_time()詳細
ヘッダーファイルeasyeai-api/common/system_opt/system_opt.h
入力パラメータcurDate:年月日の順で保存される変数ポインタ
curTime:時分秒の順で保存される変数ポインタ
戻り値無し
注意事項無し

1.3.7 システム日付・時間の設定

システムの日付および時間を設定する関数のプロトタイプは以下の通りです。

Terminal window
void set_system_date_time(int year, int mon, int day, int hour, int min, int second);

具体的な説明は以下の通りです。

関数名:set_system_date_time()詳細
ヘッダーファイルeasyeai-api/common/system_opt/system_opt.h
入力パラメータyear:年
mon:月
day:日
hour:時
min:分
second:秒
戻り値無し
注意事項NTP時刻同期が有効な場合、この関数で設定した時間が上書きされることに注意してください

1.4. APIテストケース

サンプルコードのパスはEASY-EAI-Toolkit-1126B/Demos/common-system_opt/test-timepara-opt.cです。