現在arduino言語で書かれたプログラムをc言語で描き直そうとしています。
それでmillis()をc言語で書くことになったのですがどのように書けばいいのかわかりません。
リファレンスによると
「Arduinoボードがプログラムの実行を開始した時から現在までの時間をミリ秒単位で返します。約50日間でオーバーフローし、ゼロに戻ります。 」
と書いてあります。
書き直す場合プログラムを起動した時に時間を記録させる必要があって面倒なのでパソコンが起動してからの時間をミリ秒単位で返す関数を作成したいと思っています。
こんなかんじの関数を作りたいです。
os ubuntu
コンパイラ gcc
arduinoプログラムをc言語に移植する
Re: arduinoプログラムをc言語に移植する
WindowsならGetTickCountまたはTimeGetTime関数で一発なのですが、(TimeGetTime関数の方が精度が高いらしい)
Linuxだと自分の知識ではプログラムを起動したときからの時間の方が測定が簡単だと思います。【編集:下のレスの内容を調べた結果、撤回】
テストはしていません。
Linuxだと自分の知識ではプログラムを起動したときからの時間の方が測定が簡単だと思います。【編集:下のレスの内容を調べた結果、撤回】
#include <sys/time.h>
unsigned long millis(void) {
static unsigned long long start=0;
unsigned long long now;
struct timeval tv;
gettimeofday(&tv,NULL);
now=tv_sec*1000ll+tv_usec/1000;
if(start==0) {
start=now;
return 0;
} else {
return (unsigned long)(now-start);
}
}
int main(void) {
/* プログラム起動時に一度呼ぶことにより、プログラム開始時の時刻を記録する */
millis();
/* 処理 */
return 0;
}main関数を隠蔽するような特殊なライブラリを使用しているのですか?arTOc さんが書きました:プログラムを起動した時に時間を記録させる必要があって面倒なので
最後に編集したユーザー みけCAT on 2013年12月01日(日) 22:37 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: arduinoプログラムをc言語に移植する
パソコンが起動してからの時間は、Linuxではclock_gettime関数で取得できるらしいです。
コンパイルオプションに-lrtを追加してください。
情報元:http://luna2-linux.blogspot.jp/2011/11/blog-post.html
#include <time.h>
unsigned long millis(void) {
struct timespec tp;
clock_gettime(CLOCK_MONOTONIC,&tp);
return (unsigned long)(tp.tv_sec*1000ul+tp.tv_nsec/1000000);
}情報元:http://luna2-linux.blogspot.jp/2011/11/blog-post.html
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
arTOc
Re: arduinoプログラムをc言語に移植する
>main関数を隠蔽するような特殊なライブラリを使用しているのですか?
arduinoではそのようになっています。
ありがとうございました。
うまく動きました。
arduinoではそのようになっています。
ありがとうございました。
うまく動きました。