C
プリロードアロケータを使用した起動時間の短縮
デバイスのセットアップ段階でリソースをプリロードすることで、アプリケーションの起動時間を短縮できます。プロジェクト設定では、OnStartup のキャッシュポリシーを指定することで、アセットをデフォルトでRAMに読み込むように設定できます:ImageFiles.MCU.resourceCachePolicy、MCU.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 ライセンス下で利用可能です。
詳細はこちら。