C
Qt Quick Ultraliteの内部リソースのプリロード
Qt Quick Ultraliteの内部リソースには、Controls ライブラリからアプリケーションにリンクされる、ダイヤルやボタンなどの画像データが含まれています。内部リソースは、PlatformInterface::MemoryAllocator によるプリロードには対応していません。
内部リソースは自動的にQulModuleResourceData セクションに配置されます。これらのリソースをブレンドする際のパフォーマンスを向上させるため、プラットフォームポートでは、このセクションをRAMに読み込むように設定することができます。
この例では、プリロード可能な内部リソースデータが、QSPIフラッシュメモリ領域からSDRAMにコピーされます。
リンカースクリプトでは、モジュールデータ用のシンボルおよびセクションを定義する必要があります。「QulModuleResourceData 」セクションは、Qt Quick Ultralite が内部リソースを配置するために予約されています。ユーザー指定のリソースをこのセクションに配置しないでください。
このため、リンカースクリプトでは、プリロード可能な内部リソースの送信元アドレスと宛先アドレスを含むシンボルを定義します。
QulModuleResourceData :
{
. = ALIGN(4);
__ModuleResourceDataCacheStart = .;
*(QulModuleResourceData)
. = ALIGN(4);
__ModuleResourceDataCacheEnd = .;
} > SDRAM AT> QSPI
__ModuleResourceDataStart = LOADADDR(QulModuleResourceData);__ModuleResourceDataCacheStartまた、QSPIからSDRAMへリソースをロードするには、__ModuleResourceDataCacheEnd 、および__ModuleResourceDataStart も定義する必要があります。
コピーは、DMA を使用するか、あるいは次の例に示すように、プラットフォームの初期化が呼び出された際に `memcpy ` を使用して実行できます。
...
extern unsigned char __ModuleResourceDataStart;
extern unsigned char __ModuleResourceDataCacheStart;
extern unsigned char __ModuleResourceDataCacheEnd;
memcpy(&__ModuleResourceDataCacheStart,
&__ModuleResourceDataStart,
&__ModuleResourceDataCacheEnd - &__ModuleResourceDataCacheStart); ...
#pragma section = "QulModuleResourceData"
#pragma section = "QulModuleResourceData_init"
char *__ModuleResourceDataStart = (char *) (__section_begin("QulModuleResourceData_init"));
char *__ModuleResourceDataCacheStart = (char *) (__section_begin("QulModuleResourceData"));
char *__ModuleResourceDataCacheEnd = (char *) (__section_end("QulModuleResourceData"));
memcpy(__ModuleResourceDataCacheStart,
__ModuleResourceDataStart,
(unsigned) __ModuleResourceDataCacheEnd - (unsigned) __ModuleResourceDataCacheStart);これらのセクションをデバイスのメモリにどのように配置するかについては、IARリンカースクリプトの例を必ず確認してください。
注: プリロードを使用しない場合は 、QulResourceData と同様に、QulModuleResourceData をリンカースクリプトに追加できます。この場合、__ModuleResourceData* シンボルおよびmemcpy は不要です。
特定の Qt ライセンスの下で利用可能です。
詳細はこちらをご覧ください。