コンポーネントとsf-pkg¶
SiFliのプロジェクトでは、再利用可能なミドルウェア、ドライバー、コンポーネントがよく使われます。プロジェクトがサンプルの単純なコピーだけでは足りなくなったら、SiFliのパッケージ/コンポーネントの仕組みを使って、再利用可能なファームウェア部品を公開・管理します。
コンポーネントの考え方¶
複数の製品やサンプルで共有するコードには、コンポーネントを使います。
- 周辺機器ドライバー。
- ディスプレイパネルのサポート。
- Bluetoothサービス。
- GUIウィジェット。
- センサーアダプター。
- ストレージのヘルパー。
- 製品向けミドルウェア。
特定のアプリケーションだけで使うロジックは、インターフェースが安定し、複数のユーザーに利用されるようになるまでは、アプリケーションプロジェクト内に置いてください。
実践ワークフロー¶
- 動作するSDKサンプルから始めます。
- 再利用対象とする部分を特定します。
- 小さく、範囲の明確なAPIとして公開します。
- SDK標準のビルド/設定機構を使って設定可能にします。
- 依存関係、メモリー使用量、必要な周辺機器を文書化します。
- その後で、再利用可能なコンポーネントとしてパッケージ化します。
sf-pkgでコンポーネントを配布する¶
コンポーネントは再利用可能な設計単位です。SiFliのコンポーネントレジストリはConanベースで、SDKの現在のコマンドラインサブコマンド名はsf-pkgです。
パッケージを利用するには、SDKプロジェクトのprojectディレクトリでsdk.py sf-pkg initを実行し、conanfile.pyを作成します。requiresフィールドにpackage/version@<username>形式でパッケージ参照を追加します。<username>にはパッケージレジストリのユーザー名を指定してください。同じディレクトリでsdk.py sf-pkg installを実行します。インストールされたパッケージはproject/sf-pkgsに配置され、そのKconfigファイルはmenuconfigのSiFli External Componentsメニューに取り込まれます。
コンポーネントを公開するには、そのディレクトリでsdk.py sf-pkg new --name <package_name>を実行し、生成されたconanfile.pyを確認します。作成時に互換範囲を設定する場合は、--support-sdk-version <sdk_version_range>を追加できます。このオプションの有無にかかわらず、レシピのsupport_sdk_versionに意図したSDKバージョン範囲が指定されていることを確認し、必要に応じて調整してください。パッケージにはセマンティックバージョニングを採用し、メタデータと依存関係を記述します。レジストリへの認証後、次のコマンドでビルドしてアップロードします。
sdk.py sf-pkg build --version <version>
sdk.py sf-pkg upload --name <package_name>/<version>@<username>
具体的な手順はSDKのバージョンによって異なる場合があります。環境設定、認証、バージョンごとのコマンドについては、SiFliのパッケージ利用ガイド(中国語)、作成・公開ガイド(英語)、中国語版を参照してください。
コンポーネントの品質基準¶
次の条件を満たしたら、共有できるコンポーネントとみなせます。
- 環境と依存関係が文書化され、クリーンなチェックアウトからビルドできる。
- 最小構成のサンプルがある。
- 必要な設定が文書化されている。
- 隠れたボード依存がない。
- エラーを明確に報告する。
- グローバルリソースを使う場合は、その所有権と解放規則を明記する。
- スレッド、コールバック、メモリーの所有権に関する規則が明示されている。
記録する内容¶
再利用可能な各コンポーネントには、次の情報を記載してください。
- 対応チップとボード。
- 必要なSDKバージョン。
- 必要な周辺機器とピン。
- RTOS/ミドルウェアの必須設定。
- スレッドとコールバックの動作。
- RAM、Flash、スタックの見込み使用量。
- サンプルプロジェクトのパス。
よくある落とし穴¶
| 落とし穴 | より良い方法 |
|---|---|
| 各製品にサンプル全体をコピーする。 | 安定して再利用できる層だけを切り出す。 |
| コンポーネントのコードにピン名を埋め込む。 | 設定経由でボードのリソースを渡す。 |
| ディスプレイ/オーディオ経路が1種類だけだと想定する。 | 対応するハードウェア経路を文書化する。 |
| メモリー使用量を無視する。 | スタック、ヒープ、DMA、バッファーの要件を記録する。 |
| サンプルなしでリリースする。 | 最小構成の統合サンプルを1つ含める。 |
最終更新: