【mbed】wait
2012年 04月 01日
void wait(float s)
マイクロ秒の分解能で s [sec] だけ NOP(なにもしないをする hi)で wait します.
すなわち,wait に与える引数は float 型で単位は「秒」です.具体的には
wait(1.0) or wait(0.001)
で,それぞれ1秒と1ミリ秒となりますが,
wait(0.000001)
以下は意味がないということですね.ちなみにms単位,us単位でもwaitは掛けられます.
void wait_ms(int ms)
void wait_us(int us)
が用意されています.が,引数はそれぞれ int 型(4バイト)であることに注意が必要です.
具体的には
#include "mbed.h"
DigitalOut led(LED1);
int main() {
while (1) {
led = 1;
wait(0.5);
led = 0;
wait(0.5);
}
}
とすると,0.5秒おきに LED1 が点灯,消灯を繰り返すわけですが,この中の wait(0.5) は 0.5sec の wait なので,500ms として wait_ms(500) や 500000us で wait_us(500000) でも同じ意味となります.
【追記】wait(#) には float の秒単位で 1us 分解能で数値を与えられると書かれていますが,wait_ms(#) や wait_us(#) には int しか与えられないことになっています.しかし,実際にはここに小数を入れてもコンパイルは通ります.ただ実際にちゃんと動いているかと言えばそうではありません.結論から言えば 0 を入れたのと同じ動作になりました.
まずは wait(0.2) と wait(0.2) の場合.(200ms/div)

ここで,wait(0.2) と wait_ms(200) だと...(100ms/div)

まあ妥当ですね.では wait(0.0002) と wait_ms(0.2) だとどうなるでしょう.(200us/div)

下に落ちたところが wait_ms(0.2) の部分です.ここが異常ですね.では,wait_ms(0.2) と wait_ms(0.2) ではどうでしょう.(1us/div)
