Everything

_INITSCT_RH


RAM領域セクションの初期値コピーとゼロ・クリアを行います。

[所属]

標準ライブラリ

[指定形式]

#include <_h_c_lib.h>

void _INITSCT_RH(void * datatbl_start, void * datatbl_end, void * bsstbl_start, void * bsstbl_end)

[引数/戻り値]

引数

戻り値

datatbl_start :

data属性セクション初期化テーブルの先頭アドレス

datatbl_end :

data属性セクション初期化テーブルの末尾アドレス

bsstbl_start:

bss属性セクション初期化テーブルの先頭アドレス

bsstbl_end :

bss属性セクション初期化テーブルの末尾アドレス

なし

[詳細説明]

RAM領域セクションのうち,data属性セクションの初期値をROM領域からコピーし,bss属性セクションのゼロ・クリアを行います。

第1,第2引数は,data属性セクションの初期化テーブルの先頭,末尾アドレスを渡します。

第3,第4引数は,bss属性セクションの初期化テーブルの先頭,末尾アドレスを渡します。

 

第1引数>=第2引数の場合,data属性セクションの初期化を行いません。

第3引数>=第4引数の場合,bss属性セクションのゼロ・クリアを行いません。

[使用例]

struct {
        void *rom_s;    //data属性セクションのROM上の先頭アドレス
        void *rom_e;    //data属性セクションのROM上の末尾アドレス
        void *ram_s;    //data属性セクションのRAM上の先頭アドレス
} _C_DSEC[M];
 
struct {
        void *bss_s;    //bss属性セクションのRAM上の先頭アドレス
        void *bss_e;    //bss属性セクションのRAM上の末尾アドレス
} _C_BSEC[N];
 
_INITSCT_RH(_C_DSEC, _C_DSEC + M, _C_BSEC, _C_BSEC + N);

備考

.bssセクションの開始アドレスが0x100, サイズが0x50バイトであるとき,0クリアされるメモリは0x100,0x101,...,0x14e,0x14f番地ですが,初期化テーブルには0x100, 0x150と指定します。