esp-open-rtosを使ってみる

ESP8266_RTOS_SDKとの違い

ESP8266のRTOSには、今回紹介したesp-open-rtosのほかに、Espressifが公開している ESP8266_RTOS_SDKが有ります。
esp-open-rtosは、EspressifのRTOS SDKをベースに開発されていますが、大きく異なっています。
こ ちらにRTOS SDKとの違いが紹介されています。
比較的短いページなので、全文をGoogle君に翻訳してもらいました。
分かりにくい点は原文を参照してください。

出展 https://github.com/SuperHouse/esp-open-rtos/wiki/ESP-SDK- Differences

Espressif RTOS SDK vs esp-open-rtos

esp-open-rtosは、Espressifの公式RTOS SDKといくつかの重要な点で異なります。この文書は主な違いを網羅しています。

フラッシュに保存された機能

EspressifのSDKでは、function codeはデフォルトで命令RAMに格納されています。
わずか32KBの命令RAMしかないので、ほとんどの関数はそれらをフラッシュに移動するためにICACHE_FLASH_ATTR属性で注釈を 付ける必要があります。
esp-open-rtosでは、function codeはデフォルトでフラッシュに保存されます。
高性能で頻繁に呼び出す必要があるコード、またはフラッシュがマップ解除されている間に呼び出す必要があるコードは、 common_macros.hで定義されているIRAM属性でアノテーションを付けて命令RAMに格納できます。

フラッシュに格納されたconstデータ

EspressifのSDKでは、定数データ(すべての文字列リテラルを含む)はデフォルトでデータRAMに格納されています。
たった80KBのデータRAMしかないため(stack / heap / etcを含む)、これは利用可能なRAMに大きな影響を与える可能性があります。
ICACHE_RODATA_ATTR属性を使用して一部のデータをフラッシュに移動することができますが、このデータへのアクセスは32ビット ワードの読み取りを介してのみ実行できます。
esp-open-rtosでは、RAMを節約するために、定数データ(すべての文字列リテラルを含む)がデフォルトでフラッシュに保存されま す。
例外ハンドラは32ビットワードの読み込みが必要な問題を回避するため、フラッシュに格納されたデータはRAMに格納されているかのように読み取 ることができます。
フラッシュからのデータの読み取りはRAMからの読み取りよりもまだ遅くなりますが、ほとんどのアプリケーションでは全体的な大幅な低下に気付く ことはありません(最悪の場合のベンチマーク/議論を参照)。
最大速度でアクセスする必要がある定数データが​​ある場合は、common_macros.hで定義されているRAM属性でそれに注釈を付ける か、使用する前にそれを非constメモリバッファにmemcpyすることができます。

mbedTLSライブラリ

EspressifのSDKは、暗号化されたTLS通信にaxTLSライブラリを使用しています。
esp-open-rtosは最新のmbedTLSライブラリを使用し、axTLSをバンドルしなくなりました。
mbedTLSを使用したコードの例については、examplesディレクトリを参照してください。

DHCP server

esp-open-rtosは、EspressifのSDKに含まれているものとは異なるDHCPサーバをバンドルしています。
extras / dhcpserverの下で見つけてください。
access_pointの例には、DHCPサーバーを初期化して使用するためのサンプルコードが含まれています。

新しいSDK機能がありません

esp-open-rtosはまだWiFiラジオの内部構造のような多くの低レベルの機能のためにEspressifのバイナリRTOS SDKを使います。
ライセンス上の理由から、新しいバージョンのSDK(ライセンスが変更されたもの)ではなく、Espressif RTOS SDK 0.9.9に基づいています。
これは、EspressifのSDKの新しい機能のいくつかがesp-open-rtosには見当たらないことを意味します。
あなたが特定の機能を見逃しているならば、それを追跡するために問題ページで機能要求を上げるのを遠慮なくしてください。



確かに以下のコードで改めて確認したらSDK Versionは0.9.9でした。
これ以降のバージョンは、ライセンスの関係で使えなくなったみたいです。
/* The example of esp-free-rtos
 *
 * This sample code is in the public domain.
 */
#include <stdio.h>
#include "espressif/esp_common.h"
#include "esp/uart.h"
#include "FreeRTOS.h"
#include "task.h"

#include "lwip/init.h"

void user_init(void)
{
  uart_set_baud(0, 115200);
  printf("SDK version:%s\n", sdk_system_get_sdk_version());
  printf("freeRTOS version:%s\n", tskKERNEL_VERSION_NUMBER);
  printf("NEWLIB version:%s\n", _NEWLIB_VERSION);
  printf("lwIP version:%s\n", LWIP_VERSION_STRING);
}

SDK version:0.9.9
freeRTOS version:V10.0.1
NEWLIB version:3.0.0
lwIP version:2.0.3d