適用先: RealView C コンパイラ
質問
既存のプロジェクトを、MicroLib を使用するように変換する方法を教えてください。
プロジェクトのオプションで [Use MicroLIB] をチェックすると、RealView で以下のエラーが表示されます。
Error: L6218E: Undefined symbol __use_two_region_memory.
Error: L6218E: Undefined symbol __initial_sp.
回答
既存のプロジェクトで MicroLIB を使用するには、Startup.s モジュールを一部変更する必要があります。
まず、以下のコードを探します。
Stack_Size EQU (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + FIQ_Stack_Size + IRQ_Stack_Size + USR_Stack_Size) AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size Stack_Top EQU Stack_Mem + Stack_Size
見つけたコードを、以下のコードで置き換えます(2 行目で USR_Stack_Size が削除されていることに注意してください)。
ISR_Stack_Size
EQU (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + FIQ_Stack_Size + IRQ_Stack_Size) AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE
USR_Stack_Size __initial_sp SPACE ISR_Stack_Size Stack_Top
次に、以下のコードを探します。
MOV SP, R0 SUB SL, SP, #USR_Stack_Size
見つけたコードを、以下のコードで置き換えます。
IF :DEF:__MICROLIB EXPORT __initial_sp ELSE MOV SP, R0 SUB SL, SP, #USR_Stack_Size ENDIF
次に、以下のコードを探します。
Heap_Mem SPACE Heap_Size
見つけたコードを、以下のコードで置き換えます。
__heap_base Heap_Mem SPACE Heap_Size __heap_limit
最後に、"User Initial Stack & Heap" コメントの前に以下のコードを追加し、モジュールの END ステートメントの前に ENDIF を追加します。
IF :DEF:__MICROLIB EXPORT __heap_base EXPORT __heap_limit ELSE
関連項目
- ARMCC: エラー メッセージの説明