C

プリロードアロケータを使用した起動時間の短縮

デバイスセットアップ段階でリソースをプリロードすることで、アプリケーションの起動時間を短縮できます。プロジェクト設定では、OnStartup のキャッシュポリシーを指定することで、アセットをデフォルトでRAMに読み込むように設定できます:ImageFiles.MCU.resourceCachePolicyMCU.Config.fontFilesCachePolicy

この例では、リンカースクリプト内の SDRAM_PRELOAD 領域を使用して、プリロード可能なリソース用に SDRAM から領域を確保します。リソースのプリロードにおいて、プリロードセクションの開始アドレスと終了アドレスを決定するために、__preloadSdramStart および__preloadSdramEnd というシンボルが定義されています:

    __preloadSdramStart = ORIGIN(SDRAM_PRELOAD);
    __preloadSdramEnd = ORIGIN(SDRAM_PRELOAD) + LENGTH(SDRAM_PRELOAD);

プラットフォーム適応の例では、リンカーシンボルへのポインタが作成されます:

extern uint8_t __preloadSdramStart;
extern uint8_t __preloadSdramEnd;
void *preloadSdramStart = &__preloadSdramStart;
void *preloadSdramEnd = &__preloadSdramEnd;

デフォルトでは、リソースはDefaultPreload 割り当てタイプを使用します。プリロードの開始アドレスと終了アドレスは、ExampleReversePreloadAllocatorによってプリロードセクションの最大サイズを決定するために使用されます。

プラットフォームコンテキスト用のメモリアロケータは、DefaultPreload タイプを処理できるように拡張する必要があります:

PlatformInterface::MemoryAllocator *ExamplePlatform::memoryAllocator(
    PlatformInterface::MemoryAllocator::AllocationType type)
{
    static ExampleMemoryAllocator exampleMemoryAllocator;
    static ExampleReversePreloadAllocator<4> examplePreloadAllocator(preloadSdramEnd, preloadSdramStart);
    static PlatformInterface::MemoryAllocator defaultMemoryAllocator;

    switch (type) {
    ...
    case PlatformInterface::MemoryAllocator::DefaultPreload:
        return &examplePreloadAllocator;
    ...

DefaultPreload 割り当てタイプ用のメモリアロケータからnullptr を返すことで、プリロードを無効にできます。

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