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 ライセンス下で利用可能です。
詳細はこちら。