C
从Qt for MCUs 2.3迁移到平台指南
以下是当从Qt for MCUs 1.x或2.x移植平台到Qt for MCUs 2.3或更高版本时应注意的变化。
最重要的变化是,从Qt Quick Ultralite 2.3开始,BoardDefaults.cmake
被替换为BoardDefaults.qmlprojectconfig
。但是,所有基于较旧版本的Qt Quick Ultralite(v2.0 - 2.2)的平台配置仍可继续使用CMake API。
迁移到BoardDefaults.qmlprojectconfig
将BoardDefaults.qmlprojectconfig
引入作为平台配置的默认来源,导致平台文件结构中发生了一些变化。有关此新方法的更多信息,请参阅平台移植指南。
架构构建
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
属性。有关更多信息,请参阅创建平台工具包配置文件部分。
平台目标名称
平台目标已被重命名为 QuickUltralitePlatform
为 Platform
。更新 target_sources
、target_include_directories
、target_compile_definitions
以及其他相关 CMake 命令,以使用新的目标名称。
平台 API
将以下功能的实现移动到 Qul::Platform::PlatformContext 类的子类中
- initializeHardware
- initializeDisplay
- currentTimestamp
- exec
- rand
- scheduleEngineUpdate
- frameBufferingType
- beginFrame
- endFrame
- presentFrame
- availableScreens
- layerEngine
- waitUntilAsyncReadFinished
- flushCachesForAsyncRead
- memoryAllocator
- consoleWrite
注意: 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" 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_WIDTH | QUL_PLATFORM_DEFAULT_SCREEN_WIDTH |
QUL_DEFAULT_SCREEN_HEIGHT | QUL_PLATFORM_DEFAULT_SCREEN_HEIGHT |
EXCLUDED_EXAMPLES | QUL_PLATFORM_EXCLUDED_EXAMPLES |
EXCLUDED_DEMOS | QUL_PLATFORM_EXCLUDED_DEMOS |
资源预加载
QUL_STATIC_ASSET_SEGMENT
已不再使用。预加载资产的内存现在使用从 Qul::Platform::PlatformContext 返回的内存分配器分配。
有关预加载实现的详细信息,请参阅 Qt Quick Ultralite 平台抽象中的内存分配。
资源存储位置
现在不再使用 QUL_STATIC_ASSET_SEGMENT
和 QUL_STATIC_NO_PRELOAD_ASSET_SEGMENT
。现在资源默认放置在 QulResourceData
、QulModuleResourceData
和 QulFontResourceData
段中。更多信息请参阅 入门。
定义 OS 配置
自 Qt for MCUs 2.3 以来,QUL_OS
的值可以通过两种方式指定。它可以作为选项(-DQUL_OS=<os_name>
)传递给 CMake 调用,或者将名称添加到 QUL_PLATFORM
名称的末尾,类似于所有 Qt Quick Ultralite 参考平台。例如,mimxrt1050-evk-baremetal
。
目前支持两种配置
- baremetal
- FreeRTOS
注意:自 Qt for MCUs 2.0 以来,OS
已更名为 QUL_OS
。如果您现有的端口基于低于 v2.0 的 Qt for MCUs 版本,请考虑相应地更改变量。
在某些 Qt 许可证下可用。
了解更多。