RTOS: sleep



前回は、定番のLチカを実施。
その中では、
#include <unistd.h>
をインクルードし、C言語でよく使われるsleep(1)で1秒の時間で点滅させた。

今回は、スレッドの中で時間おきに処理する時に使う待たせるためのコマンドを。
Timerもむろん使えるが、nonOSなら割り込みをタイマーでかけてと処理するが、その必要性がないのでまずは、タスクを待たせる方法を身につける。

前回に従って、emptyをインポートし、適当に名前をつける。
//#include <unistd.h>
の部分をコメントアウト

#include <ti/sysbios/knl/Task.h> //to use task sleep Task.h is needed.
#include <ti/sysbios/knl/Clock.h> //of caurase, clock.h also.
を読み込む

    while (1) {
        sleep(time);
        GPIO_toggle(CONFIG_GPIO_LED_0);
    }
の所を、
    while (1) {
        Task_sleep(1000 * (1000 / Clock_tickPeriod));
        GPIO_toggle(CONFIG_GPIO_LED_0);
    }
に書き換えて、ビルトし送り込んでやる。LEDが1秒間隔て点滅する。

https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_20_01_08/exports/tirtos_full_2_20_01_08/products/tidrivers_cc13xx_cc26xx_2_20_01_10/docs/doxygen/html/_sensor_util_8h.html

Clock_tickPeriodは1000がデフォルトでは入っている(ような)ので、  結果1msec単位で時間を指定できる事になる。

#include <ti/sysbios/knl/Task.h> //to use task sleep Task.h is needed.
#include <ti/sysbios/knl/Clock.h> //of caurase, clock.h also.
#define     DELAY_MS(i)   (Task_sleep(((i) * 1000) / Clock_tickPeriod))
#define     DELAY_US(i)   (Task_sleep(((i) * 1) / Clock_tickPeriod))

として定義を入れておくと、
DELAY_MS (i)
でmsecを待つというコマンド、
DELAY_US (i)
でusec単位でスレッドを待たせられる。







コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

CH9329で日本語キーボード109で正しく表示する方法