2023年05月27日

pico-sdk 最適化オプション

RP2040をC言語で使用する場合にpico-sdk+pico-project-generatorを使用することが多いと思います。先日、pico-sdkを使用していて、意図通りにRP2040が動かないことがありました。この原因として最適化オプションが働いて意図せず、変数等が削除されてしまったことでした。多くはvolatile等のオプションを変数に付与することで解決しますが、プロジェクトが大きくなるとプロジェクト全体の最適化オプションを変更した方が楽な場合が多々あります。

今回はpico-sdk+pico-project-generatorでビルドのオプションを変更する方法について紹介します。多くの方法としては下記のようにcmakeの引数でビルドオプションを指定することが一般的ですが、毎回、ビルドの度に指定するのは面倒です。

cmake -DCMAKE_BUILD_TYPE=Debug -DPICO_DEOPTIMIZED_DEBUG=1
make -j4


pico-sdk+pico-project-generatoの場合、自動的にプロジェクトフォルダ内にCMakeLists.txtが生成されます。今回はプロジェクトフォルダ内のCMakeLists.txtにビルドオプションを書き込んで、ビルドオプション指定を自動化する方法を紹介します。
プロジェクトフォルダ内のCMakeLists.txtをテキストエディタで開き、先頭のset部分に下記のスクリプトを追加します。

set(CMAKE_BUILD_TYPE "Debug")
set(OPTIMIZATION_FLAG 1)

実際に書き込んだイメージは下記です。

option.jpg


なお、デフォルトは
set(OPTIMIZATION_FLAG "-Os")
になっているようでサイズ最適化のため、最適化オプションが働いて意図せず変数が削除される可能性があります。

急に意図通りにRP2040が動かなくなり、最初はpico-sdkのバージョンやcmakeのバージョン等が原因と思いましたが、結局、ビルドの最適化オプションが原因であると分かりました。eclipseベースの開発環境では簡単にビルドの最適化オプションを確認、変更できますが、cmakeベースでは気づきにくいため、注意が必要だと思いました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2023年05月13日

モバイルルータMR05LNとjava socket timeout exception

先日、5月8日から急にJavaを用いたアプリケーション(KNIME Restful API)で外部のサーバに接続できない(java.net.SocketTimeoutException)という現象が生じました。ブラウザ等ではアクセスできますが、Javaを用いたアプリケーションからは全く接続できず、当初、ファイアウォールやJava環境の問題と思いましたが、MR05LNと同じネットワーク上で別PCからも同じようにアクセスできないことが分かり、原因を調査しました。

結論を先に説明するとモバイルルータMR05LNのファームアップデート関連が関係していると判明しました。MR05LNの画面を見るとアップデート告知の表示があり、Ver.4.2.0からVer.4.3.1に更新すると通常通り外部サーバに接続できるようになりました。

iOSのテザリングやMR05LNではない別ネットワークからは接続できるものの、MR05LNのネットワークでは下記のような例外が発生し、接続できない状況でした。急に接続できなくなったのが5月8日で、モバイルルータMR05LNのファームアップデートの告知が来たのも5月8日で一致しており、Ver.4.3.1に更新すると通常通り接続できることから、ファームアップデート告知が入ると何かしらの原因でMR05LNの特定のポートや通信が制限されてしまったようです。

〜〜〜〜〜〜〜〜〜〜〜
javax.ws.rs.ProcessingException
java.util.concurrent.ExecutionException
javax.ws.rs.ProcessingException
java.net.SocketTimeoutException
〜〜〜〜〜〜〜〜〜〜〜

当初、原因がなかなか分からず、OS設定やネットワーク設定等を試行錯誤した結果、モバイルルータMR05LNが原因の可能性が高いと分かりました。モバイルルータのファーム更新をすぐに行うか、ファームウェア更新通知機能のチェックを外した方が良さそうです。その他にも原因が分かれば、また紹介したいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする