[KOZOS]Step3(p90): 静的変数の読み書き

3rdステップは、静的変数の読み書きだ。

ポイントは次の通り。
・自動変数=関数内で宣言された変数のうち、static宣言無しの変数。スタックへ配置される。
・静的変数=自動変数でないもの。例えば、関数の外で定義された変数、関数内でもstaticで宣言された変数。データ領域やBSS領域へ配置される。(p93,98)
・静的変数は、データ領域(初期値有りの場合)、BSS領域(初期値無しの場合)のどちらかに配置される。(p93,94)
・現時点では、静的変数の配置がROM上になっているため、書き換えが出来ない。(p98)
・静的変数のRAM上への配置は、h8writeは書き込み失敗する。仮に成功してもRAMへの配置なので電源OFFにするとデータ領域(初期値有り)の初期値が消えてしまう。(p103)


対策は次の通り。(p103)
・データ領域の変数の初期値はh8writeでROM上へ書き込む。
・プログラム先頭付近で、ROMからRAMへ初期値をコピーする。
・プログラムから変数にアクセスする場合は、RAM上のコピー先アドレスにアクセスする。

これ対策してプログラム実行すると以下。

Hello World!
10
ffff
global_data = 10
global_bss = 0
static_data = 20
static_bss = 0
overwrite variables.
global_data = 20
global_bss = 30
static_data = 40
static_bss = 50


書籍p121通りに書き換えに成功してる。けど、Hello Worldの後の10、ffffは本と違う。
余計なコードが残ってたか。readelfの実行結果が書籍と違ったのはこれが原因かな。
スポンサーサイト
カレンダー
09 | 2012/10 | 11
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード