C

プリロードアロケータを使った起動時間の改善

デバイスのセットアップ段階でリソースをプリロードすると、アプリケーションの起動時間が改善されます。プロジェクト・コンフィギュレーションでは、OnStartup キャッシュ・ポリシーを指定することで、アセットがデフォルトでRAMにロードされるように設定できます:ImageFiles.MCU.resourceCachePolicyMCU.Config.fontFilesCachePolicyを指定します。

この例では、SDRAMから、リンカ・スクリプトのSDRAM_PRELOAD領域でプリロード可能なリソースのための領域を確保します。プリロード・セクションの開始アドレスと終了アドレスを決定するために、リソースのプリロード用にシンボル__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 ライセンスの下で利用可能です。
詳細を確認してください。