まず2ndステップまでの静的変数の書き換えが本当にうまくいかないことを確認。
本当にダメだ。

$OS自作してみる。





このあとは本に習うことにする。

まずメモリ構成を知らないといけないとのこと。
メモリのハードレベルを意識しないとプログラムできないということのようだ。

まず第1弾で意識しないといけないのがROMとRAMの区別と存在。

・ROM…ReadOnlyMemory
読み込み専用でプログラム側からの書き込みは不可、電源OFFでも内容保持。
ROMにはいくつか種類があるが今回使用するROMはフラッシュROMで特別な操作で内容変更可能。

・RAM…RandomAccessMemory
読み書き可能だが、電源OFFで内容が消失


H8/3069Fは、512キロバイトのフラッシュROMと16キロバイトのRAMを内蔵。
マニュアルに書いてあるがイメージはこんな感じ。
ここで注意するのはすでにアドレスが振られているようだ。


0x000000--------------------------------
    |    割込みベクタ     
0x0000ff--------------------------------
    |               
    |               
    |               
    |               
    |               
    |               
    |  内蔵ROM(5122KB)   
    |               
    |               
    |               
    |               
    |               
    |               
0x07ffff--------------------------------


0xffbf20--------------------------------
    |               
    |  内蔵RAM(16KB)  
    |               
0xffff1f--------------------------------
0xffff20--------------------------------
    |  内蔵I/Oレジスタ    
0xffffe9--------------------------------



前章で比較機を使用して好きなアドレスにマッピングできるとのことだったがそういうときはメモリが外付けされているときのものらしい。
組込みでは機器のコンパクトさが要求されるのでCPUにROMもRAMも内蔵しているとのこと。
CPUに内蔵という解釈が明確に浮かばないが、比較機がない分コンパクトにして代わりにアドレスが自由に振れないということなのだろう。




上記はメモリの構成ということで記述したが、ハードを意識した構成を示した。

で、そのメモリの特徴を意識した上でさらに領域というキーワードを意識した形でメモリの論理的な分類をしているようだ。

①テキスト領域…CPUが実行する機会語コードが置かれる
②データ領域…初期値を持つ静的変数などが置かれる
③BSS領域…初期値をもたない静的変数などが置かれる


とくにデータ領域+BSS領域のことを静的領域という。
静的領域を2つ分類する理由は起動時にメモリを確保する必要があるかないかの違いで整理できそうだ。
データ領域は起動時にメモリが確保されていて、BSS領域はプログラムの実行中に必要なら確保するということのようだ。