22
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ESP8266Advent Calendar 2015

Day 12

esp-open-rtosのススメ

Last updated at Posted at 2015-12-12

皆さん、ESP-WROOM-02 をお使いでしょうか。ESP-WROOM-02 を使う場合、Arduino IDEを使うのが、簡単かとおもいます。簡単なのは良いのですが、色々と開発を行う面で不都合がでてきます。

この記事では、esp-open-rtos というリアルタイムOSをオススメする理由を書きたいと思います。

リアルタイムOSの必要性

リアルタイムOSというのは、リアルタイム性のある組み込みOSです。が、ここではそのリアルタイム性には特に注目しません。
Arduino の開発をしていて不便なのは、、色々とありますが、スレッドが無いことでは無いでしょうか。それは、MPUの制限なので、どうしようもないのですが、複雑なことをすると、コードの管理が難しくなる場合が有ります。
例えば、LEDを点滅するとします。
1つだと、、

one-led-blink.ino
void loop() {
  digitalWrite(13, 1);
  delay(500);
  digitalWrite(13, 0);
  delay(500);
}

まぁ、OKなのですが、2つを別の周期で点灯させると??

two-led-blink.ino
void loop() {
  digitalWrite(13, 1);
  digitalWrite(11, 1);
  delay(250);
  digitalWrite(11, 0);
  delay(250);
  digitalWrite(11, 1);
  digitalWrite(13, 0);
  delay(250);
  digitalWrite(11, 0);
  delay(250);
}

などとなり、訳分からなくなります。もちろん、うまく書く方法もありますが、まぁ、こういった複雑性は、いつか問題になります。

いっぽう、esp-open-rtos を使うと

two-led-blink.c
#include "espressif/esp_common.h"
#include "FreeRTOS.h"
#include "task.h"
#include "esp8266.h"

void blinkenTask1(void *pvParameters)
{
    gpio_enable(gpio, GPIO_OUTPUT);
    while(1) {
        gpio_write(13, 1);
        vTaskDelay(500 / portTICK_RATE_MS);
        gpio_write(13, 0);
        vTaskDelay(500 / portTICK_RATE_MS);
    }
}

void blinkenTask2(void *pvParameters)
{
    gpio_enable(gpio, GPIO_OUTPUT);
    while(1) {
        gpio_write(11, 1);
        vTaskDelay(250 / portTICK_RATE_MS);
        gpio_write(11, 0);
        vTaskDelay(250 / portTICK_RATE_MS);
    }
}

void user_init(void)
{
    xTaskCreate(blinkenTask1, (signed char *)"blinkenTask1", 256, NULL, 2, NULL);
    xTaskCreate(blinkenTask2, (signed char *)"blinkenTask2", 256, NULL, 2, NULL);
}

と分けて書くことができます。

通常の GNU C 環境である事

Arduino IDEは、導入は簡単ですが、Make など、ビルドスクリプトを使う事が出来ません。そのため、一部のライブラリの導入のハードルは高くなっています。
一方、esp-open-rtos は、一般的な、Gnu C / Make のビルド環境で開発できます。そのため、既存のCのライブラリの取り込みが簡単です。
esp-open-rtos のソースを見ていると、移植の仕方も見当が付くかと思います。
特に、 mbedtlsの部分が分かりやすいです。

22
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?