

Spresense初学者です。  
かなり根本的な質問になります。

現在私はSpresense SDKを使用し、ロボットやウォークマン（※ソニーの出している音楽再生機器のことです）のような機器の開発を行おうとしています。  
チュートリアルを進めているのものの、コンソール画面が使えないようなスタンドアローンな機器のアプリ実行の流れがわかりません。

前提として、Arduinoなどの小規模なマイコンでは原則としてプログラムは無限ループに入っており、ユーザーがアプリケーションの実行を行わずとも自動的に以下のような流れでプログラムが進んでいくと思います。

  * 初期化
  * Loop: 
    * （イベント待ち）
    * 処理
    * goto Loop

一方で、Spresenseのチュートリアルではnshを使用しているサンプルはたくさんありますが、実際のロボットや組み込み機器にはキーボードやスクリーンはありません。よって、コンソール画面に頼らない何かしらの方法でアプリを実行必要があると思います。

Spresenseの公式ページで以下のようなアプリケーションの自動起動手順が紹介されています。  
[アプリケーションの自動起動方法](https://developer.sony.com/spresense/development-
guides/sdk_tutorials_ja.html#_tips_autostart)  
この例ではinit.rcを用意する、またはエントリーポイントを設定するという方法が紹介されています。  
前者のinit.rcの方法では細かな制御は難しそうですし、エントリーポイントの方法では一つのソースファイルからすべての機能にアクセスする必要がありそうで、これまた難しそうです。

ここで質問です。  
**コンソール画面が使えない機器では、どのような手順でプログラムを開始・実行するのが通例なのでしょうか。**  
ウォークマンを例に取ると（あくまで例です）以下のような流れがあると思います。

  * ウォークマンの起動ボタンを押すまでのイベント待ち
  * 画面表示
  * ボタンの入力検出
  * 音楽の再生

質問の細かな部分でいうと、

  * **どの部分がスタートアップスクリプトまたはエントリーポイントのバイナリファイルになるのか**
  * **個々の機能は単体の実行ファイル（コマンドラインから直接呼び出せるmain関数を含む形）として用意されていてプロセス間通信のようなもので複数の実行ファイル同士が連携しているのか、すべての機能が一つの実行ファイルから呼び出され、機能一つ一つでは実行できない形（コマンドラインから呼び出せない）なのか**

また、関連して追加の質問になるのですが、SpresenseにはローダブルELFという機能があります。  
[ローダブルELFの説明](https://developer.sony.com/spresense/development-
guides/sdk_tutorials_ja.html#_%E3%83%AD%E3%83%BC%E3%83%80%E3%83%96%E3%83%ABelf%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB)  
チュートリアルそのままでうまく動かすことはできました。  
これについて質問ですが、
**ローダブルELFではコンパイル時に想定されていなかったSDカード内に格納されている実行ファイルをロードして実行することは可能なのでしょうか** 。  
過去の以下の質問を見ると、ビルド時に想定されていたアプリケーションしか実行できないようにも見えます（見当違いであればすみません）。  
[ローダブルELFのシンボル解決について](https://ja.stackoverflow.com/questions/71346/%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%AD%E3%83%BC%E3%83%80%E3%83%96%E3%83%ABelf%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%A6%E5%AE%9F%E8%A1%8C%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%99%E3%82%8B%E3%81%A8-%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84elf%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E3%81%82%E3%82%8B)  
**Spresenseでは、SDカードに格納されている実行ファイルを自由に実行することは可能なのでしょうか。**  
**そして、その場合はCファイルの中から実行するのか、スクリプトファイルから実行するのか、どちらが適切なのでしょうか。**

右も左もわからずかなり根本的な部分で詰まってしまいましたが、教えていただけるとありがたいです。  
よろしくお願いいたします。


CC BY-SA 4.0
2023-07-17T17:09:38.930
95663
2023-07-18T06:31:28.090
2023-07-18T06:31:28.090
59139
59139
question
spresense
Spresense SDKでのスタンドアローン機器のアプリ実行の流れについて


いっぱい質問がありますが SO 的には１質問に複数回答者が複数回答つける、ってのが方針らしいです。次からは１発言中には１質問にしていただけると幸い。

> コンソール画面が使えない機器では、どのような手順でプログラムを開始・実行するのが通例なのでしょうか

家電用系のリモコン（照明の・エアコンの）とかだと入力はスイッチ数個、出力は赤外線LED１個、マイコンも 4bit
なんての普通で、なのでコスト的にコンソールなど最初からあるわけがないです。こういう機器ではデバッガで内部状態を見ながらデバッグするとか、そもそもデバッガなども一切なしでオシロスコープでマイコンの出力端子の信号を見ながら机上デバッグするとかが主流です（でした？）そういうことを訊きたい？

後半の質問ですが spresense
はおいておいて一般的な組み込み機器では、出荷時に書き込まれているプログラムだけを動かすものです。外部から別途実行形式ファイルを与えるとかありえないです。性能面でも品質保証面でもセキュリティ面でも。

ソースコードを与えられても組み込み機器内に開発環境を用意するわけにはいかないのでどうしようもないってのが普通です。

逆に、その手のロボット機器上でソースコードのコンパイル・実行形式ファイルの自動差し替えが必要なのだったら、ロボット機器上に開発環境を構築する＝PCを載せる、ということです。開発当初ならあり得ても実用に供する時点では選択肢から外れるでしょう。コスト面とか消費電力面とかいろいろな観点から。

ということでつれづれなるままに回答してみましたが、あなたの期待に応えているでしょうか？期待しない回答が得られたということなら、回答しづらい質問であったということです。もうちょっと整理してみてください。


CC BY-SA 4.0
2023-07-18T05:19:12.570
95668
2023-07-18T05:19:12.570
8589
95663
answer