2ndステップでシリアル・ドライバまでの動作を確認してライブラリも充実させたのですができないことがある。

なんと「変数の値の書き換え」ができない。

正確にいうと、スタック上の「自動変数」は書きかえられるが、
静的変数は書き換えられない状態
ということです。

ということで、なぜ静的変数が書き換えることができないのかの理由を確認し対処することになります。

静的変数なんて一般的なものですが実現するまでは大変なんですね。
2ndステップではいろいろライブラリを充実させている。
メモリ操作や文字列操作の一般的な関数を定義した。
だいたいはネットにあがっている記述をコピペ。

唯一自分で手を動かしたのがビット演算子を用いる記述。
マイコンでビット単位を扱う機会が多いせいかよくみかける。
演算子のとても整理されたサイトは、ここ




コンパイルを無事通しPCを再起動して書き込み。
ちゃんと表示された。

$OS自作してみる。-2ndstep
gccのオプションで-mint32というオプションがあります。
int型を32ビットで扱う指定。

16ビットCPUだと32ビットどうしの掛算/割算命令を持っていないので失敗するそうです。
でも、通常32ビットどうしの掛算/割算はソフトウェア・エミュレーションライブラリをリンクすればできるとのこと。

またlongなら32ビットの変数として扱われ問題ないとのこと。

プログラマ側でint型が16ビットであるとするときちんと意識すれば問題ありませんと書いてある。
通常のプログラムでは大きい値を扱うことが少ないので扱う場合は、きちんと開発環境を意識しないといけませんね。



でもgccでオプションでint型を32ビットで扱うよと指定したら、ハード(CPU)の環境なんか気にせずうまくいってくれると思いこんでしまうよなぁ。

ちなみにmint32で検索してみたらはまっている人がいました。
その人の記事がここ