このページでは

C

Qt for MCUs 2.3 へのプラットフォーム移行ガイド

Qt for MCUs 1.x または 2.x からQt for MCUs 2.3 以降へプラットフォームを移行する際に留意すべき変更点は以下の通りです。

最も重要な変更点は、Qt Quick Ultralite 2.3以降において、BoardDefaults.cmakeBoardDefaults.qmlprojectconfig に置き換えられたことです。ただし、旧バージョンのQt Quick Ultralite(v2.0~2.2)に基づくすべてのプラットフォーム構成については、引き続きCMake APIを使用することができます。

移行についてBoardDefaults.qmlprojectconfig

BoardDefaults.qmlprojectconfig をプラットフォーム設定のデフォルトソースとして導入したことに伴い、プラットフォームファイルの構造にいくつかの変更が生じました。この新しいアプローチの詳細については、『Platform porting guide』を参照してください。

アーキテクチャ別ビルド

Qt for MCUs ではアーキテクチャベースのビルドが採用されているため、ターゲットプラットフォームのアーキテクチャを指定することが重要です。これは、BoardArchitectureConfig.cmake 内のQUL_PLATFORM_ARCHITECTURE 変数を使用して指定できます。詳細については、「アーキテクチャおよびプラットフォーム固有のビルド設定」を参照してください。

注: Qt for MCUs 2.3以降 QUL_PLATFORM_ARCHITECTURE 変数はBoardDefaults.cmake からBoardArchitectureConfig.cmake へ移動しました。

お使いのプラットフォーム固有のコンパイラおよびリンカフラグを含む `CompilationOptions.cmake ` ファイルの名前を `platform.cmake` に変更してください。

リンカースクリプト

プラットフォームのLinkerScriptConfig.cmake ファイル内で、CMake のqul_platform_add_default_linker_script() 関数を使用して、デフォルトのリンカースクリプトを設定します。

qul_platform_add_default_linker_script("${CMAKE_CURRENT_LIST_DIR}/example-platform.ld")

以前のQt for MCUs のバージョンでは、これはLinkerScriptLoader.cmake 内のLINKER_SCRIPT 変数を使用して行われていました。

プラットフォームキットの構成ファイル

boardSdk 属性のenvVar 属性は、cmakeCacheEntries 属性に置き換えられました。詳細については、「 Qt Creator 用のプラットフォームキットファイルの作成」セクションを参照してください。

プラットフォームターゲット名

プラットフォームターゲットの名前が、QuickUltralitePlatform からPlatform に変更されました。target_sourcestarget_include_directoriestarget_compile_definitions 、およびその他の関連する CMake コマンドを更新し、新しいターゲット名を使用するようにしてください。

プラットフォーム API

以下の関数の実装を、Qul::Platform::PlatformContext クラスのサブクラスに移動してください:

注: ` availableScreens ` および `frameBufferingType ` は、const のメンバ関数である必要があります。

さらに、ハードウェアに直接関係しないプラットフォームの初期化を行うために、initializePlatform メンバ関数を追加してください。

最後に、Qul::Platform::getPlatformInstance() 関数を実装し、シングルトンのプラットフォームインスタンスへのポインタを返するようにします。

プラットフォームのプロパティ

Qt for MCUs 2.3 で導入されたプラットフォームプロパティは、プラットフォーム固有の設定を、Qt Quick Ultralite エンジン関連の設定(BoardDefaults.qmlprojectconfig ファイルで定義されているもの)から分離するためのものです。以下の例に示すように、プラットフォームのCMakeLists.txt でこれらを設定できます。

set_target_properties(Platform
    PROPERTIES
        NXP_CHIP_NAME "MIMXRT1052xxxxB"
        NXP_CONNECT_SCRIPT "RT1050_connect.scp"
        # variables cannot be expanded that's why there is "\" before "$". It will be later evaluated at CMake runtime using
        # qul_private_evaluate_path_from_target_property() function
        NXP_PARTFILES_DIR "\${QUL_PLATFORM_TARGET_DIR}/../mimxrt1050-evk-common/cmake"
        QUL_PLATFORM_EXCLUDED_DEMOS "automotive;motor_cluster"
        QUL_PLATFORM_EXCLUDED_EXAMPLES "freertos_app_switch;imagedecoder;layers;multiscreen;map"
        QUL_PLATFORM_EXCLUDED_TESTS "layers;layers_with_shapes;layer_transparency;resource_storage_section"
        QUL_PRIVATE_USE_PLATFORM_CONFIGURATION_HEADER ON
    EXPORT_PROPERTIES "NXP_CHIP_NAME;NXP_CONNECT_SCRIPT;NXP_PARTFILES_DIR;QUL_PLATFORM_EXCLUDED_DEMOS;QUL_PLATFORM_EXCLUDED_EXAMPLES;QUL_PLATFORM_EXCLUDED_TESTS"
)

利用可能なすべてのプラットフォームプロパティの一覧は、『プラットフォーム移植ガイド』に記載されています。以下の表には、名前が変更された変数のみを掲載しています:

Qt for MCUs 1.9 CMake変数名Qt for MCUs 2.xのプロパティ名
QUL_DEFAULT_SCREEN_WIDTHQUL_PLATFORM_DEFAULT_SCREEN_WIDTH
QUL_DEFAULT_SCREEN_HEIGHTQUL_PLATFORM_DEFAULT_SCREEN_HEIGHT
EXCLUDED_EXAMPLESQUL_PLATFORM_EXCLUDED_EXAMPLES
EXCLUDED_DEMOSQUL_PLATFORM_EXCLUDED_DEMOS

リソースのプリロード

QUL_STATIC_ASSET_SEGMENT は使用されなくなりました。代わりに、プリロードされたアセット用のメモリは、Qul::Platform::PlatformContext から返されるメモリアロケータを使用して割り当てられます。

プリロードの実装方法の詳細については、Qt Quick Ultralite プラットフォーム抽象化』の「メモリ割り当て」を参照してください。

リソースの保存場所

QUL_STATIC_ASSET_SEGMENT およびQUL_STATIC_NO_PRELOAD_ASSET_SEGMENT を使用する代わりに、リソースはデフォルトでQulResourceDataQulModuleResourceData 、およびQulFontResourceData セグメントに配置されるようになりました。詳細については、「プロジェクトの設定」を参照してください。

OS構成の定義

Qt for MCUs 2.3 以降、QUL_OS の値は 2 つの方法で指定できるようになりました。CMake 呼び出しのオプション(-DQUL_OS=<os_name> )として渡すか、すべてのQt Quick Ultralite リファレンスプラットフォームと同様に、QUL_PLATFORM の名前の末尾に名前を追加する方法です。例:mimxrt1050-evk-baremetal

現在、サポートされている構成は以下の2つだけです:

  • baremetal
  • FreeRTOS

注: Qt for MCUs 2.0以降 OSQUL_OS に名称変更されました。既存のポートがv2.0より古いバージョンのQt for MCUs に基づいている場合は、変数を適宜変更することを検討してください。

特定の Qt ライセンスの下で利用可能です。
詳細はこちら。