情報ありがとうございます。わたしも中の人では無いので、正確なところはわかりませんが、...
HTTPClientの場合、以下2点を修正したら動きました。
1) 初期スレッドのスタックサイズ拡張
EthernetInterfaceを使う場合、main関数はデフォルトでrtosの初期スレッド扱いになっていると思います。
デフォルトのスタックサイズは2kバイトと非常に小さいみたいで、簡単にスタックオーバーフローを
起こすと思います。
mbed-rtos/rtx/TARGET_CORTEX_A/ARM/RTX_Conf_CA.cの64行目あたりの#defineを
#define OS_MAINSTKSIZE (512*16)
として、32kバイトに拡張しました(数値の4倍がバイト数になるみたい)。
2) HTTPClientでは、tcpのsend直後にrecvしようとするとフリーズしました。
HTTPリクエストのsend後、wait(0.1) したら動きました。
もしかしたら、SMTPその他でも同様のことがあるかもしれません。
また、TCPディスコネクトした直後に、次のtcpのconnectに行くとうまくコネクトしてくれないみたいです。こちらの場合、wait(0.5)を入れて回避しました。
上記二点は、なんとなくですが、相手からのACKをきちんと受信していないうちに次の要求を出すと
だめみたいな気がしてます。
なお、最新版のEthernetInterfaceはこちらでも試してみましたが、上記の変更後では特に問題ありませんでした。
こじょう
HTTPSでWebサーバにアクセスするサンプル・プログラム作ってみました。 よかったら試してみてください。
http://developer.mbed.org/users/takashikojo/code/GR-peach-HTTPClient/
プログラムをインポートすると、必要なクラスライブラリ一式もインポートされるはず、 main.cppのSERVER_URLを適当に書き換えてコンパイルすれば動く、はずです。
以下、多少の注釈:
- mbed-rtosは、初期スレッドのスタックサイズをデフォルトより大きくしています。
- mbed-srcは特に変更してませんが、元バージョンのほうの改版が頻繁なようで、 タマタマ今の最新バージョンでは動きませんでした。ここしばらくはアップデートせず、 上記と一緒にインポートされるバージョンを使ったほうが安全みたいでした。
- HTTPClientクラスは、Cookbookのものとほぼ同様の使い方です。URLの指定が "https://,...” の場合は、ポート443へのアクセス、SSLの処理などHTTPSの処理が 走るようになっています。詳細は、http://developer.mbed.org/users/wolfSSL/code/HTTPClient/ を 参照してください。
- SSLライブラリにはwolfSSL社(www.wolfssl.com/jp)のものを使っています。 デュアルライセンスなので、社内評価、個人使用など非商用に限って無償オープンソースです。 詳しくは上記サイトに問い合わせお願いします。
こじょう