8.25 ScatterAssert 関数とロードアドレスに関連する関数

ScatterAssert 関数を使用すると、 max_size 属性で許可されているよりも複雑なサイズチェックを実行できます。

ScatterAssert(expression) 関数は、最上位またはロード領域内で使用できます。この式はリンクが完了した後で評価され、 expression が FALSE と評価された場合はエラーメッセージが生成されます。

ロードアドレスに関連する関数は、 ScatterAssert 関数内でのみ使用できます。これらの関数は、以下の 3 つのリンカ定義のシンボル値にマップされます。

表 8-3 ロードアドレスに関連する関数

関数 リンカ定義のシンボル値
LoadBase(region_name)
Load$$region_name$$Base
LoadLength(region_name)
Load$$region_name$$Length
LoadLimit(region_name)
Load$$region_name$$Limit

パラメータ region_name には、ロード領域名または実行領域名のいずれかを指定できます。前方参照は使用できません。 region_name は、既に定義されているロード領域または実行領域のみを参照できます。

次の例は、ScatterAssert 関数を使用して、領域の max_size で許可されているよりも複雑なサイズチェックを記述する方法を示しています。

LR1 0x8000 {     ER0 +0     {         *(+RO)     }     ER1 +0     {         file1.o(+RW)     }     ER2 +0     {         file2.o(+RW)     }     ScatterAssert((LoadLength(ER1) + LoadLength(ER2)) < 0x1000)                                          ; LoadLength は圧縮後のサイズ     ScatterAssert((ImageLength(ER1) + ImageLength(ER2)) < 0x2000)                                          ; ImageLength は未圧縮のサイズ } ScatterAssert(ImageLength(LR1) < 0x3000)                                           ; ロード領域 LR1 の未圧縮のサイズをチェックする
関連する概念
8.20 スキャッタファイル内の式の評価
8.21 スキャッタファイルでの式の使用
8.22 スキャッタファイル内の式の規則
8.23 スキャッタファイルで使用する実行アドレスの組み込み関数
8.26 スキャッタファイル内のシンボルに関連する関数
8.27 ロード領域に厳密に配置した状態で、実行領域でベースアドレスに合わせる例
関連する参考文書
8.2 スキャッタファイルの構文
8.4 ロード領域記述の構文
8.7 実行領域の記述に含まれている構文
6.5 Load$$ 実行領域シンボル
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.