アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語でタイマーを使ってprintf文を記述することで
「1秒経過」、「2秒経過」、「3秒経過」のように表示させたいのですが、どのように表示させるのでしょうか?
タイマーの間隔は、できれば1 [ms]だとうれしいてす。
回答お願いします

A 回答 (4件)

> まずはC言語のプログラミングでの動作を実証してみてから、


> マイコンへの書き込みを考えています。

といわれても、処理のロジックをパソコンのCで実証するということはありますけど、タイマのようなシステムよりというか、ハードウエアよりのものは、なかなか。

とはいえ、パソコンで秒単位ということであれば、

#include <stdio.h>
#include <time.h>

int main()
{
time_t last = time(0);
time_t next;
int pastSec = 0;

while(1)
{
if (time(&next) != last)
{ last = next;
pastSec++;
printf("%d 秒経過\n", pastSec);
}
}

return 0;
}

こんなので可能です。
同じように標準の time.h や time() 関数があれば、同じように動きますが。

と書きましたが、実際の所、このコードも、http://oshiete.goo.ne.jp/qa/6396223.html で書いたコードもそっくりさんではあるのですね。

time() 関数が1秒ごとに異なる数値を返せば、とりあえず、このプログラムは動くわけです。
たとえば、


volatile int m10Count;

void m10Int() // この関数は 10ms 間隔で割り込まれる
{
m10Count++;
m10Count %= 10000; // オーバーフロー対策(時間の長さによってはこれ必須)
}

time_t time(time_t *timer)
{
*timer = m10Count / 100;
return *timer;
}

とすれば、1秒単位程度であれば、main() は、同じコードで動かすことができます。
    • good
    • 0

> 指摘された質問と同じものです。


> まずはC言語のプログラミングでの動作を実証してみてから、
> マイコンへの書き込みを考えています。

なんとなく。

本当に必要なのは,C言語でどうこうではなくて,
マイコンの周辺デバイスの使い方とか,レジスタの設定の仕方といった,
低レベル(ハードウェアに近いという意味です)な話ではないのでしょうか?
    • good
    • 1

処理系に依存した方法になります。



どのような環境でしょうか?

↓と関係ありますか?
http://oshiete.goo.ne.jp/qa/6396223.html

この回答への補足

何度も回答ありがとうございます。
指摘された質問と同じものです。
まずはC言語のプログラミングでの動作を実証してみてから、
マイコンへの書き込みを考えています。

補足日時:2010/12/21 11:17
    • good
    • 0

幾つかの課題がある。


まず、printfで書くというのは、表示ごとに行を進めていくの? それとも同じ位置で数値だけ書き換えるの? 前者だったら、タイマ周期でprintfを呼び出すだけ。後者だとコンソール依存になる。コンソールの持つカーソル制御機能を使うので。
次に、タイマーの周期。1秒周期だとsleep関数などで比較的簡単に実装できる。ミリ秒単位だとリアルタイムOSでないとタイマー待ちでは難しい。OSの最小タイマ刻みが10ミリ秒とかいうことが平気であるので。そうすると待てないのでループで時刻を監視して表示更新(いわゆるビジーウェイト)という方式になるが、これでもディスクアクセスなどOS処理にCPUが取られて1ミリ秒周期を守り続けることは難しくなる。
    • good
    • 0
この回答へのお礼

すばやい回答ありがとうございます。

最初にprintf文は表示ごとに行を進めたいと思っています。
また、タイマーの周期なのですが、1秒が簡単にできるのであれば、まずは周期1秒からはじめてみたいと考えています。
プログラムのソースの例だけでも、よろしかったら記述お願いします。

お礼日時:2010/12/20 17:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!